<?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>236655</bug_id>
          
          <creation_ts>2022-02-15 11:31:35 -0800</creation_ts>
          <short_desc>[WGSL] Add enough of the AST for the simplest shaders</short_desc>
          <delta_ts>2022-03-10 15:11:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>237736</blocked>
    
    <blocked>237629</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>mmaxfield</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1841839</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-15 11:31:35 -0800</bug_when>
    <thetext>The parser will come in its own patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841844</commentid>
    <comment_count>1</comment_count>
      <attachid>452069</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-15 11:41:30 -0800</bug_when>
    <thetext>Created attachment 452069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841934</commentid>
    <comment_count>2</comment_count>
      <attachid>452069</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-15 13:59:21 -0800</bug_when>
    <thetext>Comment on attachment 452069
Patch

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

r=me, but please consider the LFC approach. Also please don&apos;t land until EWS says it can build.

&gt; Source/WebGPU/WGSL/AST/Attribute.h:35
&gt; +class Attribute : public ASTNode

Attributes are ASTNodes? Why?

&gt; Source/WebGPU/WGSL/AST/Expression.h:60
&gt; +    bool isBoolLiteral() const { return kind() == Kind::BoolLiteral; }
&gt; +    bool isInt32Literal() const { return kind() == Kind::Int32Literal; }
&gt; +    bool isUInt32Literal() const { return kind() == Kind::Uint32Literal; }
&gt; +    bool isFloat32Literal() const { return kind() == Kind::Float32Literal; }
&gt; +    bool isIdentifier() const { return kind() == Kind::Identifier; }
&gt; +    bool isStructureAccess() const { return kind() == Kind::StructureAccess; }
&gt; +    bool isTypeConversion() const { return kind() == Kind::TypeConversion; }

We usually use virtual functions for these instead of an explicit m_kind. What&apos;s the reason you prefer to spend the memory?

&gt; Source/WebGPU/WGSL/AST/FunctionDecl.h:51
&gt; +                    return { CompilationMessage(&quot;It is not valid to apply the builtin attribute twice to a parameter&quot;, attr-&gt;span()) };

Do you really want to do validation checking inside the AST nodes?

LFC uses a design that clearly separates the data model from the controller that operates on that data model. It uses things like explicit Builder classes rather than calling methods on the AST nodes themselves. I think that&apos;s a better design, because 1) It makes it clear from types involved which operation is being performed in which stage in the compiler, so it&apos;s always clear where invariants hold and when it&apos;s legal to call certain functions 2) it makes code easier to read (and, I would claim, write) by having each file narrowly contain a focused set of methods, rather than a sprawl of whatever anything might want to do on an ASTNode 3) By making stronger separation of functionality, we can more easily reason about the code at the macro level, for example, to some day try to run some parts of the compiler in parallel (which may not be that useful for a WGSL compiler, but has seen some amazing benefits in LFC).

&gt; Source/WebGPU/WGSL/AST/Shader.h:37
&gt; +class Shader : ASTNode {

I would call this ShaderModule. Conceptually I think of &quot;shaders&quot; as individual entry points.

&gt; Source/WebGPU/WGSL/AST/VariableQualifier.h:46
&gt; +class VariableQualifier : public ASTNode {

Ditto about not understanding why this is an ASTNode and not just a member field of a variable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842860</commentid>
    <comment_count>3</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-17 06:19:27 -0800</bug_when>
    <thetext>The build issue was just a missing file.

&gt; &gt; Source/WebGPU/WGSL/AST/Attribute.h:35
&gt; &gt; +class Attribute : public ASTNode
&gt; 
&gt; Attributes are ASTNodes? Why?

So that they have a SourceSpan, so that we can give precise error messages in case of repeated/invalid attributes.

&gt; &gt; Source/WebGPU/WGSL/AST/Expression.h:60
&gt; &gt; +    bool isBoolLiteral() const { return kind() == Kind::BoolLiteral; }
&gt; &gt; +    bool isInt32Literal() const { return kind() == Kind::Int32Literal; }
&gt; &gt; +    bool isUInt32Literal() const { return kind() == Kind::Uint32Literal; }
&gt; &gt; +    bool isFloat32Literal() const { return kind() == Kind::Float32Literal; }
&gt; &gt; +    bool isIdentifier() const { return kind() == Kind::Identifier; }
&gt; &gt; +    bool isStructureAccess() const { return kind() == Kind::StructureAccess; }
&gt; &gt; +    bool isTypeConversion() const { return kind() == Kind::TypeConversion; }
&gt; 
&gt; We usually use virtual functions for these instead of an explicit m_kind.
&gt; What&apos;s the reason you prefer to spend the memory?

I followed the examples I found in the WebCore code, e.g. StyleRuleBase.

It is actually a possible memory saving, since we are only using an 8-bit m_kind, instead of a 64-bit virtual table pointer.

But I am fully willing to move to virtual methods, it is simpler and would match for example AccessibilityObject.

&gt; &gt; Source/WebGPU/WGSL/AST/FunctionDecl.h:51
&gt; &gt; +                    return { CompilationMessage(&quot;It is not valid to apply the builtin attribute twice to a parameter&quot;, attr-&gt;span()) };
&gt; 
&gt; Do you really want to do validation checking inside the AST nodes?
&gt; 
&gt; LFC uses a design that clearly separates the data model from the controller
&gt; that operates on that data model. It uses things like explicit Builder
&gt; classes rather than calling methods on the AST nodes themselves. I think
&gt; that&apos;s a better design, because 1) It makes it clear from types involved
&gt; which operation is being performed in which stage in the compiler, so it&apos;s
&gt; always clear where invariants hold and when it&apos;s legal to call certain
&gt; functions 2) it makes code easier to read (and, I would claim, write) by
&gt; having each file narrowly contain a focused set of methods, rather than a
&gt; sprawl of whatever anything might want to do on an ASTNode 3) By making
&gt; stronger separation of functionality, we can more easily reason about the
&gt; code at the macro level, for example, to some day try to run some parts of
&gt; the compiler in parallel (which may not be that useful for a WGSL compiler,
&gt; but has seen some amazing benefits in LFC).

I am rewriting this to follow your suggestion.

&gt; &gt; Source/WebGPU/WGSL/AST/Shader.h:37
&gt; &gt; +class Shader : ASTNode {
&gt; 
&gt; I would call this ShaderModule. Conceptually I think of &quot;shaders&quot; as
&gt; individual entry points.

Ok, renamed.

&gt; &gt; Source/WebGPU/WGSL/AST/VariableQualifier.h:46
&gt; &gt; +class VariableQualifier : public ASTNode {
&gt; 
&gt; Ditto about not understanding why this is an ASTNode and not just a member
&gt; field of a variable

We may want to give precise error messages about its location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842861</commentid>
    <comment_count>4</comment_count>
      <attachid>452359</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-17 06:19:52 -0800</bug_when>
    <thetext>Created attachment 452359
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842876</commentid>
    <comment_count>5</comment_count>
      <attachid>452359</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-02-17 06:49:51 -0800</bug_when>
    <thetext>Comment on attachment 452359
Patch

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

&gt; Source/WebGPU/WGSL/AST/Attribute.h:30
&gt; +#include &quot;wtf/UniqueRef.h&quot;
&gt; +#include &quot;wtf/Vector.h&quot;

wtf #includes should use #include &lt;&lt;&gt; syntax since they are not part of this project.

&gt; Source/WebGPU/WGSL/AST/Attribute.h:36
&gt; +class Attribute : public ASTNode
&gt; +{

{ should go on the previous line. (There are few more like this that need updating in this file and others in the patch).

&gt; Source/WebGPU/WGSL/AST/Expressions/IdentifierExpression.h:33
&gt; +class IdentifierExpression : public Expression {

Unclear to me if this is a final class, but if there is no intention of subclassing this, you should add the &quot;final&quot; modifier. (same for other classes like this).

&gt; Source/WebGPU/WGSL/AST/GlobalDirective.h:39
&gt; +    StringView m_name;

Can this ever be initialized?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842938</commentid>
    <comment_count>6</comment_count>
      <attachid>452379</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-17 09:48:16 -0800</bug_when>
    <thetext>Created attachment 452379
Patch

- Moved kind() methods from using a field to being virtual.
- Added missing TypeDecls
- Fixed style nits
- Applied Sam&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843375</commentid>
    <comment_count>7</comment_count>
      <attachid>452379</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-18 06:43:54 -0800</bug_when>
    <thetext>Comment on attachment 452379
Patch

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

&gt; Source/WebGPU/WGSL/AST/TypeDecl.h:74
&gt; +        Vec2,

Surprising to see this rather than a pointer to an inner type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844804</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-22 11:32:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/89307070&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849022</commentid>
    <comment_count>9</comment_count>
      <attachid>454049</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-07 16:28:07 -0800</bug_when>
    <thetext>Created attachment 454049
Patch for landing

Just rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849374</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-08 12:42:34 -0800</bug_when>
    <thetext>Committed r291005 (248181@main): &lt;https://commits.webkit.org/248181@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454049.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452069</attachid>
            <date>2022-02-15 11:41:30 -0800</date>
            <delta_ts>2022-02-17 06:19:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchAST</filename>
            <type>text/plain</type>
            <size>86712</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggNzMzN2RhZjM1OTg4Li41ZGQ1OTAwZDE5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQ2IEBACisyMDIyLTAyLTE1ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CisKKyAgICAgICAgW1dHU0xdIEFkZCBlbm91Z2ggb2YgdGhlIEFTVCBmb3IgdGhlIHNpbXBs
ZXN0IHNoYWRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNjY1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZXNlIEFTVCBub2RlcyBhcmUganVzdCB0aG9zZSByZXF1aXJlZCBmb3IgdGhlIG1vc3Qg
dHJpdmlhbCBncmFwaGljcyBhbmQgY29tcHV0ZSBzaGFkZXJzLgorICAgICAgICBJIHVzZWQgdGhl
IG1hY2hpbmVyeSBmcm9tIHd0Zi9UeXBlQ2FzdHMgYXMgc3VnZ2VzdGVkIGJ5IE15bGVzIGluIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMyNzYuCisgICAgICAgIEN1
cnJlbnRseSBhbGwgb2YgdGhlIGNvZGUgZm9yIHRoZXNlIG5vZGVzIGlzIGluY2x1ZGVkIGluIFdH
U0wuY3BwIHRvIHZlcmlmeSB0aGF0IHRoZXkgYnVpbGQuIFRoaXMgd2lsbCBiZSByZW1vdmVkIGlu
IHRoZSBwYXJzZXIgcGF0Y2guCisKKyAgICAgICAgQXR0cmlidXRlcyBhcmUgYWRkZWQgaW4gc2V0
QXR0cmlidXRlcyBtZXRob2RzIGluc3RlYWQgb2YgYmVpbmcgcGFydCBvZiB0aGUgY29uc3RydWN0
b3JzLCBiZWNhdXNlIGl0IGNhbiBmYWlsLCBhbmQgcmV0dXJuaW5nIGFuIGVycm9yIGZyb20gYSBj
b25zdHJ1Y3RvciBpcyB0cmlja3kuCisKKyAgICAgICAgKiBXR1NML0FTVC9BdHRyaWJ1dGUuaDog
QWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkF0dHJpYnV0ZTo6QXR0cmlidXRlKToKKyAgICAg
ICAgKFdHU0w6OkFTVDo6QXR0cmlidXRlOjpraW5kIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6QXR0cmlidXRlOjppc0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXR0cmli
dXRlOjppc0dyb3VwIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXR0cmlidXRlOjppc0Jp
bmRpbmcgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzU3RhZ2UgY29u
c3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzTG9jYXRpb24gY29uc3QpOgor
ICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzQnVpbHRpbiBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OkJsb2NrQXR0cmlidXRlOjpCbG9ja0F0dHJpYnV0ZSk6CisgICAgICAgIChX
R1NMOjpBU1Q6Okdyb3VwQXR0cmlidXRlOjpHcm91cEF0dHJpYnV0ZSk6CisgICAgICAgIChXR1NM
OjpBU1Q6Okdyb3VwQXR0cmlidXRlOjpncm91cCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6
OkJpbmRpbmdBdHRyaWJ1dGU6OkJpbmRpbmdBdHRyaWJ1dGUpOgorICAgICAgICAoV0dTTDo6QVNU
OjpCaW5kaW5nQXR0cmlidXRlOjpiaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6
U3RhZ2VBdHRyaWJ1dGU6OlN0YWdlQXR0cmlidXRlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3Rh
Z2VBdHRyaWJ1dGU6OnN0YWdlIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QnVpbHRpbkF0
dHJpYnV0ZTo6QnVpbHRpbkF0dHJpYnV0ZSk6CisgICAgICAgIChXR1NMOjpBU1Q6OkJ1aWx0aW5B
dHRyaWJ1dGU6Om5hbWUgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpMb2NhdGlvbkF0dHJp
YnV0ZTo6TG9jYXRpb25BdHRyaWJ1dGUpOgorICAgICAgICAoV0dTTDo6QVNUOjpMb2NhdGlvbkF0
dHJpYnV0ZTo6bG9jYXRpb24gY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL0V4cHJlc3Npb24u
aDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkV4cHJlc3Npb246OkV4cHJlc3Npb24pOgor
ICAgICAgICAoV0dTTDo6QVNUOjpFeHByZXNzaW9uOjpraW5kIGNvbnN0KToKKyAgICAgICAgKFdH
U0w6OkFTVDo6RXhwcmVzc2lvbjo6aXNCb29sTGl0ZXJhbCBjb25zdCk6CisgICAgICAgIChXR1NM
OjpBU1Q6OkV4cHJlc3Npb246OmlzSW50MzJMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNVSW50MzJMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNGbG9hdDMyTGl0ZXJhbCBjb25zdCk6CisgICAgICAgIChXR1NM
OjpBU1Q6OkV4cHJlc3Npb246OmlzSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6OkV4cHJlc3Npb246OmlzU3RydWN0dXJlQWNjZXNzIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNUeXBlQ29udmVyc2lvbiBjb25zdCk6CisgICAgICAgICogV0dT
TC9BU1QvRXhwcmVzc2lvbnMvSWRlbnRpZmllckV4cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAg
IChXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uOjpJZGVudGlmaWVyRXhwcmVzc2lvbik6
CisgICAgICAgIChXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uOjppZGVudGlmaWVyIGNv
bnN0KToKKyAgICAgICAgKiBXR1NML0FTVC9FeHByZXNzaW9ucy9MaXRlcmFsRXhwcmVzc2lvbnMu
aDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkJvb2xMaXRlcmFsOjpCb29sTGl0ZXJhbCk6
CisgICAgICAgIChXR1NMOjpBU1Q6OkJvb2xMaXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OkludDMyTGl0ZXJhbDo6SW50MzJMaXRlcmFsKToKKyAgICAgICAgKFdHU0w6
OkFTVDo6SW50MzJMaXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlVp
bnQzMkxpdGVyYWw6OlVpbnQzMkxpdGVyYWwpOgorICAgICAgICAoV0dTTDo6QVNUOjpVaW50MzJM
aXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZsb2F0MzJMaXRlcmFs
OjpGbG9hdDMyTGl0ZXJhbCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZsb2F0MzJMaXRlcmFsOjp2
YWx1ZSBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNj
ZXNzLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpTdHJ1Y3R1cmVBY2Nlc3M6OlN0cnVj
dHVyZUFjY2Vzcyk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdHVyZUFjY2Vzczo6YmFzZSk6
CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdHVyZUFjY2Vzczo6ZmllbGROYW1lIGNvbnN0KToK
KyAgICAgICAgKiBXR1NML0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdHU0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OlR5cGVDb252ZXJzaW9uKToKKyAg
ICAgICAgKFdHU0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OnR5cGVEZWNsKToKKyAgICAgICAgKFdH
U0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OmFyZ3VtZW50cyk6CisgICAgICAgICogV0dTTC9BU1Qv
RnVuY3Rpb25EZWNsLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpQYXJhbWV0ZXI6OlBh
cmFtZXRlcik6CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6c2V0QXR0cmlidXRlcyk6
CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6YnVpbHRpbiBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6bG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV0dTTDo6
QVNUOjpQYXJhbWV0ZXI6Om5hbWUgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpQYXJhbWV0
ZXI6OnR5cGUpOgorICAgICAgICAoV0dTTDo6QVNUOjpGdW5jdGlvbkRlY2w6OkZ1bmN0aW9uRGVj
bCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6c2V0QXR0cmlidXRlcyk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6c2V0UmV0dXJuQXR0cmlidXRlcyk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6ZW50cnlQb2ludFN0YWdlIGNvbnN0KToK
KyAgICAgICAgKFdHU0w6OkFTVDo6RnVuY3Rpb25EZWNsOjpuYW1lIGNvbnN0KToKKyAgICAgICAg
KFdHU0w6OkFTVDo6RnVuY3Rpb25EZWNsOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKFdHU0w6OkFT
VDo6RnVuY3Rpb25EZWNsOjpyZXR1cm5CdWlsdGluIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6RnVuY3Rpb25EZWNsOjpyZXR1cm5Mb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6OkZ1bmN0aW9uRGVjbDo6bWF5YmVSZXR1cm5UeXBlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6
RnVuY3Rpb25EZWNsOjpib2R5KToKKyAgICAgICAgKiBXR1NML0FTVC9HbG9iYWxEZWNsLmg6IEFk
ZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxEZWNsOjpHbG9iYWxEZWNsKToKKyAgICAg
ICAgKFdHU0w6OkFTVDo6R2xvYmFsRGVjbDo6a2luZCBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6Okdsb2JhbERlY2w6OmlzR2xvYmFsVmFyaWFibGUgY29uc3QpOgorICAgICAgICAoV0dTTDo6
QVNUOjpHbG9iYWxEZWNsOjppc1N0cnVjdCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okds
b2JhbERlY2w6OmlzRnVuY3Rpb24gY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL0dsb2JhbERp
cmVjdGl2ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsRGlyZWN0aXZlOjpu
YW1lIGNvbnN0KToKKyAgICAgICAgKiBXR1NML0FTVC9HbG9iYWxWYXJpYWJsZURlY2wuaDogQWRk
ZWQuCisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6R2xvYmFsVmFyaWFi
bGVEZWNsKToKKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsVmFyaWFibGVEZWNsOjpzZXRBdHRy
aWJ1dGVzKToKKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsVmFyaWFibGVEZWNsOjpncm91cCBj
b25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6YmluZGluZyBj
b25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6bmFtZSBjb25z
dCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6bWF5YmVRdWFsaWZp
ZXIpOgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxWYXJpYWJsZURlY2w6Om1heWJlVHlwZURl
Y2wpOgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxWYXJpYWJsZURlY2w6Om1heWJlSW5pdGlh
bGl6ZXIpOgorICAgICAgICAqIFdHU0wvQVNUL1NoYWRlci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkdQVS9XR1NML0FTVC5oLgorICAgICAgICAqIFdHU0wvQVNUL1N0YXRlbWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6U3RhdGVtZW50OjpTdGF0ZW1lbnQpOgorICAgICAgICAo
V0dTTDo6QVNUOjpTdGF0ZW1lbnQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpT
dGF0ZW1lbnQ6OmlzQ29tcG91bmQgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpTdGF0ZW1l
bnQ6OmlzUmV0dXJuIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RhdGVtZW50Ojppc0Fz
c2lnbm1lbnQgY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL1N0YXRlbWVudHMvQXNzaWdubWVu
dFN0YXRlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6QXNzaWdubWVudFN0YXRl
bWVudDo6QXNzaWdubWVudFN0YXRlbWVudCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkFzc2lnbm1l
bnRTdGF0ZW1lbnQ6Om1heWJlTGhzKToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXNzaWdubWVudFN0
YXRlbWVudDo6cmhzKToKKyAgICAgICAgKiBXR1NML0FTVC9TdGF0ZW1lbnRzL1JldHVyblN0YXRl
bWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6UmV0dXJuU3RhdGVtZW50OjpSZXR1
cm5TdGF0ZW1lbnQpOgorICAgICAgICAoV0dTTDo6QVNUOjpSZXR1cm5TdGF0ZW1lbnQ6Om1heWJl
RXhwcmVzc2lvbik6CisgICAgICAgICogV0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oOiBBZGRlZC4K
KyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0TWVtYmVyOjpTdHJ1Y3RNZW1iZXIpOgorICAgICAg
ICAoV0dTTDo6QVNUOjpTdHJ1Y3RNZW1iZXI6OnNldEF0dHJpYnV0ZXMpOgorICAgICAgICAoV0dT
TDo6QVNUOjpTdHJ1Y3RNZW1iZXI6OmJ1aWx0aW4gY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNU
OjpTdHJ1Y3RNZW1iZXI6OmxvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3Ry
dWN0TWVtYmVyOjpuYW1lIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0TWVtYmVy
Ojp0eXBlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0RGVjbDo6U3RydWN0RGVjbCk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdERlY2w6OnNldEF0dHJpYnV0ZXMpOgorICAgICAgICAo
V0dTTDo6QVNUOjpTdHJ1Y3REZWNsOjppc0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6U3RydWN0RGVjbDo6bmFtZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdERl
Y2w6Om1lbWJlcnMpOgorICAgICAgICAqIFdHU0wvQVNUL1R5cGVEZWNsLmg6IEFkZGVkLgorICAg
ICAgICAoV0dTTDo6QVNUOjpUeXBlRGVjbDo6VHlwZURlY2wpOgorICAgICAgICAoV0dTTDo6QVNU
OjpUeXBlRGVjbDo6a2luZCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlR5cGVEZWNsOjpp
c05hbWVkIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6VHlwZURlY2w6OmlzUGFyYW1ldGVy
aXplZCBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvVmFyaWFibGVRdWFsaWZpZXIuaDogQWRk
ZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OlZhcmlhYmxlUXVhbGlmaWVyOjpWYXJpYWJsZVF1YWxp
Zmllcik6CisgICAgICAgIChXR1NMOjpBU1Q6OlZhcmlhYmxlUXVhbGlmaWVyOjpzdG9yYWdlQ2xh
c3MgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpWYXJpYWJsZVF1YWxpZmllcjo6YWNjZXNz
TW9kZSBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1ROb2RlLmg6IEFkZGVkLgorICAgICAgICAo
V0dTTDo6QVNUOjpBU1ROb2RlOjpBU1ROb2RlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6QVNUTm9k
ZTo6c3BhbiBjb25zdCk6CisgICAgICAgICogV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdHU0w6OkNvbXBpbGF0aW9uTWVzc2FnZTo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuaDogQWRkZWQuCisgICAgICAgIChXR1NM
OjpDb21waWxhdGlvbk1lc3NhZ2U6OkNvbXBpbGF0aW9uTWVzc2FnZSk6CisgICAgICAgICogV0dT
TC9XR1NMLmNwcDoKKyAgICAgICAgKiBXR1NML1dHU0wuaDoKKyAgICAgICAgKiBXZWJHUFUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMi0wMi0xNCAgUm9iaW4gTW9yaXNzZXQgIDxy
bW9yaXNzZXRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXR1NMXSBJbXBsZW1lbnQgZW5vdWdoIG9m
IHRoZSBsZXhlciBmb3IgdGhlIHNpbXBsZXN0IHNoYWRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJHUFUvV0dTTC9BU1QuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggODFjM2E0MDRmZDVkLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkdQVS9XR1NML0FTVC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi1u
YW1lc3BhY2UgV0dTTCB7Ci0KLWNsYXNzIEFTVCB7Ci0KLX07Ci0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvQXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0F0dHJpYnV0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWU1
MjZlOTAyYmFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9BdHRy
aWJ1dGUuaApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgInd0Zi9VbmlxdWVSZWYuaCIKKyNpbmNsdWRl
ICJ3dGYvVmVjdG9yLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1l
c3BhY2UgV0dTTDo6QVNUIHsKKworY2xhc3MgQXR0cmlidXRlIDogcHVibGljIEFTVE5vZGUKK3sK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEtp
bmQgeworICAgICAgICBCbG9jaywKKyAgICAgICAgR3JvdXAsCisgICAgICAgIEJpbmRpbmcsCisg
ICAgICAgIFN0YWdlLAorICAgICAgICBMb2NhdGlvbiwKKyAgICAgICAgQnVpbHRpbiwKKyAgICB9
OworCisgICAgQXR0cmlidXRlKFNvdXJjZVNwYW4gc3BhbiwgS2luZCBraW5kKQorICAgICAgICA6
IEFTVE5vZGUoc3BhbikKKyAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICB7CisgICAgfQorCisg
ICAgS2luZCBraW5kKCkgY29uc3QgIHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGJvb2wgaXNCbG9j
aygpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpCbG9jazsgfQorICAgIGJvb2wgaXNH
cm91cCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpHcm91cDsgfQorICAgIGJvb2wg
aXNCaW5kaW5nKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkJpbmRpbmc7IH0KKyAg
ICBib29sIGlzU3RhZ2UoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6U3RhZ2U7IH0K
KyAgICBib29sIGlzTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6TG9j
YXRpb247IH0KKyAgICBib29sIGlzQnVpbHRpbigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBL
aW5kOjpCdWlsdGluOyB9CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7Cit9OworCitjbGFz
cyBCbG9ja0F0dHJpYnV0ZSA6IHB1YmxpYyBBdHRyaWJ1dGUKK3sKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCbG9ja0F0dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4p
CisgICAgICAgIDogQXR0cmlidXRlKHNwYW4sIEtpbmQ6OkJsb2NrKQorICAgIHsKKyAgICB9Cit9
OworCitjbGFzcyBHcm91cEF0dHJpYnV0ZSA6IHB1YmxpYyBBdHRyaWJ1dGUgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdyb3VwQXR0cmlidXRlKFNvdXJjZVNw
YW4gc3BhbiwgdW5zaWduZWQgZ3JvdXApCisgICAgICAgIDogQXR0cmlidXRlKHNwYW4sIEtpbmQ6
Okdyb3VwKQorICAgICAgICAsIG1fdmFsdWUoZ3JvdXApCisgICAgeworICAgIH0KKworICAgIHVu
c2lnbmVkIGdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIG1fdmFsdWU7Cit9OworCitjbGFzcyBCaW5kaW5nQXR0cmlidXRlIDogcHVibGlj
IEF0dHJpYnV0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
QmluZGluZ0F0dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4sIHVuc2lnbmVkIGJpbmRpbmcpCisgICAg
ICAgIDogQXR0cmlidXRlKHNwYW4sIEtpbmQ6OkJpbmRpbmcpCisgICAgICAgICwgbV92YWx1ZShi
aW5kaW5nKQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBiaW5kaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fdmFsdWU7Cit9Owor
CitjbGFzcyBTdGFnZUF0dHJpYnV0ZSA6IHB1YmxpYyBBdHRyaWJ1dGUgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgU3RhZ2UgOiB1aW50OF90
IHsKKyAgICAgICAgQ29tcHV0ZSwKKyAgICAgICAgVmVydGV4LAorICAgICAgICBGcmFnbWVudAor
ICAgIH07CisKKyAgICBTdGFnZUF0dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4sIFN0YWdlIHN0YWdl
KQorICAgICAgICA6IEF0dHJpYnV0ZShzcGFuLCBLaW5kOjpTdGFnZSkKKyAgICAgICAgLCBtX3N0
YWdlKHN0YWdlKQorICAgIHsKKyAgICB9CisKKyAgICBTdGFnZSBzdGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhZ2U7IH0KKworcHJpdmF0ZToKKyAgICBTdGFnZSBtX3N0YWdlOworfTsKKworY2xh
c3MgQnVpbHRpbkF0dHJpYnV0ZSA6IHB1YmxpYyBBdHRyaWJ1dGUgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEJ1aWx0aW5BdHRyaWJ1dGUoU291cmNlU3BhbiBz
cGFuLCBTdHJpbmdWaWV3IG5hbWUpCisgICAgICAgIDogQXR0cmlidXRlKHNwYW4sIEtpbmQ6OkJ1
aWx0aW4pCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKworICAgIGNvbnN0
IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworcHJpdmF0ZToK
KyAgICBTdHJpbmdWaWV3IG1fbmFtZTsKK307CisKK2NsYXNzIExvY2F0aW9uQXR0cmlidXRlIDog
cHVibGljIEF0dHJpYnV0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgTG9jYXRpb25BdHRyaWJ1dGUoU291cmNlU3BhbiBzcGFuLCB1bnNpZ25lZCB2YWx1ZSkK
KyAgICAgICAgOiBBdHRyaWJ1dGUoc3BhbiwgS2luZDo6TG9jYXRpb24pCisgICAgICAgICwgbV92
YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV92YWx1ZTsK
K307CisKK3VzaW5nIEF0dHJpYnV0ZXMgPSBWZWN0b3I8VW5pcXVlUmVmPEF0dHJpYnV0ZT4+Owor
Cit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX1dHU0xfQVRUUklCVVRFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdHU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdHU0w6OkFTVDo6QXR0cmlidXRlJiBhdHRyKSB7IHJl
dHVybiBhdHRyLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9BVFRSSUJVVEUoQmxvY2tBdHRyaWJ1dGUsIGlz
QmxvY2soKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9BVFRSSUJVVEUoR3JvdXBBdHRy
aWJ1dGUsIGlzR3JvdXAoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9BVFRSSUJVVEUo
QmluZGluZ0F0dHJpYnV0ZSwgaXNCaW5kaW5nKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dH
U0xfQVRUUklCVVRFKFN0YWdlQXR0cmlidXRlLCBpc1N0YWdlKCkpCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dHU0xfQVRUUklCVVRFKExvY2F0aW9uQXR0cmlidXRlLCBpc0xvY2F0aW9uKCkpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKEJ1aWx0aW5BdHRyaWJ1dGUsIGlz
QnVpbHRpbigpKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjIwMjliNjA0OTA4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9uLmgKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1
ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKworbmFtZXNwYWNlIFdHU0w6OkFTVCB7CisKK2NsYXNzIEV4
cHJlc3Npb24gOiBwdWJsaWMgQVNUTm9kZQoreworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIGVudW0gY2xhc3MgS2luZCB7CisgICAgICAgIEJvb2xMaXRlcmFsLAor
ICAgICAgICBJbnQzMkxpdGVyYWwsCisgICAgICAgIFVpbnQzMkxpdGVyYWwsCisgICAgICAgIEZs
b2F0MzJMaXRlcmFsLAorICAgICAgICBJZGVudGlmaWVyLAorICAgICAgICBTdHJ1Y3R1cmVBY2Nl
c3MsCisgICAgICAgIFR5cGVDb252ZXJzaW9uLAorICAgIH07CisKKyAgICBFeHByZXNzaW9uKFNv
dXJjZVNwYW4gc3BhbiwgS2luZCBraW5kKQorICAgICAgICA6IEFTVE5vZGUoc3BhbikKKyAgICAg
ICAgLCBtX2tpbmQoa2luZCkKKyAgICB7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3Qg
IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGJvb2wgaXNCb29sTGl0ZXJhbCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBLaW5kOjpCb29sTGl0ZXJhbDsgfQorICAgIGJvb2wgaXNJbnQzMkxpdGVy
YWwoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6SW50MzJMaXRlcmFsOyB9CisgICAg
Ym9vbCBpc1VJbnQzMkxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6VWlu
dDMyTGl0ZXJhbDsgfQorICAgIGJvb2wgaXNGbG9hdDMyTGl0ZXJhbCgpIGNvbnN0IHsgcmV0dXJu
IGtpbmQoKSA9PSBLaW5kOjpGbG9hdDMyTGl0ZXJhbDsgfQorICAgIGJvb2wgaXNJZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OklkZW50aWZpZXI7IH0KKyAgICBib29s
IGlzU3RydWN0dXJlQWNjZXNzKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OlN0cnVj
dHVyZUFjY2VzczsgfQorICAgIGJvb2wgaXNUeXBlQ29udmVyc2lvbigpIGNvbnN0IHsgcmV0dXJu
IGtpbmQoKSA9PSBLaW5kOjpUeXBlQ29udmVyc2lvbjsgfQorCitwcml2YXRlOgorICAgIEtpbmQg
bV9raW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKKyNkZWZpbmUgU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19XR1NMX0VYUFJFU1NJT04oVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNh
dGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV0dTTDo6QVNUOjpUb1ZhbHVlVHlw
ZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV0dTTDo6QVNUOjpFeHByZXNz
aW9uJiBleHByZXNzaW9uKSB7IHJldHVybiBleHByZXNzaW9uLnByZWRpY2F0ZTsgfSBcCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wv
QVNUL0V4cHJlc3Npb25zL0lkZW50aWZpZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0V4cHJlc3Npb25zL0lkZW50aWZpZXJFeHByZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mNDA1NTU0OTMwMTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL0lkZW50aWZpZXJFeHByZXNzaW9u
LmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKworbmFt
ZXNwYWNlIFdHU0w6OkFTVCB7CisKK2NsYXNzIElkZW50aWZpZXJFeHByZXNzaW9uIDogcHVibGlj
IEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IElkZW50aWZpZXJFeHByZXNzaW9uKFNvdXJjZVNwYW4gc3BhbiwgU3RyaW5nVmlldyBpZGVudGlm
aWVyKQorICAgICAgICA6IEV4cHJlc3Npb24oc3BhbiwgS2luZDo6SWRlbnRpZmllcikKKyAgICAg
ICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qg
U3RyaW5nVmlldyYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQor
Citwcml2YXRlOgorICAgIFN0cmluZ1ZpZXcgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9FWFBSRVNTSU9O
KElkZW50aWZpZXJFeHByZXNzaW9uLCBpc0lkZW50aWZpZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvTGl0ZXJhbEV4cHJlc3Npb25zLmggYi9Tb3Vy
Y2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL0xpdGVyYWxFeHByZXNzaW9ucy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDJjMTU3MjlkYTY2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9MaXRlcmFsRXhw
cmVzc2lvbnMuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
K25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBCb29sTGl0ZXJhbCA6IHB1YmxpYyBFeHBy
ZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCb29s
TGl0ZXJhbChTb3VyY2VTcGFuIHNwYW4sIGJvb2wgdmFsdWUpCisgICAgICAgIDogRXhwcmVzc2lv
bihzcGFuLCBLaW5kOjpCb29sTGl0ZXJhbCkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQor
Citwcml2YXRlOgorICAgIGJvb2wgbV92YWx1ZTsKK307CisKK2NsYXNzIEludDMyTGl0ZXJhbCA6
IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBJbnQzMkxpdGVyYWwoU291cmNlU3BhbiBzcGFuLCBpbnQzMl90IHZhbHVlKQorICAg
ICAgICA6IEV4cHJlc3Npb24oc3BhbiwgS2luZDo6SW50MzJMaXRlcmFsKQorICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIGludDMyX3QgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsK
KworY2xhc3MgVWludDMyTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBVaW50MzJMaXRlcmFsKFNvdXJjZVNwYW4g
c3BhbiwgdWludDMyX3QgdmFsdWUpCisgICAgICAgIDogRXhwcmVzc2lvbihzcGFuLCBLaW5kOjpV
aW50MzJMaXRlcmFsKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKwor
ICAgIHVpbnQzMl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRl
OgorICAgIHVpbnQzMl90IG1fdmFsdWU7Cit9OworCitjbGFzcyBGbG9hdDMyTGl0ZXJhbCA6IHB1
YmxpYyBFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBGbG9hdDMyTGl0ZXJhbChTb3VyY2VTcGFuIHNwYW4sIGZsb2F0IHZhbHVlKQorICAgICAg
ICA6IEV4cHJlc3Npb24oc3BhbiwgS2luZDo6RmxvYXQzMkxpdGVyYWwpCisgICAgICAgICwgbV92
YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgbV92YWx1ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdHU0w6OkFTVAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfRVhQ
UkVTU0lPTihCb29sTGl0ZXJhbCwgaXNCb29sTGl0ZXJhbCgpKQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XR1NMX0VYUFJFU1NJT04oSW50MzJMaXRlcmFsLCBpc0ludDMyTGl0ZXJhbCgpKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0VYUFJFU1NJT04oRmxvYXQzMkxpdGVyYWwsIGlzRmxv
YXQzMkxpdGVyYWwoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9FWFBSRVNTSU9OKFVp
bnQzMkxpdGVyYWwsIGlzVUludDMyTGl0ZXJhbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQ
VS9XR1NML0FTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3MuaCBiL1NvdXJjZS9XZWJHUFUv
V0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kYTJiMWRjNzMxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkV4cHJl
c3Npb24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisKK25hbWVzcGFjZSBX
R1NMOjpBU1QgeworCitjbGFzcyBTdHJ1Y3R1cmVBY2Nlc3MgOiBwdWJsaWMgRXhwcmVzc2lvbiB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3RydWN0dXJlQWNj
ZXNzKFNvdXJjZVNwYW4gc3BhbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgYmFzZSwgU3RyaW5n
VmlldyBmaWVsZE5hbWUpCisgICAgICAgIDogRXhwcmVzc2lvbihzcGFuLCBLaW5kOjpTdHJ1Y3R1
cmVBY2Nlc3MpCisgICAgICAgICwgbV9iYXNlKFdURk1vdmUoYmFzZSkpCisgICAgICAgICwgbV9m
aWVsZE5hbWUoZmllbGROYW1lKQorICAgIHsKKyAgICB9CisKKyAgICBVbmlxdWVSZWY8RXhwcmVz
c2lvbj4mIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICBjb25zdCBTdHJpbmdWaWV3JiBm
aWVsZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpZWxkTmFtZTsgfQorCitwcml2YXRlOgorICAg
IFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2Jhc2U7CisgICAgU3RyaW5nVmlldyBtX2ZpZWxkTmFt
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVAorCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX1dHU0xfRVhQUkVTU0lPTihTdHJ1Y3R1cmVBY2Nlc3MsIGlzU3RydWN0dXJlQWNjZXNzKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1R5cGVDb252
ZXJzaW9uLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1R5cGVDb252ZXJz
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZWM1MzU1OWFj
MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25z
L1R5cGVDb252ZXJzaW9uLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCisv
LyBNYXkgYmUgY29udmVydGVkIHRvIGEgZnVuY3Rpb24gY2FsbCBkdXJpbmcgdmFsaWRhdGlvbiwg
YXMgd2UgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZSBkdXJpbmcgcGFyc2luZy4KK2NsYXNzIFR5
cGVDb252ZXJzaW9uIDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIFR5cGVDb252ZXJzaW9uKFNvdXJjZVNwYW4gc3BhbiwgVW5p
cXVlUmVmPFR5cGVEZWNsPiYmIHR5cGVEZWNsLCBWZWN0b3I8VW5pcXVlUmVmPEV4cHJlc3Npb24+
PiYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBFeHByZXNzaW9uKHNwYW4sIEtpbmQ6OlR5cGVDb252
ZXJzaW9uKQorICAgICAgICAsIG1fdHlwZURlY2woV1RGTW92ZSh0eXBlRGVjbCkpCisgICAgICAg
ICwgbV9hcmd1bWVudHMoV1RGTW92ZShhcmd1bWVudHMpKQorICAgIHsKKyAgICB9CisKKyAgICBV
bmlxdWVSZWY8VHlwZURlY2w+JiB0eXBlRGVjbCgpIHsgcmV0dXJuIG1fdHlwZURlY2w7IH0KKyAg
ICBWZWN0b3I8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYgYXJndW1lbnRzKCkgeyByZXR1cm4gbV9h
cmd1bWVudHM7IH0KKworcHJpdmF0ZToKKyAgICBVbmlxdWVSZWY8VHlwZURlY2w+IG1fdHlwZURl
Y2w7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9hcmd1bWVudHM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NM
X0VYUFJFU1NJT04oVHlwZUNvbnZlcnNpb24sIGlzVHlwZUNvbnZlcnNpb24oKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRnVuY3Rpb25EZWNsLmggYi9Tb3VyY2UvV2ViR1BV
L1dHU0wvQVNUL0Z1bmN0aW9uRGVjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uNjc2Mzg3NWRlZGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9X
R1NML0FTVC9GdW5jdGlvbkRlY2wuaApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgIkF0dHJpYnV0ZS5o
IgorI2luY2x1ZGUgIkNvbXBpbGF0aW9uTWVzc2FnZS5oIgorI2luY2x1ZGUgIlN0YXRlbWVudHMv
Q29tcG91bmRTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJUeXBlRGVjbC5oIgorCituYW1lc3BhY2Ug
V0dTTDo6QVNUIHsKKworY2xhc3MgUGFyYW1ldGVyIDogcHVibGljIEFTVE5vZGUgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFBhcmFtZXRlcihTb3VyY2VTcGFu
IHNwYW4sIFN0cmluZ1ZpZXcgbmFtZSwgVW5pcXVlUmVmPFR5cGVEZWNsPiYmIHR5cGUpCisgICAg
ICAgIDogQVNUTm9kZShzcGFuKQorICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAg
ICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQorICAgIHsKKyAgICB9CisKKyAgICBXQVJOX1VO
VVNFRF9SRVRVUk4gc3RkOjpvcHRpb25hbDxDb21waWxhdGlvbk1lc3NhZ2U+IHNldEF0dHJpYnV0
ZXMoQXR0cmlidXRlcyYgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgYXR0
ciA6IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIGlmIChhdHRyLT5pc0J1aWx0aW4oKSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX2J1aWx0aW5BdHRyaWJ1dGUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7IENvbXBpbGF0aW9uTWVzc2FnZSgiSXQgaXMgbm90IHZhbGlkIHRvIGFwcGx5
IHRoZSBidWlsdGluIGF0dHJpYnV0ZSB0d2ljZSB0byBhIHBhcmFtZXRlciIsIGF0dHItPnNwYW4o
KSkgfTsKKyAgICAgICAgICAgICAgICBtX2J1aWx0aW5BdHRyaWJ1dGUgPSBkb3duY2FzdDxCdWls
dGluQXR0cmlidXRlPihhdHRyLmdldCgpKS5uYW1lKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGF0dHItPmlzTG9jYXRpb24oKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2xvY2F0aW9uQXR0
cmlidXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBDb21waWxhdGlvbk1lc3NhZ2Uo
Ikl0IGlzIG5vdCB2YWxpZCB0byBhcHBseSB0aGUgbG9jYXRpb24gYXR0cmlidXRlIHR3aWNlIHRv
IGEgcGFyYW1ldGVyIiwgYXR0ci0+c3BhbigpKSB9OworICAgICAgICAgICAgICAgIG1fbG9jYXRp
b25BdHRyaWJ1dGUgPSBkb3duY2FzdDxMb2NhdGlvbkF0dHJpYnV0ZT4oYXR0ci5nZXQoKSkubG9j
YXRpb24oKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB7IENv
bXBpbGF0aW9uTWVzc2FnZSgiVGhpcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgZm9yIGEgcGFy
YW1ldGVyIiwgYXR0ci0+c3BhbigpKSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxTdHJpbmdWaWV3PiYgYnVpbHRpbigp
IGNvbnN0IHsgcmV0dXJuIG1fYnVpbHRpbkF0dHJpYnV0ZTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbkF0dHJpYnV0ZTsg
fQorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
KyAgICBUeXBlRGVjbCYgdHlwZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQorCitwcml2YXRlOgorICAg
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nVmlldz4gbV9idWlsdGluQXR0cmlidXRlIHsgc3RkOjpudWxs
b3B0IH07CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9sb2NhdGlvbkF0dHJpYnV0ZSB7
IHN0ZDo6bnVsbG9wdCB9OworICAgIFN0cmluZ1ZpZXcgbV9uYW1lOworICAgIFVuaXF1ZVJlZjxU
eXBlRGVjbD4gbV90eXBlOworfTsKKworY2xhc3MgRnVuY3Rpb25EZWNsIDogcHVibGljIEdsb2Jh
bERlY2wgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEZ1bmN0
aW9uRGVjbChTb3VyY2VTcGFuIHNvdXJjZVNwYW4sIFN0cmluZ1ZpZXcgbmFtZSwgVmVjdG9yPFVu
aXF1ZVJlZjxQYXJhbWV0ZXI+PiYmIHBhcmFtZXRlcnMsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlRGVj
bD4mJiByZXR1cm5UeXBlLCBDb21wb3VuZFN0YXRlbWVudCYmIGJvZHkpCisgICAgICAgIDogR2xv
YmFsRGVjbChzb3VyY2VTcGFuLCBLaW5kOjpGdW5jdGlvbikKKyAgICAgICAgLCBtX25hbWUobmFt
ZSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKKyAgICAgICAg
LCBtX3JldHVyblR5cGUoV1RGTW92ZShyZXR1cm5UeXBlKSkKKyAgICAgICAgLCBtX2JvZHkoV1RG
TW92ZShib2R5KSkKKyAgICB7CisgICAgfQorCisgICAgV0FSTl9VTlVTRURfUkVUVVJOIHN0ZDo6
b3B0aW9uYWw8Q29tcGlsYXRpb25NZXNzYWdlPiBzZXRBdHRyaWJ1dGVzKEF0dHJpYnV0ZXMmIGF0
dHJpYnV0ZXMpCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIGF0dHIgOiBhdHRyaWJ1dGVzKSB7
CisgICAgICAgICAgICBpZiAoYXR0ci0+aXNTdGFnZSgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fc3RhZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IENvbXBpbGF0aW9uTWVzc2Fn
ZSgiSXQgaXMgbm90IHZhbGlkIHRvIGFwcGx5IHRoZSBzdGFnZSBhdHRyaWJ1dGUgdHdpY2UgdG8g
YSBmdW5jdGlvbiIsIGF0dHItPnNwYW4oKSkgfTsKKyAgICAgICAgICAgICAgICBtX3N0YWdlID0g
ZG93bmNhc3Q8U3RhZ2VBdHRyaWJ1dGU+KGF0dHIuZ2V0KCkpLnN0YWdlKCk7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4geyBDb21waWxhdGlvbk1lc3NhZ2UoIlRo
aXMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIGZvciBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIiwg
YXR0ci0+c3BhbigpKSB9OworICAgICAgICB9CisgICAgICAgIGlmICghbV9zdGFnZS5oYXNfdmFs
dWUoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBwYXJhbSA6IHBhcmFtZXRlcnMoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChwYXJhbS0+YnVpbHRpbigpLmhhc192YWx1ZSgpIHx8IHBhcmFt
LT5sb2NhdGlvbigpLmhhc192YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBD
b21waWxhdGlvbk1lc3NhZ2UoIk9ubHkgcGFyYW1ldGVycyBvZiBlbnRyeSBwb2ludHMgY2FuIGhh
dmUgYXR0cmlidXRlcyIsIHBhcmFtLT5zcGFuKCkpIH07CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4g
c3RkOjpvcHRpb25hbDxDb21waWxhdGlvbk1lc3NhZ2U+IHNldFJldHVybkF0dHJpYnV0ZXMoQXR0
cmlidXRlcyYgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChtYXliZVJldHVyblR5
cGUoKSB8fCBhdHRyaWJ1dGVzLmlzRW1wdHkoKSk7CisgICAgICAgIGlmICghbV9zdGFnZS5oYXNf
dmFsdWUoKSAmJiAhYXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4geyBD
b21waWxhdGlvbk1lc3NhZ2UoIk9ubHkgZW50cnkgcG9pbnRzIGNhbiBoYXZlIGF0dHJpYnV0ZXMg
b24gdGhlaXIgcmV0dXJuIiwgYXR0cmlidXRlc1swXS0+c3BhbigpKSB9OworICAgICAgICBmb3Ig
KGF1dG8mIGF0dHIgOiBhdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICBpZiAoYXR0ci0+aXNCdWls
dGluKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9yZXR1cm5CdWlsdGluKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geyBDb21waWxhdGlvbk1lc3NhZ2UoIkl0IGlzIG5vdCB2YWxpZCB0
byBhcHBseSB0aGUgYnVpbHRpbiBhdHRyaWJ1dGUgdHdpY2UgdG8gYSBmdW5jdGlvbiByZXR1cm4i
LCBhdHRyLT5zcGFuKCkpIH07CisgICAgICAgICAgICAgICAgbV9yZXR1cm5CdWlsdGluID0gZG93
bmNhc3Q8QnVpbHRpbkF0dHJpYnV0ZT4oYXR0ci5nZXQoKSkubmFtZSgpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChhdHRyLT5pc0xvY2F0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9y
ZXR1cm5Mb2NhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgQ29tcGlsYXRpb25N
ZXNzYWdlKCJJdCBpcyBub3QgdmFsaWQgdG8gYXBwbHkgdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSB0
d2ljZSB0byBhIGZ1bmN0aW9uIHJldHVybiIsIGF0dHItPnNwYW4oKSkgfTsKKyAgICAgICAgICAg
ICAgICBtX3JldHVybkxvY2F0aW9uID0gZG93bmNhc3Q8TG9jYXRpb25BdHRyaWJ1dGU+KGF0dHIu
Z2V0KCkpLmxvY2F0aW9uKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4geyBDb21waWxhdGlvbk1lc3NhZ2UoIlRoaXMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRl
IGZvciBhIGZ1bmN0aW9uIHJldHVybiIsIGF0dHItPnNwYW4oKSkgfTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3RhZ2VB
dHRyaWJ1dGU6OlN0YWdlPiYgZW50cnlQb2ludFN0YWdlKCkgY29uc3QgeyByZXR1cm4gbV9zdGFn
ZTsgfQorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KKyAgICBWZWN0b3I8VW5pcXVlUmVmPFBhcmFtZXRlcj4+JiBwYXJhbWV0ZXJzKCkgeyByZXR1
cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxTdHJpbmdWaWV3PiYg
cmV0dXJuQnVpbHRpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmV0dXJuQnVpbHRpbjsgfQorICAgIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHJldHVybkxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXR1cm5Mb2NhdGlvbjsgfQorICAgIFR5cGVEZWNsKiBtYXliZVJldHVyblR5cGUoKSB7IHJldHVy
biBtX3JldHVyblR5cGUuZ2V0KCk7IH0KKyAgICBDb21wb3VuZFN0YXRlbWVudCYgYm9keSgpIHsg
cmV0dXJuIG1fYm9keTsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6b3B0aW9uYWw8U3RhZ2VBdHRy
aWJ1dGU6OlN0YWdlPiBtX3N0YWdlIHsgc3RkOjpudWxsb3B0IH07CisgICAgLy8gc3RkOjpvcHRp
b25hbDxXb3JrZ3JvdXBTaXplQXR0cmlidXRlPiBtX3dvcmtncm91cFNpemU7CisgICAgc3RkOjpv
cHRpb25hbDxTdHJpbmdWaWV3PiBtX3JldHVybkJ1aWx0aW4geyBzdGQ6Om51bGxvcHQgfTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBtX3JldHVybkxvY2F0aW9uIHsgc3RkOjpudWxsb3B0
IH07CisgICAgU3RyaW5nVmlldyBtX25hbWU7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxQYXJhbWV0
ZXI+PiBtX3BhcmFtZXRlcnM7CisgICAgQXR0cmlidXRlcyBtX3JldHVybkF0dHJpYnV0ZXM7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVEZWNsPiBtX3JldHVyblR5cGU7CisgICAgQ29tcG91bmRT
dGF0ZW1lbnQgbV9ib2R5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9HTE9CQUxfREVDTChGdW5jdGlvbkRlY2wsIGlzRnVuY3Rp
b24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvR2xvYmFsRGVjbC5oIGIv
U291cmNlL1dlYkdQVS9XR1NML0FTVC9HbG9iYWxEZWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi4yM2EzMTIzZmUxMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViR1BVL1dHU0wvQVNUL0dsb2JhbERlY2wuaApAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSA8d3Rm
L1R5cGVDYXN0cy5oPgorCituYW1lc3BhY2UgV0dTTDo6QVNUIHsKKworY2xhc3MgR2xvYmFsRGVj
bCA6IHB1YmxpYyBBU1ROb2RlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBlbnVtIGNsYXNzIEtpbmQgeworICAgICAgICBHbG9iYWxWYXJpYWJsZSwKKyAgICAg
ICAgU3RydWN0LAorICAgICAgICBGdW5jdGlvbiwKKyAgICB9OworCisgICAgR2xvYmFsRGVjbChT
b3VyY2VTcGFuIHNwYW4sIEdsb2JhbERlY2w6OktpbmQga2luZCkKKyAgICAgICAgOiBBU1ROb2Rl
KHNwYW4pCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeworICAgIH0KKworICAgIEtpbmQg
a2luZCgpIGNvbnN0ICB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBib29sIGlzR2xvYmFsVmFyaWFi
bGUoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6R2xvYmFsVmFyaWFibGU7IH0KKyAg
ICBib29sIGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OlN0cnVjdDsg
fQorICAgIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpG
dW5jdGlvbjsgfQorCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV0dTTDo6QVNUCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0dM
T0JBTF9ERUNMKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdHU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdHU0w6OkFTVDo6R2xvYmFsRGVjbCYgZGVjbCkgeyByZXR1cm4gZGVj
bC5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9HbG9iYWxEaXJlY3RpdmUuaCBiL1NvdXJjZS9XZWJH
UFUvV0dTTC9BU1QvR2xvYmFsRGlyZWN0aXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi4xNGJkNGY2ZDAyYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
R1BVL1dHU0wvQVNUL0dsb2JhbERpcmVjdGl2ZS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFTVE5vZGUuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdHU0w6OkFTVCB7CisKK2NsYXNzIEdsb2Jh
bERpcmVjdGl2ZSA6IHB1YmxpYyBBU1ROb2RlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBjb25zdCBTdHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nVmlldyBtX25hbWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1Qv
R2xvYmFsVmFyaWFibGVEZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0dsb2JhbFZhcmlh
YmxlRGVjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDNlY2Y2
Yzc4MjkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9HbG9iYWxW
YXJpYWJsZURlY2wuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJDb21waWxhdGlvbk1lc3NhZ2Uu
aCIKKyNpbmNsdWRlICJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiR2xvYmFsRGVjbC5oIgorI2lu
Y2x1ZGUgIlR5cGVEZWNsLmgiCisjaW5jbHVkZSAiVmFyaWFibGVRdWFsaWZpZXIuaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdHU0w6OkFTVCB7CisKK2Ns
YXNzIEdsb2JhbFZhcmlhYmxlRGVjbCA6IHB1YmxpYyBHbG9iYWxEZWNsIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHbG9iYWxWYXJpYWJsZURlY2woU291cmNl
U3BhbiBzcGFuLCBTdHJpbmdWaWV3IG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxWYXJpYWJsZVF1YWxp
Zmllcj4mJiBxdWFsaWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlRGVjbD4mJiB0eXBlLCBzdGQ6
OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiBpbml0aWFsaXplcikKKyAgICAgICAgOiBHbG9iYWxE
ZWNsKHNwYW4sIEtpbmQ6Okdsb2JhbFZhcmlhYmxlKQorICAgICAgICAsIG1fbmFtZShuYW1lKQor
ICAgICAgICAsIG1fcXVhbGlmaWVyKFdURk1vdmUocXVhbGlmaWVyKSkKKyAgICAgICAgLCBtX3R5
cGUoV1RGTW92ZSh0eXBlKSkKKyAgICAgICAgLCBtX2luaXRpYWxpemVyKFdURk1vdmUoaW5pdGlh
bGl6ZXIpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSB8fCBtX2luaXRpYWxpemVyKTsK
KyAgICB9CisKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gc3RkOjpvcHRpb25hbDxDb21waWxhdGlv
bk1lc3NhZ2U+IHNldEF0dHJpYnV0ZXMoQXR0cmlidXRlcyYgYXR0cmlidXRlcykKKyAgICB7Cisg
ICAgICAgIGZvciAoYXV0byYgYXR0ciA6IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIGlmIChh
dHRyLT5pc0dyb3VwKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncm91cEF0dHJpYnV0ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgQ29tcGlsYXRpb25NZXNzYWdlKCJJdCBpcyBu
b3QgdmFsaWQgdG8gYXBwbHkgdGhlIGdyb3VwIGF0dHJpYnV0ZSB0d2ljZSB0byBhIGdsb2JhbCB2
YXJpYWJsZSIsIGF0dHItPnNwYW4oKSkgfTsKKyAgICAgICAgICAgICAgICBtX2dyb3VwQXR0cmli
dXRlID0gZG93bmNhc3Q8R3JvdXBBdHRyaWJ1dGU+KGF0dHIuZ2V0KCkpLmdyb3VwKCk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGF0dHItPmlzQmluZGluZygpKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fYmluZGluZ0F0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgQ29t
cGlsYXRpb25NZXNzYWdlKCJJdCBpcyBub3QgdmFsaWQgdG8gYXBwbHkgdGhlIGJpbmRpbmcgYXR0
cmlidXRlIHR3aWNlIHRvIGEgZ2xvYmFsIHZhcmlhYmxlIiwgYXR0ci0+c3BhbigpKSB9OworICAg
ICAgICAgICAgICAgIG1fYmluZGluZ0F0dHJpYnV0ZSA9IGRvd25jYXN0PEJpbmRpbmdBdHRyaWJ1
dGU+KGF0dHIuZ2V0KCkpLmJpbmRpbmcoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIHJldHVybiB7IENvbXBpbGF0aW9uTWVzc2FnZSgiVGhpcyBpcyBub3QgYSB2YWxpZCBh
dHRyaWJ1dGUgZm9yIGEgZ2xvYmFsIHZhcmlhYmxlIiwgYXR0ci0+c3BhbigpKSB9OworICAgICAg
ICB9CisgICAgICAgIC8vIEZJWE1FOiBpcyBpdCB2YWxpZCB0byBoYXZlIG9uZSBvZiBAYmluZGlu
ZyBvciBAZ3JvdXAgd2l0aG91dCB0aGUgb3RoZXIgb25lPworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGdyb3VwKCkgY29uc3QgeyByZXR1
cm4gbV9ncm91cEF0dHJpYnV0ZTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGJpbmRp
bmcoKSBjb25zdCB7IHJldHVybiBtX2JpbmRpbmdBdHRyaWJ1dGU7IH0KKyAgICBjb25zdCBTdHJp
bmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgVmFyaWFibGVRdWFs
aWZpZXIqIG1heWJlUXVhbGlmaWVyKCkgeyByZXR1cm4gbV9xdWFsaWZpZXIuZ2V0KCk7IH0KKyAg
ICBUeXBlRGVjbCogbWF5YmVUeXBlRGVjbCgpIHsgcmV0dXJuIG1fdHlwZS5nZXQoKTsgfQorICAg
IEV4cHJlc3Npb24qIG1heWJlSW5pdGlhbGl6ZXIoKSB7IHJldHVybiBtX2luaXRpYWxpemVyLmdl
dCgpOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9ncm91cEF0
dHJpYnV0ZSB7IHN0ZDo6bnVsbG9wdCB9OworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1f
YmluZGluZ0F0dHJpYnV0ZSB7IHN0ZDo6bnVsbG9wdCB9OworICAgIFN0cmluZ1ZpZXcgbV9uYW1l
OworICAgIC8vIEVhY2ggb2YgdGhlIGZvbGxvd2luZyBtYXkgYmUgbnVsbAorICAgIC8vIEJ1dCBh
dCBsZWFzdCBvbmUgb2YgdHlwZSBhbmQgaW5pdGlhbGl6ZXIgbXVzdCBiZSBub24tbnVsbAorICAg
IHN0ZDo6dW5pcXVlX3B0cjxWYXJpYWJsZVF1YWxpZmllcj4gbV9xdWFsaWZpZXI7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFR5cGVEZWNsPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJl
c3Npb24+IG1faW5pdGlhbGl6ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKwor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0dMT0JBTF9ERUNMKEdsb2JhbFZhcmlhYmxlRGVj
bCwgaXNHbG9iYWxWYXJpYWJsZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0FT
VC9TaGFkZXIuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU2hhZGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40MzBhYzY4NWQ0NjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1NoYWRlci5oCkBAIC0wLDAgKzEsOTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkFTVE5vZGUuaCIKKyNpbmNsdWRlICJHbG9iYWxEaXJlY3RpdmUuaCIKKyNp
bmNsdWRlICJHbG9iYWxEZWNsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBTaGFkZXIgOiBBU1ROb2RlIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTaGFkZXIoU291cmNlU3Bh
biBzcGFuLCBWZWN0b3I8VW5pcXVlUmVmPEdsb2JhbERpcmVjdGl2ZT4+JiYgZGlyZWN0aXZlcywg
VmVjdG9yPFVuaXF1ZVJlZjxHbG9iYWxEZWNsPj4mJiBkZWNscykKKyAgICAgICAgOiBBU1ROb2Rl
KHNwYW4pCisgICAgICAgICwgbV9kaXJlY3RpdmVzKFdURk1vdmUoZGlyZWN0aXZlcykpCisgICAg
eworICAgICAgICBmb3IgKGF1dG8mIGRlY2wgOiBkZWNscykgeworICAgICAgICAgICAgaWYgKGlz
PFN0cnVjdERlY2w+KGRlY2wuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0
byBnbyBmcm9tIFVuaXF1ZVJlZjxCYXNlQ2xhc3M+IHRvIFVuaXF1ZVJlZjxEZXJpdmVkQ2xhc3M+
LCBidXQgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRvd25jYXN0LgorICAgICAgICAgICAgICAg
IC8vIFNvIGluc3RlYWQgd2UgZG8gVW5pcXVlUmVmIC0+IHVuaXF1ZV9wdHIgLT4gcmF3X3BvaW50
ZXIgLShkb3duY2FzdCktPiByYXdfcG9pbnRlciAtPiB1bmlxdWVfcHRyIC0+IFVuaXF1ZVJlZi4u
LgorICAgICAgICAgICAgICAgIEdsb2JhbERlY2wqIHJhd1B0ciA9IGRlY2wubW92ZVRvVW5pcXVl
UHRyKCkucmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdERlY2wqIGRvd25jYXN0ZWRS
YXdQdHIgPSBkb3duY2FzdDxTdHJ1Y3REZWNsPihyYXdQdHIpOworICAgICAgICAgICAgICAgIG1f
c3RydWN0cy5hcHBlbmQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0ZDo6dW5p
cXVlX3B0cjxTdHJ1Y3REZWNsPihkb3duY2FzdGVkUmF3UHRyKSkpOworICAgICAgICAgICAgfSBl
bHNlIGlmIChpczxHbG9iYWxWYXJpYWJsZURlY2w+KGRlY2wuZ2V0KCkpKSB7CisgICAgICAgICAg
ICAgICAgR2xvYmFsRGVjbCogcmF3UHRyID0gZGVjbC5tb3ZlVG9VbmlxdWVQdHIoKS5yZWxlYXNl
KCk7CisgICAgICAgICAgICAgICAgR2xvYmFsVmFyaWFibGVEZWNsKiBkb3duY2FzdGVkUmF3UHRy
ID0gZG93bmNhc3Q8R2xvYmFsVmFyaWFibGVEZWNsPihyYXdQdHIpOworICAgICAgICAgICAgICAg
IG1fZ2xvYmFsVmFycy5hcHBlbmQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0
ZDo6dW5pcXVlX3B0cjxHbG9iYWxWYXJpYWJsZURlY2w+KGRvd25jYXN0ZWRSYXdQdHIpKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdsb2JhbERlY2wqIHJhd1B0ciA9
IGRlY2wubW92ZVRvVW5pcXVlUHRyKCkucmVsZWFzZSgpOworICAgICAgICAgICAgICAgIEZ1bmN0
aW9uRGVjbCogZnVuYyA9IGRvd25jYXN0PEZ1bmN0aW9uRGVjbD4ocmF3UHRyKTsKKyAgICAgICAg
ICAgICAgICBpZiAoZnVuYy0+ZW50cnlQb2ludFN0YWdlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGZ1bmMtPmVudHJ5UG9pbnRTdGFnZSgpLnZhbHVlKCkgPT0gU3RhZ2VBdHRyaWJ1dGU6
OlN0YWdlOjpDb21wdXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wdXRlRW50cnlQ
b2ludHMuYWRkKGZ1bmMtPm5hbWUoKS50b1N0cmluZygpLCBmdW5jKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZnVuYy0+ZW50cnlQb2ludFN0YWdlKCkudmFsdWUoKSA9PSBTdGFnZUF0
dHJpYnV0ZTo6U3RhZ2U6OlZlcnRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGV4
RW50cnlQb2ludHMuYWRkKGZ1bmMtPm5hbWUoKS50b1N0cmluZygpLCBmdW5jKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZnVuYy0+
ZW50cnlQb2ludFN0YWdlKCkudmFsdWUoKSA9PSBTdGFnZUF0dHJpYnV0ZTo6U3RhZ2U6OkZyYWdt
ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhZ21lbnRFbnRyeVBvaW50cy5hZGQo
ZnVuYy0+bmFtZSgpLnRvU3RyaW5nKCksIGZ1bmMpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChtYWtl
VW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uRGVj
bD4oZnVuYykpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFZlY3Rv
cjxVbmlxdWVSZWY8R2xvYmFsRGlyZWN0aXZlPj4mIGRpcmVjdGl2ZXMoKSB7IHJldHVybiBtX2Rp
cmVjdGl2ZXM7IH0KKyAgICBWZWN0b3I8VW5pcXVlUmVmPFN0cnVjdERlY2w+PiYgc3RydWN0cygp
IHsgcmV0dXJuIG1fc3RydWN0czsgfQorICAgIFZlY3RvcjxVbmlxdWVSZWY8R2xvYmFsVmFyaWFi
bGVEZWNsPj4mIGdsb2JhbFZhcnMoKSB7IHJldHVybiBtX2dsb2JhbFZhcnM7IH0KKyAgICBWZWN0
b3I8VW5pcXVlUmVmPEZ1bmN0aW9uRGVjbD4+JiBmdW5jdGlvbnMoKSB7IHJldHVybiBtX2Z1bmN0
aW9uczsgfQorICAgIEhhc2hNYXA8U3RyaW5nLCBGdW5jdGlvbkRlY2wqPiYgY29tcHV0ZUVudHJ5
UG9pbnRzKCkgeyByZXR1cm4gbV9jb21wdXRlRW50cnlQb2ludHM7IH0KKyAgICBIYXNoTWFwPFN0
cmluZywgRnVuY3Rpb25EZWNsKj4mIHZlcnRleEVudHJ5UG9pbnRzKCkgeyByZXR1cm4gbV92ZXJ0
ZXhFbnRyeVBvaW50czsgfQorICAgIEhhc2hNYXA8U3RyaW5nLCBGdW5jdGlvbkRlY2wqPiYgZnJh
Z21lbnRFbnRyeVBvaW50cygpIHsgcmV0dXJuIG1fZnJhZ21lbnRFbnRyeVBvaW50czsgfQorCitw
cml2YXRlOgorICAgIFZlY3RvcjxVbmlxdWVSZWY8R2xvYmFsRGlyZWN0aXZlPj4gbV9kaXJlY3Rp
dmVzOworCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxTdHJ1Y3REZWNsPj4gbV9zdHJ1Y3RzOworICAg
IFZlY3RvcjxVbmlxdWVSZWY8R2xvYmFsVmFyaWFibGVEZWNsPj4gbV9nbG9iYWxWYXJzOworICAg
IFZlY3RvcjxVbmlxdWVSZWY8RnVuY3Rpb25EZWNsPj4gbV9mdW5jdGlvbnM7CisKKyAgICAvLyBG
SVhNRTogaXMgdGhlcmUgYSB3YXkgdG8gdXNlIFN0cmluZ1ZpZXcgaW4gaGVyZT8KKyAgICBIYXNo
TWFwPFN0cmluZywgRnVuY3Rpb25EZWNsKj4gbV9jb21wdXRlRW50cnlQb2ludHM7CisgICAgSGFz
aE1hcDxTdHJpbmcsIEZ1bmN0aW9uRGVjbCo+IG1fdmVydGV4RW50cnlQb2ludHM7CisgICAgSGFz
aE1hcDxTdHJpbmcsIEZ1bmN0aW9uRGVjbCo+IG1fZnJhZ21lbnRFbnRyeVBvaW50czsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9TdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZmFmYjZhNDU3NzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudC5oCkBAIC0wLDAg
KzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFTVE5vZGUu
aCIKKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisKK25hbWVzcGFjZSBXR1NMOjpBU1Qgewor
CitjbGFzcyBTdGF0ZW1lbnQgOiBwdWJsaWMgQVNUTm9kZSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEtpbmQgOiB1aW50OF90IHsKKyAg
ICAgICAgQ29tcG91bmQsCisgICAgICAgIFJldHVybiwKKyAgICAgICAgQXNzaWdubWVudCwKKyAg
ICB9OworCisgICAgU3RhdGVtZW50KFNvdXJjZVNwYW4gc3BhbiwgS2luZCBraW5kKQorICAgICAg
ICA6IEFTVE5vZGUoc3BhbikKKyAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICB7CisgICAgfQor
CisgICAgS2luZCBraW5kKCkgY29uc3QgIHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGJvb2wgaXND
b21wb3VuZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpDb21wb3VuZDsgfQorICAg
IGJvb2wgaXNSZXR1cm4oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6UmV0dXJuOyB9
CisgICAgYm9vbCBpc0Fzc2lnbm1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6
QXNzaWdubWVudDsgfQorCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV0dTTDo6QVNUCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NM
X1NUQVRFTUVOVChUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXR1NMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBi
b29sIGlzVHlwZShjb25zdCBXR1NMOjpBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KSB7IHJldHVy
biBzdGF0ZW1lbnQucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50
U3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudHMvQXNzaWdubWVu
dFN0YXRlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYmZl
ZDVkNjljODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0
ZW1lbnRzL0Fzc2lnbm1lbnRTdGF0ZW1lbnQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJFeHBy
ZXNzaW9uLmgiCisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBBc3NpZ25tZW50U3Rh
dGVtZW50IDogcHVibGljIFN0YXRlbWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgQXNzaWdubWVudFN0YXRlbWVudChTb3VyY2VTcGFuIHNwYW4sIHN0ZDo6
dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGxocywgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgcmhz
KQorICAgICAgICA6IFN0YXRlbWVudChzcGFuLCBLaW5kOjpBc3NpZ25tZW50KQorICAgICAgICAs
IG1fbGhzKFdURk1vdmUobGhzKSkKKyAgICAgICAgLCBtX3JocyhXVEZNb3ZlKHJocykpCisgICAg
eworICAgIH0KKworICAgIEV4cHJlc3Npb24qIG1heWJlTGhzKCkgeyByZXR1cm4gbV9saHMuZ2V0
KCk7IH0KKyAgICBFeHByZXNzaW9uJiByaHMoKSB7IHJldHVybiBtX3JoczsgfQorCitwcml2YXRl
OgorICAgIC8vIExIUyBjYW4gYmUgbnVsbCBpbiB0aGUgY2FzZSBpdCBpcyAnXycsIGJ1dCBSSFMg
aXMgbmV2ZXIgbnVsbAorICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2xoczsKKyAg
ICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9yaHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NM
OjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX1NUQVRFTUVOVChBc3NpZ25tZW50
U3RhdGVtZW50LCBpc0Fzc2lnbm1lbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dT
TC9BU1QvU3RhdGVtZW50cy9SZXR1cm5TdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvU3RhdGVtZW50cy9SZXR1cm5TdGF0ZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjA2YjU5NzkzZDRiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9SZXR1cm5TdGF0ZW1lbnQuaApAQCAtMCwwICsxLDUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlN0YXRlbWVudC5oIgorCituYW1lc3BhY2UgV0dT
TDo6QVNUIHsKKworY2xhc3MgUmV0dXJuU3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUmV0dXJuU3RhdGVtZW50
KFNvdXJjZVNwYW4gc3Bhbiwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgZXhwcmVzc2lv
bikKKyAgICAgICAgOiBTdGF0ZW1lbnQoc3BhbiwgS2luZDo6UmV0dXJuKQorICAgICAgICAsIG1f
ZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQorICAgIHsKKyAgICB9CisKKyAgICBFeHBy
ZXNzaW9uKiBtYXliZUV4cHJlc3Npb24oKSB7IHJldHVybiBtX2V4cHJlc3Npb24uZ2V0KCk7IH0K
KworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9leHByZXNzaW9u
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0dTTF9TVEFURU1FTlQoUmV0dXJuU3RhdGVtZW50LCBpc1JldHVybigpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdHJ1Y3R1cmVEZWNsLmggYi9Tb3VyY2UvV2ViR1BV
L1dHU0wvQVNUL1N0cnVjdHVyZURlY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLjYwZjcyYzUyYTkzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUv
V0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSAiQXR0cmlidXRl
LmgiCisjaW5jbHVkZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiR2xvYmFsRGVj
bC5oIgorI2luY2x1ZGUgIlR5cGVEZWNsLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJl
Zi5oPgorCisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBTdHJ1Y3RNZW1iZXIgOiBw
dWJsaWMgQVNUTm9kZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgU3RydWN0TWVtYmVyKFNvdXJjZVNwYW4gc3BhbiwgU3RyaW5nVmlldyBuYW1lLCBVbmlxdWVS
ZWY8VHlwZURlY2w+JiYgdHlwZSkKKyAgICAgICAgOiBBU1ROb2RlKHNwYW4pCisgICAgICAgICwg
bV9uYW1lKG5hbWUpCisgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCisgICAgeworICAg
IH0KKworICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGQ6Om9wdGlvbmFsPENvbXBpbGF0aW9uTWVz
c2FnZT4gc2V0QXR0cmlidXRlcyhBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBhdHRyIDogYXR0cmlidXRlcykgeworICAgICAgICAgICAgaWYgKGF0dHIt
PmlzQnVpbHRpbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYnVpbHRpbkF0dHJpYnV0ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgQ29tcGlsYXRpb25NZXNzYWdlKCJJdCBpcyBu
b3QgdmFsaWQgdG8gYXBwbHkgdGhlIGJ1aWx0aW4gYXR0cmlidXRlIHR3aWNlIHRvIGEgc3RydWN0
IG1lbWJlciIsIGF0dHItPnNwYW4oKSkgfTsKKyAgICAgICAgICAgICAgICBtX2J1aWx0aW5BdHRy
aWJ1dGUgPSBkb3duY2FzdDxCdWlsdGluQXR0cmlidXRlPihhdHRyLmdldCgpKS5uYW1lKCk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHItPmlzTG9jYXRpb24oKSkgeworICAgICAgICAgICAg
ICAgIGlmIChtX2xvY2F0aW9uQXR0cmlidXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eyBDb21waWxhdGlvbk1lc3NhZ2UoIkl0IGlzIG5vdCB2YWxpZCB0byBhcHBseSB0aGUgbG9jYXRp
b24gYXR0cmlidXRlIHR3aWNlIHRvIGEgc3RydWN0IG1lbWJlciIsIGF0dHItPnNwYW4oKSkgfTsK
KyAgICAgICAgICAgICAgICBtX2xvY2F0aW9uQXR0cmlidXRlID0gZG93bmNhc3Q8TG9jYXRpb25B
dHRyaWJ1dGU+KGF0dHIuZ2V0KCkpLmxvY2F0aW9uKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyBDb21waWxhdGlvbk1lc3NhZ2UoIlRoaXMgaXMgbm90IGEg
dmFsaWQgYXR0cmlidXRlIGZvciBhIHN0cnVjdCBtZW1iZXIiLCBhdHRyLT5zcGFuKCkpIH07Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFs
PFN0cmluZ1ZpZXc+IGJ1aWx0aW4oKSBjb25zdCB7IHJldHVybiBtX2J1aWx0aW5BdHRyaWJ1dGU7
IH0KKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYXRpb25BdHRyaWJ1dGU7IH0KKyAgICBjb25zdCBTdHJpbmdWaWV3JiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgVHlwZURlY2wmIHR5cGUoKSB7IHJldHVybiBtX3R5
cGU7IH0KKworcHJpdmF0ZToKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZ1ZpZXc+IG1fYnVpbHRp
bkF0dHJpYnV0ZSB7IHN0ZDo6bnVsbG9wdCB9OworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IG1fbG9jYXRpb25BdHRyaWJ1dGUgeyBzdGQ6Om51bGxvcHQgfTsKKyAgICBTdHJpbmdWaWV3IG1f
bmFtZTsKKyAgICBVbmlxdWVSZWY8VHlwZURlY2w+IG1fdHlwZTsKK307CisKK2NsYXNzIFN0cnVj
dERlY2wgOiBwdWJsaWMgR2xvYmFsRGVjbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgU3RydWN0RGVjbChTb3VyY2VTcGFuIHNvdXJjZVNwYW4sIFN0cmluZ1Zp
ZXcgbmFtZSwgVmVjdG9yPFVuaXF1ZVJlZjxTdHJ1Y3RNZW1iZXI+PiYmIG1lbWJlcnMpCisgICAg
ICAgIDogR2xvYmFsRGVjbChzb3VyY2VTcGFuLCBLaW5kOjpTdHJ1Y3QpCisgICAgICAgICwgbV9u
YW1lKG5hbWUpCisgICAgICAgICwgbV9tZW1iZXJzKFdURk1vdmUobWVtYmVycykpCisgICAgewor
ICAgIH0KKworICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGQ6Om9wdGlvbmFsPENvbXBpbGF0aW9u
TWVzc2FnZT4gc2V0QXR0cmlidXRlcyhBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQorICAgIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBhdHRyIDogYXR0cmlidXRlcykgeworICAgICAgICAgICAgaWYgKGF0
dHItPmlzQmxvY2soKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2lzQmxvY2spCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7IENvbXBpbGF0aW9uTWVzc2FnZSgiSXQgaXMgbm90IHZhbGlk
IHRvIGFwcGx5IHRoZSBibG9jayBhdHRyaWJ1dGUgdHdpY2UgdG8gYSBzdHJ1Y3QiLCBhdHRyLT5z
cGFuKCkpIH07CisgICAgICAgICAgICAgICAgbV9pc0Jsb2NrID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB7IENvbXBpbGF0aW9uTWVzc2FnZSgiVGhp
cyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgZm9yIGEgc3RydWN0IGRlY2xhcmF0aW9uIiwgYXR0
ci0+c3BhbigpKSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgYm9vbCBpc0Jsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9pc0Jsb2NrOyB9CisgICAgY29uc3Qg
U3RyaW5nVmlldyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFZlY3RvcjxV
bmlxdWVSZWY8U3RydWN0TWVtYmVyPj4mIG1lbWJlcnMoKSB7IHJldHVybiBtX21lbWJlcnM7IH0K
KworcHJpdmF0ZToKKyAgICBib29sIG1faXNCbG9jayB7IGZhbHNlIH07CisgICAgU3RyaW5nVmll
dyBtX25hbWU7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxTdHJ1Y3RNZW1iZXI+PiBtX21lbWJlcnM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XR1NMX0dMT0JBTF9ERUNMKFN0cnVjdERlY2wsIGlzU3RydWN0KCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dHU0wvQVNUL1R5cGVEZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L1R5cGVEZWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45ODM3
MGQ5YTczMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1R5cGVE
ZWNsLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKworbmFtZXNwYWNl
IFdHU0w6OkFTVCB7CisKK2NsYXNzIFR5cGVEZWNsIDogcHVibGljIEFTVE5vZGUgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBLaW5kIDog
dWludDhfdCB7CisgICAgICAgIE5hbWVkLAorICAgICAgICBQYXJhbWV0ZXJpemVkLAorICAgIH07
CisKKyAgICBUeXBlRGVjbChTb3VyY2VTcGFuIHNwYW4sIEtpbmQga2luZCkKKyAgICAgICAgOiBB
U1ROb2RlKHNwYW4pCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeworICAgIH0KKworICAg
IEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGJvb2wgaXNOYW1lZCgp
IGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpOYW1lZDsgfQorICAgIGJvb2wgaXNQYXJh
bWV0ZXJpemVkKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OlBhcmFtZXRlcml6ZWQ7
IH0KKworcHJpdmF0ZToKKyAgICBLaW5kIG1fa2luZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdH
U0w6OkFTVAorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9UWVBFKFRvVmFs
dWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdH
U0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdHU0w6OkFTVDo6VHlwZURlY2wmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9IFwK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUv
V0dTTC9BU1QvVmFyaWFibGVRdWFsaWZpZXIuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvVmFy
aWFibGVRdWFsaWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjU2YmJiNzA2ZTgxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1Qv
VmFyaWFibGVRdWFsaWZpZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisKK25hbWVzcGFjZSBXR1NMOjpBU1Qgewor
CitlbnVtIGNsYXNzIFN0b3JhZ2VDbGFzcyA6IHVpbnQ4X3QgeworICAgIEZ1bmN0aW9uLAorICAg
IFByaXZhdGUsCisgICAgV29ya2dyb3VwLAorICAgIFVuaWZvcm0sCisgICAgU3RvcmFnZQorfTsK
KworZW51bSBjbGFzcyBBY2Nlc3NNb2RlIDogdWludDhfdCB7CisgICAgUmVhZCwKKyAgICBXcml0
ZSwKKyAgICBSZWFkV3JpdGUKK307CisKK2NsYXNzIFZhcmlhYmxlUXVhbGlmaWVyIDogcHVibGlj
IEFTVE5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFZh
cmlhYmxlUXVhbGlmaWVyKFNvdXJjZVNwYW4gc3BhbiwgU3RvcmFnZUNsYXNzIHN0b3JhZ2VDbGFz
cywgQWNjZXNzTW9kZSBhY2Nlc3NNb2RlKQorICAgICAgICA6IEFTVE5vZGUoc3BhbikKKyAgICAg
ICAgLCBtX3N0b3JhZ2VDbGFzcyhzdG9yYWdlQ2xhc3MpCisgICAgICAgICwgbV9hY2Nlc3NNb2Rl
KGFjY2Vzc01vZGUpCisgICAgeworICAgIH0KKworICAgIFN0b3JhZ2VDbGFzcyBzdG9yYWdlQ2xh
c3MoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VDbGFzczsgfQorICAgIEFjY2Vzc01vZGUgYWNj
ZXNzTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzTW9kZTsgfQorCitwcml2YXRlOgorICAg
IFN0b3JhZ2VDbGFzcyBtX3N0b3JhZ2VDbGFzczsKKyAgICBBY2Nlc3NNb2RlIG1fYWNjZXNzTW9k
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkdQVS9XR1NML0FTVE5vZGUuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1ROb2RlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNWRkZTlhOTJhY2IKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUTm9kZS5oCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNvdXJjZVNwYW4uaCIKKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgV0dTTDo6QVNUIHsKKworY2xh
c3MgQVNUTm9kZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
QVNUTm9kZShTb3VyY2VTcGFuIHNwYW4pCisgICAgICAgIDogbV9zcGFuKHNwYW4pCisgICAgewor
ICAgIH0KKworICAgIGNvbnN0IFNvdXJjZVNwYW4mIHNwYW4oKSBjb25zdCB7IHJldHVybiBtX3Nw
YW47IH0KKworcHJpdmF0ZToKKyAgICBTb3VyY2VTcGFuIG1fc3BhbjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdHU0w6OkFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0NvbXBpbGF0
aW9uTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQ29tcGlsYXRpb25NZXNzYWdlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZhM2IzNWUxNzMxNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9Db21waWxhdGlvbk1lc3NhZ2Uu
Y3BwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdHU0wgeworCit2b2lkIENvbXBpbGF0aW9uTWVzc2FnZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3NwYW4ubV9saW5l
LCAiOiIsIG1fc3Bhbi5tX2xpbmVPZmZzZXQsICIgbGVuZ3RoOiIsIG1fc3Bhbi5tX2xlbmd0aCwg
bV9tZXNzYWdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XR1NML0NvbXBpbGF0aW9uTWVzc2FnZS5oIGIvU291cmNlL1dlYkdQVS9XR1NML0Nv
bXBpbGF0aW9uTWVzc2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uNmM5NjE1YTRiZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0Nv
bXBpbGF0aW9uTWVzc2FnZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlNvdXJjZVNwYW4uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV0dTTCB7
CisKK2NsYXNzIENvbXBpbGF0aW9uTWVzc2FnZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgQ29tcGlsYXRpb25NZXNzYWdlKFN0cmluZyYmIG1lc3NhZ2UsIFNv
dXJjZVNwYW4gc3BhbikKKyAgICAgICAgOiBtX21lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSkKKyAg
ICAgICAgLCBtX3NwYW4oc3BhbikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZyBtX21lc3NhZ2U7Cisg
ICAgU291cmNlU3BhbiBtX3NwYW47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dT
TC5jcHAKaW5kZXggOTRmZTM5YWJkNzM0Li41OGVmMGIzNzIxNjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9XR1NMLmNwcAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAK
QEAgLTI2LDggKzI2LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0dTTC5o
IgogCi0jaW5jbHVkZSAiQVNULmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKKy8vIEFsbCBvZiB0aGVz
ZSBhcmUganVzdCB0byBjaGVjayB0aGF0IHRoZXkgY29tcGlsZSwgc2luY2UgZm9yIG5vdyB0aGV5
IGFyZSBub3QgcmVhbGx5IHVzZWQuCisjaW5jbHVkZSAiQVNUL0dsb2JhbFZhcmlhYmxlRGVjbC5o
IgorI2luY2x1ZGUgIkFTVC9TdHJ1Y3R1cmVEZWNsLmgiCisjaW5jbHVkZSAiQVNUL0Z1bmN0aW9u
RGVjbC5oIgorI2luY2x1ZGUgIkFTVC9TaGFkZXIuaCIKKyNpbmNsdWRlICJBU1QvU3RhdGVtZW50
cy9Bc3NpZ25tZW50U3RhdGVtZW50LmgiCisjaW5jbHVkZSAiQVNUL1N0YXRlbWVudHMvUmV0dXJu
U3RhdGVtZW50LmgiCisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL0lkZW50aWZpZXJFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL1R5cGVDb252ZXJzaW9uLmgiCisjaW5j
bHVkZSAiQVNUL0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkFTVC9F
eHByZXNzaW9ucy9MaXRlcmFsRXhwcmVzc2lvbnMuaCIKIAogbmFtZXNwYWNlIFdHU0wgewogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5oIGIvU291cmNlL1dlYkdQVS9XR1NM
L1dHU0wuaAppbmRleCA5OWM5ZGU3YTM5YjMuLmM4YjljNjYwYmE3YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XR1NML1dHU0wuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5oCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29tcGlsYXRpb25N
ZXNzYWdlLmgiCiAjaW5jbHVkZSA8Y2ludHR5cGVzPgogI2luY2x1ZGUgPGNzdGRpbnQ+CiAjaW5j
bHVkZSA8bWVtb3J5PgpAQCAtNDAsMjYgKzQxLDE0IEBAIG5hbWVzcGFjZSBXR1NMIHsKIC8vIFN0
ZXAgMQogLy8KIAotZW51bSBjbGFzcyBDb21waWxhdGlvbk1lc3NhZ2VUeXBlIDogdWludDhfdCB7
Ci0gICAgRXJyb3IsCi0gICAgV2FybmluZywKLSAgICBJbmZvCi19OwotCi1zdHJ1Y3QgQ29tcGls
YXRpb25NZXNzYWdlIHsKLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICB1aW50NjRfdCBsaW5lTnVt
YmVyOwotICAgIHVpbnQ2NF90IGxpbmVQb3NpdGlvbjsKLSAgICB1aW50NjRfdCBvZmZzZXQ7Ci0g
ICAgdWludDY0X3QgbGVuZ3RoOwotfTsKLQotY2xhc3MgQVNUOworbmFtZXNwYWNlIEFTVCB7Citj
bGFzcyBTaGFkZXI7Cit9CiAKIHN0cnVjdCBTdWNjZXNzZnVsQ2hlY2sgewogICAgIH5TdWNjZXNz
ZnVsQ2hlY2soKTsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25NZXNzYWdlPiB3YXJuaW5nczsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QVNUPiBhc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6U2hh
ZGVyPiBhc3Q7CiB9OwogCiBzdHJ1Y3QgRmFpbGVkQ2hlY2sgewpAQCAtMjA5LDcgKzE5OCw3IEBA
IHN0cnVjdCBQcmVwYXJlUmVzdWx0IHsKIAogLy8gVGhlc2UgYXJlIG5vdCBhbGxvd2VkIHRvIGZh
aWwuCiAvLyBBbGwgZmFpbHVyZXMgbXVzdCBoYXZlIGFscmVhZHkgYmVlbiBjYXVnaHQgaW4gY2hl
Y2soKS4KLVByZXBhcmVSZXN1bHQgcHJlcGFyZShjb25zdCBBU1QmLCBjb25zdCBIYXNoTWFwPFN0
cmluZywgc3RkOjpvcHRpb25hbDxQaXBlbGluZUxheW91dD4+Jik7Ci1QcmVwYXJlUmVzdWx0IHBy
ZXBhcmUoY29uc3QgQVNUJiwgY29uc3QgU3RyaW5nJiBlbnRyeVBvaW50TmFtZSwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxQaXBlbGluZUxheW91dD4mKTsKK1ByZXBhcmVSZXN1bHQgcHJlcGFyZShjb25z
dCBBU1Q6OlNoYWRlciYsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFBpcGVs
aW5lTGF5b3V0Pj4mKTsKK1ByZXBhcmVSZXN1bHQgcHJlcGFyZShjb25zdCBBU1Q6OlNoYWRlciYs
IGNvbnN0IFN0cmluZyYgZW50cnlQb2ludE5hbWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8UGlwZWxp
bmVMYXlvdXQ+Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdHU0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNmNDBjNjM4YmU4My4uZDAwYTlm
Mzc1YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTQ2LDYgKzQ2LDI3IEBACiAJCTMzOEJCMkQyMjdCNkI2M0YwMEUwNjZBQiAvKiBT
b3VyY2VTcGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMzhCQjJEMTI3QjZCNjNGMDBFMDY2QUIgLyogU291cmNlU3Bhbi5oICovOyB9OwogCQkzMzhC
QjJENDI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOEJCMkQzMjdCNkI2NkMwMEUwNjZBQiAvKiBMZXhlci5o
ICovOyB9OwogCQkzMzhCQjJENjI3QjZCNjg3MDBFMDY2QUIgLyogTGV4ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM4QkIyRDUyN0I2QjY4NzAw
RTA2NkFCIC8qIExleGVyLmNwcCAqLzsgfTsKKwkJMzNFQTE4NUUyN0JDMTk0RjAwQTFERDUyIC8q
IEFTVE5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMzRUExODVEMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmggKi87IH07CisJCTMzRUExODYw
MjdCQzE5ODEwMEExREQ1MiAvKiBHbG9iYWxEaXJlY3RpdmUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODVGMjdCQzE5ODEwMEExREQ1MiAvKiBH
bG9iYWxEaXJlY3RpdmUuaCAqLzsgfTsKKwkJMzNFQTE4NjIyN0JDMTlDMTAwQTFERDUyIC8qIEds
b2JhbERlY2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMzRUExODYxMjdCQzE5QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmggKi87IH07CisJCTMzRUEx
ODY0MjdCQzFBMUQwMEExREQ1MiAvKiBHbG9iYWxWYXJpYWJsZURlY2wuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODYzMjdCQzFBMUQwMEExREQ1
MiAvKiBHbG9iYWxWYXJpYWJsZURlY2wuaCAqLzsgfTsKKwkJMzNFQTE4NjYyN0JDMUFENTAwQTFE
RDUyIC8qIENvbXBpbGF0aW9uTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NjUyN0JDMUFENTAwQTFERDUyIC8qIENvbXBpbGF0aW9u
TWVzc2FnZS5oICovOyB9OworCQkzM0VBMTg2ODI3QkMxQjE0MDBBMURENTIgLyogQ29tcGlsYXRp
b25NZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzRUExODY3MjdCQzFCMTQwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuY3BwICov
OyB9OworCQkzM0VBMTg2QTI3QkMxQkU2MDBBMURENTIgLyogQXR0cmlidXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2OTI3QkMxQkU2MDBB
MURENTIgLyogQXR0cmlidXRlLmggKi87IH07CisJCTMzRUExODZDMjdCQzFDQkMwMEExREQ1MiAv
KiBFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzM0VBMTg2QjI3QkMxQ0JDMDBBMURENTIgLyogRXhwcmVzc2lvbi5oICovOyB9OworCQkz
M0VBMTg2RTI3QkMxRDRDMDBBMURENTIgLyogVHlwZURlY2wuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODZEMjdCQzFENEMwMEExREQ1MiAvKiBU
eXBlRGVjbC5oICovOyB9OworCQkzM0VBMTg3MDI3QkMxRThBMDBBMURENTIgLyogU2hhZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2RjI3
QkMxRThBMDBBMURENTIgLyogU2hhZGVyLmggKi87IH07CisJCTMzRUExODcyMjdCQzFGRTEwMEEx
REQ1MiAvKiBWYXJpYWJsZVF1YWxpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NzEyN0JDMUZFMTAwQTFERDUyIC8qIFZhcmlhYmxlUXVh
bGlmaWVyLmggKi87IH07CisJCTMzRUExODc0MjdCQzIwNDkwMEExREQ1MiAvKiBTdHJ1Y3R1cmVE
ZWNsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VB
MTg3MzI3QkMyMDQ5MDBBMURENTIgLyogU3RydWN0dXJlRGVjbC5oICovOyB9OworCQkzM0VBMTg3
NjI3QkMyMTZCMDBBMURENTIgLyogRnVuY3Rpb25EZWNsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg3NTI3QkMyMTZCMDBBMURENTIgLyogRnVu
Y3Rpb25EZWNsLmggKi87IH07CisJCTMzRUExODc5MjdCQzIyQUEwMEExREQ1MiAvKiBTdGF0ZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUEx
ODc4MjdCQzIyQUEwMEExREQ1MiAvKiBTdGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzNFQTE4N0IyN0JD
MjMwRTAwQTFERDUyIC8qIENvbXBvdW5kU3RhdGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg3QTI3QkMyMzBFMDBBMURENTIgLyogQ29t
cG91bmRTdGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzNFQTE4N0UyN0JDMjQ5MDAwQTFERDUyIC8qIFJl
dHVyblN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzNFQTE4N0QyN0JDMjQ5MDAwQTFERDUyIC8qIFJldHVyblN0YXRlbWVudC5oICovOyB9
OworCQkzM0VBMTg4MDI3QkMyNEUyMDBBMURENTIgLyogQXNzaWdubWVudFN0YXRlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4N0YyN0JD
MjRFMjAwQTFERDUyIC8qIEFzc2lnbm1lbnRTdGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzNFQTE4ODIy
N0JDMjVEMDAwQTFERDUyIC8qIElkZW50aWZpZXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg4MTI3QkMyNUQwMDBBMURENTIg
LyogSWRlbnRpZmllckV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMzNFQTE4ODQyN0JDMjY4NjAwQTFE
RDUyIC8qIFN0cnVjdHVyZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzNFQTE4ODMyN0JDMjY4NjAwQTFERDUyIC8qIFN0cnVjdHVyZUFjY2Vz
cy5oICovOyB9OworCQkzM0VBMTg4NjI3QkMyNkRGMDBBMURENTIgLyogVHlwZUNvbnZlcnNpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODg1
MjdCQzI2REYwMEExREQ1MiAvKiBUeXBlQ29udmVyc2lvbi5oICovOyB9OworCQkzM0VBMTg4ODI3
QkMzNjFFMDBBMURENTIgLyogTGl0ZXJhbEV4cHJlc3Npb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg4NzI3QkMzNjFFMDBBMURENTIgLyog
TGl0ZXJhbEV4cHJlc3Npb25zLmggKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24g
Ki8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KQEAgLTEzMSw3
ICsxNTIsNiBAQAogCQkxQ0VCRDgwMTI3MTZCOUFCMDBBNTI1NEQgLyogU0RLVmFyaWFudC54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBTREtWYXJpYW50LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXR1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNF
QkQ4MDQyNzE2QkZBQjAwQTUyNTREIC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25maWcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUNFQkQ4MDcyNzE2QzJDMDAwQTUyNTRE
IC8qIEFTVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU1QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUNFQkQ4MEEyNzE2QzM2QzAwQTUyNTREIC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MEIyNzE2QzM3
OTAwQTUyNTREIC8qIEV4cG9ydE1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHBvcnRNYWNyb3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MEQyNzE2QzNEODAwQTUyNTRE
IC8qIFNoYWRlck1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkZXJNb2R1bGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NSw2ICsxNjUsMjcgQEAKIAkJMzM4QkIyRDEyN0I2
QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlU3Bhbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIg
LyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzM4QkIyRDUyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4
NUQyN0JDMTk0RjAwQTFERDUyIC8qIEFTVE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQVNUTm9kZS5o
OyBwYXRoID0gV0dTTC9BU1ROb2RlLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJ
MzNFQTE4NUYyN0JDMTk4MTAwQTFERDUyIC8qIEdsb2JhbERpcmVjdGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHbG9iYWxEaXJlY3RpdmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNF
QTE4NjEyN0JDMTlDMTAwQTFERDUyIC8qIEdsb2JhbERlY2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2xv
YmFsRGVjbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg2MzI3QkMxQTFE
MDBBMURENTIgLyogR2xvYmFsVmFyaWFibGVEZWNsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbFZh
cmlhYmxlRGVjbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg2NTI3QkMx
QUQ1MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBp
bGF0aW9uTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg2NzI3
QkMxQjE0MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbXBpbGF0aW9uTWVzc2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMzRUExODY5MjdCQzFCRTYwMEExREQ1MiAvKiBBdHRyaWJ1dGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXR0cmlidXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODZCMjdCQzFD
QkMwMEExREQ1MiAvKiBFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4NkQyN0JDMUQ0QzAwQTFERDUyIC8q
IFR5cGVEZWNsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVEZWNsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMzRUExODZGMjdCQzFFOEEwMEExREQ1MiAvKiBTaGFkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2hhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODcx
MjdCQzFGRTEwMEExREQ1MiAvKiBWYXJpYWJsZVF1YWxpZmllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
YXJpYWJsZVF1YWxpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg3
MzI3QkMyMDQ5MDBBMURENTIgLyogU3RydWN0dXJlRGVjbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1
Y3R1cmVEZWNsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODc1MjdCQzIx
NkIwMEExREQ1MiAvKiBGdW5jdGlvbkRlY2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25EZWNs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODc4MjdCQzIyQUEwMEExREQ1
MiAvKiBTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMzRUExODdBMjdCQzIzMEUwMEExREQ1MiAvKiBDb21wb3VuZFN0
YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wb3VuZFN0YXRlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg3RDI3QkMyNDkwMDBBMURENTIgLyogUmV0dXJuU3Rh
dGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJldHVyblN0YXRlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzM0VBMTg3RjI3QkMyNEUyMDBBMURENTIgLyogQXNzaWdubWVudFN0
YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3NpZ25tZW50U3RhdGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODgxMjdCQzI1RDAwMEExREQ1MiAvKiBJZGVudGlm
aWVyRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJZGVudGlmaWVyRXhwcmVzc2lvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg4MzI3QkMyNjg2MDBBMURENTIgLyog
U3RydWN0dXJlQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUFjY2Vzcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg4NTI3QkMyNkRGMDBBMURENTIgLyogVHlw
ZUNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUNvbnZlcnNpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4ODcyN0JDMzYxRTAwQTFERDUyIC8qIExpdGVyYWxF
eHByZXNzaW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXRlcmFsRXhwcmVzc2lvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8K
IAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMjY5LDgg
KzMxMCwxMCBAQAogCQkxQ0VCRDdGNjI3MTZCMzMxMDBBNTI1NEQgLyogV0dTTCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUNFQkQ4MDcyNzE2QzJDMDAw
QTUyNTREIC8qIEFTVC5oICovLAorCQkJCTMzRUExODVDMjdCQzE5M0QwMEExREQ1MiAvKiBBU1Qg
Ki8sCiAJCQkJMUNFQkQ4MDQyNzE2QkZBQjAwQTUyNTREIC8qIGNvbmZpZy5oICovLAorCQkJCTMz
RUExODY1MjdCQzFBRDUwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuaCAqLywKKwkJCQkz
M0VBMTg2NzI3QkMxQjE0MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCAqLywKIAkJ
CQkzMzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCAqLywKIAkJCQkzMzhCQjJENTI3
QjZCNjg3MDBFMDY2QUIgLyogTGV4ZXIuY3BwICovLAogCQkJCTMzOEJCMkQxMjdCNkI2M0YwMEUw
NjZBQiAvKiBTb3VyY2VTcGFuLmggKi8sCkBAIC0zMTAsNiArMzUzLDQ4IEBACiAJCQluYW1lID0g
RnJhbWV3b3JrczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTMzRUExODVD
MjdCQzE5M0QwMEExREQ1MiAvKiBBU1QgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTMzRUExODVEMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmggKi8s
CisJCQkJMzNFQTE4NjkyN0JDMUJFNjAwQTFERDUyIC8qIEF0dHJpYnV0ZS5oICovLAorCQkJCTMz
RUExODZCMjdCQzFDQkMwMEExREQ1MiAvKiBFeHByZXNzaW9uLmggKi8sCisJCQkJMzNFQTE4N0My
N0JDMjQ2MDAwQTFERDUyIC8qIEV4cHJlc3Npb25zICovLAorCQkJCTMzRUExODc1MjdCQzIxNkIw
MEExREQ1MiAvKiBGdW5jdGlvbkRlY2wuaCAqLywKKwkJCQkzM0VBMTg1RjI3QkMxOTgxMDBBMURE
NTIgLyogR2xvYmFsRGlyZWN0aXZlLmggKi8sCisJCQkJMzNFQTE4NjEyN0JDMTlDMTAwQTFERDUy
IC8qIEdsb2JhbERlY2wuaCAqLywKKwkJCQkzM0VBMTg2MzI3QkMxQTFEMDBBMURENTIgLyogR2xv
YmFsVmFyaWFibGVEZWNsLmggKi8sCisJCQkJMzNFQTE4NkYyN0JDMUU4QTAwQTFERDUyIC8qIFNo
YWRlci5oICovLAorCQkJCTMzRUExODczMjdCQzIwNDkwMEExREQ1MiAvKiBTdHJ1Y3R1cmVEZWNs
LmggKi8sCisJCQkJMzNFQTE4NkQyN0JDMUQ0QzAwQTFERDUyIC8qIFR5cGVEZWNsLmggKi8sCisJ
CQkJMzNFQTE4NzEyN0JDMUZFMTAwQTFERDUyIC8qIFZhcmlhYmxlUXVhbGlmaWVyLmggKi8sCisJ
CQkJMzNFQTE4NzgyN0JDMjJBQTAwQTFERDUyIC8qIFN0YXRlbWVudC5oICovLAorCQkJCTMzRUEx
ODc3MjdCQzIyOUEwMEExREQ1MiAvKiBTdGF0ZW1lbnRzICovLAorCQkJKTsKKwkJCXBhdGggPSBB
U1Q7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkzM0VBMTg3NzI3QkMyMjlB
MDBBMURENTIgLyogU3RhdGVtZW50cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJMzNFQTE4N0YyN0JDMjRFMjAwQTFERDUyIC8qIEFzc2lnbm1lbnRTdGF0
ZW1lbnQuaCAqLywKKwkJCQkzM0VBMTg3QTI3QkMyMzBFMDBBMURENTIgLyogQ29tcG91bmRTdGF0
ZW1lbnQuaCAqLywKKwkJCQkzM0VBMTg3RDI3QkMyNDkwMDBBMURENTIgLyogUmV0dXJuU3RhdGVt
ZW50LmggKi8sCisJCQkpOworCQkJcGF0aCA9IFN0YXRlbWVudHM7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OworCQkzM0VBMTg3QzI3QkMyNDYwMDBBMURENTIgLyogRXhwcmVzc2lv
bnMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTMzRUEx
ODgxMjdCQzI1RDAwMEExREQ1MiAvKiBJZGVudGlmaWVyRXhwcmVzc2lvbi5oICovLAorCQkJCTMz
RUExODgzMjdCQzI2ODYwMEExREQ1MiAvKiBTdHJ1Y3R1cmVBY2Nlc3MuaCAqLywKKwkJCQkzM0VB
MTg4NTI3QkMyNkRGMDBBMURENTIgLyogVHlwZUNvbnZlcnNpb24uaCAqLywKKwkJCQkzM0VBMTg4
NzI3QkMzNjFFMDBBMURENTIgLyogTGl0ZXJhbEV4cHJlc3Npb25zLmggKi8sCisJCQkpOworCQkJ
cGF0aCA9IEV4cHJlc3Npb25zOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIC8q
IEVuZCBQQlhHcm91cCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNl
IHNlY3Rpb24gKi8KQEAgLTMyNywxMCArNDEyLDMwIEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
KwkJCQkzM0VBMTg3OTI3QkMyMkFBMDBBMURENTIgLyogU3RhdGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQkzM0VBMTg1RTI3QkMxOTRGMDBBMURENTIgLyogQVNUTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzNFQTE4ODYyN0JDMjZERjAwQTFERDUyIC8qIFR5cGVDb252ZXJzaW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzM0VBMTg2NDI3QkMxQTFEMDBBMURENTIgLyogR2xvYmFsVmFyaWFi
bGVEZWNsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg3QjI3QkMyMzBFMDBBMURENTIgLyog
Q29tcG91bmRTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODc2MjdCQzIxNkIw
MEExREQ1MiAvKiBGdW5jdGlvbkRlY2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzOEJCMkQyMjdC
NkI2M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg2
NjI3QkMxQUQ1MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzM0VBMTg3MDI3QkMxRThBMDBBMURENTIgLyogU2hhZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMzhCQjJENDI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTMzRUExODg4MjdCQzM2MUUwMEExREQ1MiAvKiBMaXRlcmFsRXhwcmVzc2lvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMzOEJCMkNFMjdCNkI2MDIwMEUwNjZBQiAvKiBUb2tlbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzNFQTE4NkMyN0JDMUNCQzAwQTFERDUyIC8qIEV4cHJlc3Npb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTFDRUJEN0Y4MjcxNkIzNDQwMEE1MjU0RCAvKiBXR1NMLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzM0VBMTg2MjI3QkMxOUMxMDBBMURENTIgLyogR2xvYmFsRGVjbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4ODAyN0JDMjRFMjAwQTFERDUyIC8qIEFzc2lnbm1l
bnRTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODg0MjdCQzI2ODYwMEExREQ1
MiAvKiBTdHJ1Y3R1cmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODgyMjdCQzI1
RDAwMEExREQ1MiAvKiBJZGVudGlmaWVyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzNFQTE4NjAyN0JDMTk4MTAwQTFERDUyIC8qIEdsb2JhbERpcmVjdGl2ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzNFQTE4NkUyN0JDMUQ0QzAwQTFERDUyIC8qIFR5cGVEZWNsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkzM0VBMTg3NDI3QkMyMDQ5MDBBMURENTIgLyogU3RydWN0dXJlRGVjbC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4N0UyN0JDMjQ5MDAwQTFERDUyIC8qIFJldHVyblN0YXRl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4NkEyN0JDMUJFNjAwQTFERDUyIC8qIEF0
dHJpYnV0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4NzIyN0JDMUZFMTAwQTFERDUyIC8q
IFZhcmlhYmxlUXVhbGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTUxNyw2ICs2MjIsNyBAQAog
CQkJCTMzOEJCMkQ2MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQ0VCRDgwMzI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkzMzhCQjJEMDI3QjZCNjFCMDBFMDY2QUIgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzNFQTE4NjgyN0JDMUIxNDAwQTFERDUyIC8qIENvbXBpbGF0aW9uTWVzc2FnZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsK
</data>
<flag name="review"
          id="478995"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
    <flag name="commit-queue"
          id="478996"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452359</attachid>
            <date>2022-02-17 06:19:52 -0800</date>
            <delta_ts>2022-02-17 09:48:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchAST</filename>
            <type>text/plain</type>
            <size>81657</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggNzMzN2RhZjM1OTg4Li41ZGQ1OTAwZDE5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQ2IEBACisyMDIyLTAyLTE1ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CisKKyAgICAgICAgW1dHU0xdIEFkZCBlbm91Z2ggb2YgdGhlIEFTVCBmb3IgdGhlIHNpbXBs
ZXN0IHNoYWRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNjY1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZXNlIEFTVCBub2RlcyBhcmUganVzdCB0aG9zZSByZXF1aXJlZCBmb3IgdGhlIG1vc3Qg
dHJpdmlhbCBncmFwaGljcyBhbmQgY29tcHV0ZSBzaGFkZXJzLgorICAgICAgICBJIHVzZWQgdGhl
IG1hY2hpbmVyeSBmcm9tIHd0Zi9UeXBlQ2FzdHMgYXMgc3VnZ2VzdGVkIGJ5IE15bGVzIGluIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMyNzYuCisgICAgICAgIEN1
cnJlbnRseSBhbGwgb2YgdGhlIGNvZGUgZm9yIHRoZXNlIG5vZGVzIGlzIGluY2x1ZGVkIGluIFdH
U0wuY3BwIHRvIHZlcmlmeSB0aGF0IHRoZXkgYnVpbGQuIFRoaXMgd2lsbCBiZSByZW1vdmVkIGlu
IHRoZSBwYXJzZXIgcGF0Y2guCisKKyAgICAgICAgQXR0cmlidXRlcyBhcmUgYWRkZWQgaW4gc2V0
QXR0cmlidXRlcyBtZXRob2RzIGluc3RlYWQgb2YgYmVpbmcgcGFydCBvZiB0aGUgY29uc3RydWN0
b3JzLCBiZWNhdXNlIGl0IGNhbiBmYWlsLCBhbmQgcmV0dXJuaW5nIGFuIGVycm9yIGZyb20gYSBj
b25zdHJ1Y3RvciBpcyB0cmlja3kuCisKKyAgICAgICAgKiBXR1NML0FTVC9BdHRyaWJ1dGUuaDog
QWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkF0dHJpYnV0ZTo6QXR0cmlidXRlKToKKyAgICAg
ICAgKFdHU0w6OkFTVDo6QXR0cmlidXRlOjpraW5kIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6QXR0cmlidXRlOjppc0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXR0cmli
dXRlOjppc0dyb3VwIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXR0cmlidXRlOjppc0Jp
bmRpbmcgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzU3RhZ2UgY29u
c3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzTG9jYXRpb24gY29uc3QpOgor
ICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzQnVpbHRpbiBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OkJsb2NrQXR0cmlidXRlOjpCbG9ja0F0dHJpYnV0ZSk6CisgICAgICAgIChX
R1NMOjpBU1Q6Okdyb3VwQXR0cmlidXRlOjpHcm91cEF0dHJpYnV0ZSk6CisgICAgICAgIChXR1NM
OjpBU1Q6Okdyb3VwQXR0cmlidXRlOjpncm91cCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6
OkJpbmRpbmdBdHRyaWJ1dGU6OkJpbmRpbmdBdHRyaWJ1dGUpOgorICAgICAgICAoV0dTTDo6QVNU
OjpCaW5kaW5nQXR0cmlidXRlOjpiaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6
U3RhZ2VBdHRyaWJ1dGU6OlN0YWdlQXR0cmlidXRlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3Rh
Z2VBdHRyaWJ1dGU6OnN0YWdlIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QnVpbHRpbkF0
dHJpYnV0ZTo6QnVpbHRpbkF0dHJpYnV0ZSk6CisgICAgICAgIChXR1NMOjpBU1Q6OkJ1aWx0aW5B
dHRyaWJ1dGU6Om5hbWUgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpMb2NhdGlvbkF0dHJp
YnV0ZTo6TG9jYXRpb25BdHRyaWJ1dGUpOgorICAgICAgICAoV0dTTDo6QVNUOjpMb2NhdGlvbkF0
dHJpYnV0ZTo6bG9jYXRpb24gY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL0V4cHJlc3Npb24u
aDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkV4cHJlc3Npb246OkV4cHJlc3Npb24pOgor
ICAgICAgICAoV0dTTDo6QVNUOjpFeHByZXNzaW9uOjpraW5kIGNvbnN0KToKKyAgICAgICAgKFdH
U0w6OkFTVDo6RXhwcmVzc2lvbjo6aXNCb29sTGl0ZXJhbCBjb25zdCk6CisgICAgICAgIChXR1NM
OjpBU1Q6OkV4cHJlc3Npb246OmlzSW50MzJMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNVSW50MzJMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNGbG9hdDMyTGl0ZXJhbCBjb25zdCk6CisgICAgICAgIChXR1NM
OjpBU1Q6OkV4cHJlc3Npb246OmlzSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6OkV4cHJlc3Npb246OmlzU3RydWN0dXJlQWNjZXNzIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNUeXBlQ29udmVyc2lvbiBjb25zdCk6CisgICAgICAgICogV0dT
TC9BU1QvRXhwcmVzc2lvbnMvSWRlbnRpZmllckV4cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAg
IChXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uOjpJZGVudGlmaWVyRXhwcmVzc2lvbik6
CisgICAgICAgIChXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uOjppZGVudGlmaWVyIGNv
bnN0KToKKyAgICAgICAgKiBXR1NML0FTVC9FeHByZXNzaW9ucy9MaXRlcmFsRXhwcmVzc2lvbnMu
aDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkJvb2xMaXRlcmFsOjpCb29sTGl0ZXJhbCk6
CisgICAgICAgIChXR1NMOjpBU1Q6OkJvb2xMaXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OkludDMyTGl0ZXJhbDo6SW50MzJMaXRlcmFsKToKKyAgICAgICAgKFdHU0w6
OkFTVDo6SW50MzJMaXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlVp
bnQzMkxpdGVyYWw6OlVpbnQzMkxpdGVyYWwpOgorICAgICAgICAoV0dTTDo6QVNUOjpVaW50MzJM
aXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZsb2F0MzJMaXRlcmFs
OjpGbG9hdDMyTGl0ZXJhbCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZsb2F0MzJMaXRlcmFsOjp2
YWx1ZSBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNj
ZXNzLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpTdHJ1Y3R1cmVBY2Nlc3M6OlN0cnVj
dHVyZUFjY2Vzcyk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdHVyZUFjY2Vzczo6YmFzZSk6
CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdHVyZUFjY2Vzczo6ZmllbGROYW1lIGNvbnN0KToK
KyAgICAgICAgKiBXR1NML0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdHU0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OlR5cGVDb252ZXJzaW9uKToKKyAg
ICAgICAgKFdHU0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OnR5cGVEZWNsKToKKyAgICAgICAgKFdH
U0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OmFyZ3VtZW50cyk6CisgICAgICAgICogV0dTTC9BU1Qv
RnVuY3Rpb25EZWNsLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpQYXJhbWV0ZXI6OlBh
cmFtZXRlcik6CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6c2V0QXR0cmlidXRlcyk6
CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6YnVpbHRpbiBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6bG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV0dTTDo6
QVNUOjpQYXJhbWV0ZXI6Om5hbWUgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpQYXJhbWV0
ZXI6OnR5cGUpOgorICAgICAgICAoV0dTTDo6QVNUOjpGdW5jdGlvbkRlY2w6OkZ1bmN0aW9uRGVj
bCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6c2V0QXR0cmlidXRlcyk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6c2V0UmV0dXJuQXR0cmlidXRlcyk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6ZW50cnlQb2ludFN0YWdlIGNvbnN0KToK
KyAgICAgICAgKFdHU0w6OkFTVDo6RnVuY3Rpb25EZWNsOjpuYW1lIGNvbnN0KToKKyAgICAgICAg
KFdHU0w6OkFTVDo6RnVuY3Rpb25EZWNsOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKFdHU0w6OkFT
VDo6RnVuY3Rpb25EZWNsOjpyZXR1cm5CdWlsdGluIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6RnVuY3Rpb25EZWNsOjpyZXR1cm5Mb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6OkZ1bmN0aW9uRGVjbDo6bWF5YmVSZXR1cm5UeXBlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6
RnVuY3Rpb25EZWNsOjpib2R5KToKKyAgICAgICAgKiBXR1NML0FTVC9HbG9iYWxEZWNsLmg6IEFk
ZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxEZWNsOjpHbG9iYWxEZWNsKToKKyAgICAg
ICAgKFdHU0w6OkFTVDo6R2xvYmFsRGVjbDo6a2luZCBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6Okdsb2JhbERlY2w6OmlzR2xvYmFsVmFyaWFibGUgY29uc3QpOgorICAgICAgICAoV0dTTDo6
QVNUOjpHbG9iYWxEZWNsOjppc1N0cnVjdCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okds
b2JhbERlY2w6OmlzRnVuY3Rpb24gY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL0dsb2JhbERp
cmVjdGl2ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsRGlyZWN0aXZlOjpu
YW1lIGNvbnN0KToKKyAgICAgICAgKiBXR1NML0FTVC9HbG9iYWxWYXJpYWJsZURlY2wuaDogQWRk
ZWQuCisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6R2xvYmFsVmFyaWFi
bGVEZWNsKToKKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsVmFyaWFibGVEZWNsOjpzZXRBdHRy
aWJ1dGVzKToKKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsVmFyaWFibGVEZWNsOjpncm91cCBj
b25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6YmluZGluZyBj
b25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6bmFtZSBjb25z
dCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6bWF5YmVRdWFsaWZp
ZXIpOgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxWYXJpYWJsZURlY2w6Om1heWJlVHlwZURl
Y2wpOgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxWYXJpYWJsZURlY2w6Om1heWJlSW5pdGlh
bGl6ZXIpOgorICAgICAgICAqIFdHU0wvQVNUL1NoYWRlci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkdQVS9XR1NML0FTVC5oLgorICAgICAgICAqIFdHU0wvQVNUL1N0YXRlbWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6U3RhdGVtZW50OjpTdGF0ZW1lbnQpOgorICAgICAgICAo
V0dTTDo6QVNUOjpTdGF0ZW1lbnQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpT
dGF0ZW1lbnQ6OmlzQ29tcG91bmQgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpTdGF0ZW1l
bnQ6OmlzUmV0dXJuIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RhdGVtZW50Ojppc0Fz
c2lnbm1lbnQgY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL1N0YXRlbWVudHMvQXNzaWdubWVu
dFN0YXRlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6QXNzaWdubWVudFN0YXRl
bWVudDo6QXNzaWdubWVudFN0YXRlbWVudCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkFzc2lnbm1l
bnRTdGF0ZW1lbnQ6Om1heWJlTGhzKToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXNzaWdubWVudFN0
YXRlbWVudDo6cmhzKToKKyAgICAgICAgKiBXR1NML0FTVC9TdGF0ZW1lbnRzL1JldHVyblN0YXRl
bWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6UmV0dXJuU3RhdGVtZW50OjpSZXR1
cm5TdGF0ZW1lbnQpOgorICAgICAgICAoV0dTTDo6QVNUOjpSZXR1cm5TdGF0ZW1lbnQ6Om1heWJl
RXhwcmVzc2lvbik6CisgICAgICAgICogV0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oOiBBZGRlZC4K
KyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0TWVtYmVyOjpTdHJ1Y3RNZW1iZXIpOgorICAgICAg
ICAoV0dTTDo6QVNUOjpTdHJ1Y3RNZW1iZXI6OnNldEF0dHJpYnV0ZXMpOgorICAgICAgICAoV0dT
TDo6QVNUOjpTdHJ1Y3RNZW1iZXI6OmJ1aWx0aW4gY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNU
OjpTdHJ1Y3RNZW1iZXI6OmxvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3Ry
dWN0TWVtYmVyOjpuYW1lIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0TWVtYmVy
Ojp0eXBlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0RGVjbDo6U3RydWN0RGVjbCk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdERlY2w6OnNldEF0dHJpYnV0ZXMpOgorICAgICAgICAo
V0dTTDo6QVNUOjpTdHJ1Y3REZWNsOjppc0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6U3RydWN0RGVjbDo6bmFtZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdERl
Y2w6Om1lbWJlcnMpOgorICAgICAgICAqIFdHU0wvQVNUL1R5cGVEZWNsLmg6IEFkZGVkLgorICAg
ICAgICAoV0dTTDo6QVNUOjpUeXBlRGVjbDo6VHlwZURlY2wpOgorICAgICAgICAoV0dTTDo6QVNU
OjpUeXBlRGVjbDo6a2luZCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlR5cGVEZWNsOjpp
c05hbWVkIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6VHlwZURlY2w6OmlzUGFyYW1ldGVy
aXplZCBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvVmFyaWFibGVRdWFsaWZpZXIuaDogQWRk
ZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OlZhcmlhYmxlUXVhbGlmaWVyOjpWYXJpYWJsZVF1YWxp
Zmllcik6CisgICAgICAgIChXR1NMOjpBU1Q6OlZhcmlhYmxlUXVhbGlmaWVyOjpzdG9yYWdlQ2xh
c3MgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpWYXJpYWJsZVF1YWxpZmllcjo6YWNjZXNz
TW9kZSBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1ROb2RlLmg6IEFkZGVkLgorICAgICAgICAo
V0dTTDo6QVNUOjpBU1ROb2RlOjpBU1ROb2RlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6QVNUTm9k
ZTo6c3BhbiBjb25zdCk6CisgICAgICAgICogV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdHU0w6OkNvbXBpbGF0aW9uTWVzc2FnZTo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuaDogQWRkZWQuCisgICAgICAgIChXR1NM
OjpDb21waWxhdGlvbk1lc3NhZ2U6OkNvbXBpbGF0aW9uTWVzc2FnZSk6CisgICAgICAgICogV0dT
TC9XR1NMLmNwcDoKKyAgICAgICAgKiBXR1NML1dHU0wuaDoKKyAgICAgICAgKiBXZWJHUFUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMi0wMi0xNCAgUm9iaW4gTW9yaXNzZXQgIDxy
bW9yaXNzZXRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXR1NMXSBJbXBsZW1lbnQgZW5vdWdoIG9m
IHRoZSBsZXhlciBmb3IgdGhlIHNpbXBsZXN0IHNoYWRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJHUFUvV0dTTC9BU1QuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggODFjM2E0MDRmZDVkLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkdQVS9XR1NML0FTVC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi1u
YW1lc3BhY2UgV0dTTCB7Ci0KLWNsYXNzIEFTVCB7Ci0KLX07Ci0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvQXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0F0dHJpYnV0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTI5
NjNkYThhMjE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9BdHRy
aWJ1dGUuaApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgInd0Zi9VbmlxdWVSZWYuaCIKKyNpbmNsdWRl
ICJ3dGYvVmVjdG9yLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1l
c3BhY2UgV0dTTDo6QVNUIHsKKworY2xhc3MgQXR0cmlidXRlIDogcHVibGljIEFTVE5vZGUKK3sK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEtp
bmQgeworICAgICAgICBCbG9jaywKKyAgICAgICAgR3JvdXAsCisgICAgICAgIEJpbmRpbmcsCisg
ICAgICAgIFN0YWdlLAorICAgICAgICBMb2NhdGlvbiwKKyAgICAgICAgQnVpbHRpbiwKKyAgICB9
OworCisgICAgQXR0cmlidXRlKFNvdXJjZVNwYW4gc3BhbiwgS2luZCBraW5kKQorICAgICAgICA6
IEFTVE5vZGUoc3BhbikKKyAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICB7CisgICAgfQorCisg
ICAgS2luZCBraW5kKCkgY29uc3QgIHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGJvb2wgaXNCbG9j
aygpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpCbG9jazsgfQorICAgIGJvb2wgaXNH
cm91cCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpHcm91cDsgfQorICAgIGJvb2wg
aXNCaW5kaW5nKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkJpbmRpbmc7IH0KKyAg
ICBib29sIGlzU3RhZ2UoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6U3RhZ2U7IH0K
KyAgICBib29sIGlzTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6TG9j
YXRpb247IH0KKyAgICBib29sIGlzQnVpbHRpbigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBL
aW5kOjpCdWlsdGluOyB9CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7Cit9OworCitjbGFz
cyBCbG9ja0F0dHJpYnV0ZSA6IHB1YmxpYyBBdHRyaWJ1dGUKK3sKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCbG9ja0F0dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4p
CisgICAgICAgIDogQXR0cmlidXRlKHNwYW4sIEtpbmQ6OkJsb2NrKQorICAgIHsKKyAgICB9Cit9
OworCitjbGFzcyBHcm91cEF0dHJpYnV0ZSA6IHB1YmxpYyBBdHRyaWJ1dGUgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdyb3VwQXR0cmlidXRlKFNvdXJjZVNw
YW4gc3BhbiwgdW5zaWduZWQgZ3JvdXApCisgICAgICAgIDogQXR0cmlidXRlKHNwYW4sIEtpbmQ6
Okdyb3VwKQorICAgICAgICAsIG1fdmFsdWUoZ3JvdXApCisgICAgeworICAgIH0KKworICAgIHVu
c2lnbmVkIGdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIG1fdmFsdWU7Cit9OworCitjbGFzcyBCaW5kaW5nQXR0cmlidXRlIDogcHVibGlj
IEF0dHJpYnV0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
QmluZGluZ0F0dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4sIHVuc2lnbmVkIGJpbmRpbmcpCisgICAg
ICAgIDogQXR0cmlidXRlKHNwYW4sIEtpbmQ6OkJpbmRpbmcpCisgICAgICAgICwgbV92YWx1ZShi
aW5kaW5nKQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBiaW5kaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fdmFsdWU7Cit9Owor
CitjbGFzcyBTdGFnZUF0dHJpYnV0ZSA6IHB1YmxpYyBBdHRyaWJ1dGUgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgU3RhZ2UgOiB1aW50OF90
IHsKKyAgICAgICAgQ29tcHV0ZSwKKyAgICAgICAgVmVydGV4LAorICAgICAgICBGcmFnbWVudAor
ICAgIH07CisKKyAgICBTdGFnZUF0dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4sIFN0YWdlIHN0YWdl
KQorICAgICAgICA6IEF0dHJpYnV0ZShzcGFuLCBLaW5kOjpTdGFnZSkKKyAgICAgICAgLCBtX3N0
YWdlKHN0YWdlKQorICAgIHsKKyAgICB9CisKKyAgICBTdGFnZSBzdGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhZ2U7IH0KKworcHJpdmF0ZToKKyAgICBTdGFnZSBtX3N0YWdlOworfTsKKworY2xh
c3MgQnVpbHRpbkF0dHJpYnV0ZSA6IHB1YmxpYyBBdHRyaWJ1dGUgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEJ1aWx0aW5BdHRyaWJ1dGUoU291cmNlU3BhbiBz
cGFuLCBTdHJpbmdWaWV3IG5hbWUpCisgICAgICAgIDogQXR0cmlidXRlKHNwYW4sIEtpbmQ6OkJ1
aWx0aW4pCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKworICAgIGNvbnN0
IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworcHJpdmF0ZToK
KyAgICBTdHJpbmdWaWV3IG1fbmFtZTsKK307CisKK2NsYXNzIExvY2F0aW9uQXR0cmlidXRlIDog
cHVibGljIEF0dHJpYnV0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgTG9jYXRpb25BdHRyaWJ1dGUoU291cmNlU3BhbiBzcGFuLCB1bnNpZ25lZCB2YWx1ZSkK
KyAgICAgICAgOiBBdHRyaWJ1dGUoc3BhbiwgS2luZDo6TG9jYXRpb24pCisgICAgICAgICwgbV92
YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV92YWx1ZTsK
K307CisKK3VzaW5nIEF0dHJpYnV0ZXMgPSBWZWN0b3I8VW5pcXVlUmVmPEF0dHJpYnV0ZT4sIDI+
OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dHU0xfQVRUUklCVVRFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdHU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdHU0w6OkFTVDo6QXR0cmlidXRlJiBhdHRyKSB7
IHJldHVybiBhdHRyLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgp
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9BVFRSSUJVVEUoQmxvY2tBdHRyaWJ1dGUs
IGlzQmxvY2soKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9BVFRSSUJVVEUoR3JvdXBB
dHRyaWJ1dGUsIGlzR3JvdXAoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9BVFRSSUJV
VEUoQmluZGluZ0F0dHJpYnV0ZSwgaXNCaW5kaW5nKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X1dHU0xfQVRUUklCVVRFKFN0YWdlQXR0cmlidXRlLCBpc1N0YWdlKCkpCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKExvY2F0aW9uQXR0cmlidXRlLCBpc0xvY2F0aW9uKCkp
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKEJ1aWx0aW5BdHRyaWJ1dGUs
IGlzQnVpbHRpbigpKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJl
c3Npb24uaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjIwMjliNjA0OTA4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9uLmgKQEAgLTAsMCArMSw3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKworbmFtZXNwYWNlIFdHU0w6OkFTVCB7CisKK2NsYXNz
IEV4cHJlc3Npb24gOiBwdWJsaWMgQVNUTm9kZQoreworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgS2luZCB7CisgICAgICAgIEJvb2xMaXRlcmFs
LAorICAgICAgICBJbnQzMkxpdGVyYWwsCisgICAgICAgIFVpbnQzMkxpdGVyYWwsCisgICAgICAg
IEZsb2F0MzJMaXRlcmFsLAorICAgICAgICBJZGVudGlmaWVyLAorICAgICAgICBTdHJ1Y3R1cmVB
Y2Nlc3MsCisgICAgICAgIFR5cGVDb252ZXJzaW9uLAorICAgIH07CisKKyAgICBFeHByZXNzaW9u
KFNvdXJjZVNwYW4gc3BhbiwgS2luZCBraW5kKQorICAgICAgICA6IEFTVE5vZGUoc3BhbikKKyAg
ICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICB7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29u
c3QgIHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGJvb2wgaXNCb29sTGl0ZXJhbCgpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpCb29sTGl0ZXJhbDsgfQorICAgIGJvb2wgaXNJbnQzMkxp
dGVyYWwoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6SW50MzJMaXRlcmFsOyB9Cisg
ICAgYm9vbCBpc1VJbnQzMkxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6
VWludDMyTGl0ZXJhbDsgfQorICAgIGJvb2wgaXNGbG9hdDMyTGl0ZXJhbCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBLaW5kOjpGbG9hdDMyTGl0ZXJhbDsgfQorICAgIGJvb2wgaXNJZGVudGlm
aWVyKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OklkZW50aWZpZXI7IH0KKyAgICBi
b29sIGlzU3RydWN0dXJlQWNjZXNzKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OlN0
cnVjdHVyZUFjY2VzczsgfQorICAgIGJvb2wgaXNUeXBlQ29udmVyc2lvbigpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBLaW5kOjpUeXBlQ29udmVyc2lvbjsgfQorCitwcml2YXRlOgorICAgIEtp
bmQgbV9raW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKKyNkZWZpbmUgU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0VYUFJFU1NJT04oVG9WYWx1ZVR5cGVOYW1lLCBwcmVk
aWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV0dTTDo6QVNUOjpUb1ZhbHVl
VHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV0dTTDo6QVNUOjpFeHBy
ZXNzaW9uJiBleHByZXNzaW9uKSB7IHJldHVybiBleHByZXNzaW9uLnByZWRpY2F0ZTsgfSBcCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0V4cHJlc3Npb25zL0lkZW50aWZpZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViR1BV
L1dHU0wvQVNUL0V4cHJlc3Npb25zL0lkZW50aWZpZXJFeHByZXNzaW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mNDA1NTU0OTMwMTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL0lkZW50aWZpZXJFeHByZXNz
aW9uLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKwor
bmFtZXNwYWNlIFdHU0w6OkFTVCB7CisKK2NsYXNzIElkZW50aWZpZXJFeHByZXNzaW9uIDogcHVi
bGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIElkZW50aWZpZXJFeHByZXNzaW9uKFNvdXJjZVNwYW4gc3BhbiwgU3RyaW5nVmlldyBpZGVu
dGlmaWVyKQorICAgICAgICA6IEV4cHJlc3Npb24oc3BhbiwgS2luZDo6SWRlbnRpZmllcikKKyAg
ICAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICB7CisgICAgfQorCisgICAgY29u
c3QgU3RyaW5nVmlldyYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsg
fQorCitwcml2YXRlOgorICAgIFN0cmluZ1ZpZXcgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9FWFBSRVNT
SU9OKElkZW50aWZpZXJFeHByZXNzaW9uLCBpc0lkZW50aWZpZXIoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvTGl0ZXJhbEV4cHJlc3Npb25zLmggYi9T
b3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL0xpdGVyYWxFeHByZXNzaW9ucy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDJjMTU3MjlkYTY2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9MaXRlcmFs
RXhwcmVzc2lvbnMuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBCb29sTGl0ZXJhbCA6IHB1YmxpYyBF
eHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBC
b29sTGl0ZXJhbChTb3VyY2VTcGFuIHNwYW4sIGJvb2wgdmFsdWUpCisgICAgICAgIDogRXhwcmVz
c2lvbihzcGFuLCBLaW5kOjpCb29sTGl0ZXJhbCkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsg
fQorCitwcml2YXRlOgorICAgIGJvb2wgbV92YWx1ZTsKK307CisKK2NsYXNzIEludDMyTGl0ZXJh
bCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBJbnQzMkxpdGVyYWwoU291cmNlU3BhbiBzcGFuLCBpbnQzMl90IHZhbHVlKQor
ICAgICAgICA6IEV4cHJlc3Npb24oc3BhbiwgS2luZDo6SW50MzJMaXRlcmFsKQorICAgICAgICAs
IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIGludDMyX3QgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgaW50MzJfdCBtX3ZhbHVlOwor
fTsKKworY2xhc3MgVWludDMyTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBVaW50MzJMaXRlcmFsKFNvdXJjZVNw
YW4gc3BhbiwgdWludDMyX3QgdmFsdWUpCisgICAgICAgIDogRXhwcmVzc2lvbihzcGFuLCBLaW5k
OjpVaW50MzJMaXRlcmFsKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KworICAgIHVpbnQzMl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcml2
YXRlOgorICAgIHVpbnQzMl90IG1fdmFsdWU7Cit9OworCitjbGFzcyBGbG9hdDMyTGl0ZXJhbCA6
IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBGbG9hdDMyTGl0ZXJhbChTb3VyY2VTcGFuIHNwYW4sIGZsb2F0IHZhbHVlKQorICAg
ICAgICA6IEV4cHJlc3Npb24oc3BhbiwgS2luZDo6RmxvYXQzMkxpdGVyYWwpCisgICAgICAgICwg
bV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgbV92YWx1ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xf
RVhQUkVTU0lPTihCb29sTGl0ZXJhbCwgaXNCb29sTGl0ZXJhbCgpKQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19XR1NMX0VYUFJFU1NJT04oSW50MzJMaXRlcmFsLCBpc0ludDMyTGl0ZXJhbCgpKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0VYUFJFU1NJT04oRmxvYXQzMkxpdGVyYWwsIGlz
RmxvYXQzMkxpdGVyYWwoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9FWFBSRVNTSU9O
KFVpbnQzMkxpdGVyYWwsIGlzVUludDMyTGl0ZXJhbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3MuaCBiL1NvdXJjZS9XZWJH
UFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kYTJiMWRjNzMxY2UKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkV4
cHJlc3Npb24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisKK25hbWVzcGFj
ZSBXR1NMOjpBU1QgeworCitjbGFzcyBTdHJ1Y3R1cmVBY2Nlc3MgOiBwdWJsaWMgRXhwcmVzc2lv
biB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3RydWN0dXJl
QWNjZXNzKFNvdXJjZVNwYW4gc3BhbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgYmFzZSwgU3Ry
aW5nVmlldyBmaWVsZE5hbWUpCisgICAgICAgIDogRXhwcmVzc2lvbihzcGFuLCBLaW5kOjpTdHJ1
Y3R1cmVBY2Nlc3MpCisgICAgICAgICwgbV9iYXNlKFdURk1vdmUoYmFzZSkpCisgICAgICAgICwg
bV9maWVsZE5hbWUoZmllbGROYW1lKQorICAgIHsKKyAgICB9CisKKyAgICBVbmlxdWVSZWY8RXhw
cmVzc2lvbj4mIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICBjb25zdCBTdHJpbmdWaWV3
JiBmaWVsZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpZWxkTmFtZTsgfQorCitwcml2YXRlOgor
ICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2Jhc2U7CisgICAgU3RyaW5nVmlldyBtX2ZpZWxk
TmFtZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVAorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dHU0xfRVhQUkVTU0lPTihTdHJ1Y3R1cmVBY2Nlc3MsIGlzU3RydWN0dXJlQWNjZXNz
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1R5cGVD
b252ZXJzaW9uLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1R5cGVDb252
ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZWM1MzU1
OWFjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Np
b25zL1R5cGVDb252ZXJzaW9uLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVS
ZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXR1NMOjpBU1Qgewor
CisvLyBNYXkgYmUgY29udmVydGVkIHRvIGEgZnVuY3Rpb24gY2FsbCBkdXJpbmcgdmFsaWRhdGlv
biwgYXMgd2UgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZSBkdXJpbmcgcGFyc2luZy4KK2NsYXNz
IFR5cGVDb252ZXJzaW9uIDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIFR5cGVDb252ZXJzaW9uKFNvdXJjZVNwYW4gc3Bhbiwg
VW5pcXVlUmVmPFR5cGVEZWNsPiYmIHR5cGVEZWNsLCBWZWN0b3I8VW5pcXVlUmVmPEV4cHJlc3Np
b24+PiYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBFeHByZXNzaW9uKHNwYW4sIEtpbmQ6OlR5cGVD
b252ZXJzaW9uKQorICAgICAgICAsIG1fdHlwZURlY2woV1RGTW92ZSh0eXBlRGVjbCkpCisgICAg
ICAgICwgbV9hcmd1bWVudHMoV1RGTW92ZShhcmd1bWVudHMpKQorICAgIHsKKyAgICB9CisKKyAg
ICBVbmlxdWVSZWY8VHlwZURlY2w+JiB0eXBlRGVjbCgpIHsgcmV0dXJuIG1fdHlwZURlY2w7IH0K
KyAgICBWZWN0b3I8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYgYXJndW1lbnRzKCkgeyByZXR1cm4g
bV9hcmd1bWVudHM7IH0KKworcHJpdmF0ZToKKyAgICBVbmlxdWVSZWY8VHlwZURlY2w+IG1fdHlw
ZURlY2w7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9hcmd1bWVudHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
R1NMX0VYUFJFU1NJT04oVHlwZUNvbnZlcnNpb24sIGlzVHlwZUNvbnZlcnNpb24oKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRnVuY3Rpb25EZWNsLmggYi9Tb3VyY2UvV2Vi
R1BVL1dHU0wvQVNUL0Z1bmN0aW9uRGVjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uNjgzMWIwMmMyMjcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQ
VS9XR1NML0FTVC9GdW5jdGlvbkRlY2wuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSAiQXR0cmlidXRl
LmgiCisjaW5jbHVkZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiU3RhdGVtZW50
cy9Db21wb3VuZFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlR5cGVEZWNsLmgiCisKK25hbWVzcGFj
ZSBXR1NMOjpBU1QgeworCitjbGFzcyBQYXJhbWV0ZXIgOiBwdWJsaWMgQVNUTm9kZSB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUGFyYW1ldGVyKFNvdXJjZVNw
YW4gc3BhbiwgU3RyaW5nVmlldyBuYW1lLCBVbmlxdWVSZWY8VHlwZURlY2w+JiYgdHlwZSwgQXR0
cmlidXRlcyYmIGF0dHJpYnV0ZXMpCisgICAgICAgIDogQVNUTm9kZShzcGFuKQorICAgICAgICAs
IG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQor
ICAgICAgICAsIG1fYXR0cmlidXRlcyhXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIHsKKyAgICB9
CisKKyAgICBjb25zdCBTdHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgVHlwZURlY2wmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KKworcHJpdmF0ZToKKyAg
ICBTdHJpbmdWaWV3IG1fbmFtZTsKKyAgICBVbmlxdWVSZWY8VHlwZURlY2w+IG1fdHlwZTsKKyAg
ICBBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKK307CisKK2NsYXNzIEZ1bmN0aW9uRGVjbCA6IHB1
YmxpYyBHbG9iYWxEZWNsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBGdW5jdGlvbkRlY2woU291cmNlU3BhbiBzb3VyY2VTcGFuLCBTdHJpbmdWaWV3IG5hbWUs
IFZlY3RvcjxVbmlxdWVSZWY8UGFyYW1ldGVyPj4mJiBwYXJhbWV0ZXJzLCBzdGQ6OnVuaXF1ZV9w
dHI8VHlwZURlY2w+JiYgcmV0dXJuVHlwZSwgQ29tcG91bmRTdGF0ZW1lbnQmJiBib2R5LCBBdHRy
aWJ1dGVzJiYgYXR0cmlidXRlcywgQXR0cmlidXRlcyYmIHJldHVybkF0dHJpYnV0ZXMpCisgICAg
ICAgIDogR2xvYmFsRGVjbChzb3VyY2VTcGFuLCBLaW5kOjpGdW5jdGlvbikKKyAgICAgICAgLCBt
X25hbWUobmFtZSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkK
KyAgICAgICAgLCBtX2F0dHJpYnV0ZXMoV1RGTW92ZShhdHRyaWJ1dGVzKSkKKyAgICAgICAgLCBt
X3JldHVybkF0dHJpYnV0ZXMoV1RGTW92ZShyZXR1cm5BdHRyaWJ1dGVzKSkKKyAgICAgICAgLCBt
X3JldHVyblR5cGUoV1RGTW92ZShyZXR1cm5UeXBlKSkKKyAgICAgICAgLCBtX2JvZHkoV1RGTW92
ZShib2R5KSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nVmlldyYgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFZlY3RvcjxVbmlxdWVSZWY8UGFyYW1ldGVyPj4m
IHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBBdHRyaWJ1dGVzJiBh
dHRyaWJ1dGVzKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAgQXR0cmlidXRlcyYgcmV0
dXJuQXR0cmlidXRlcygpIHsgcmV0dXJuIG1fcmV0dXJuQXR0cmlidXRlczsgfQorICAgIFR5cGVE
ZWNsKiBtYXliZVJldHVyblR5cGUoKSB7IHJldHVybiBtX3JldHVyblR5cGUuZ2V0KCk7IH0KKyAg
ICBDb21wb3VuZFN0YXRlbWVudCYgYm9keSgpIHsgcmV0dXJuIG1fYm9keTsgfQorCitwcml2YXRl
OgorICAgIFN0cmluZ1ZpZXcgbV9uYW1lOworICAgIFZlY3RvcjxVbmlxdWVSZWY8UGFyYW1ldGVy
Pj4gbV9wYXJhbWV0ZXJzOworICAgIEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworICAgIEF0dHJp
YnV0ZXMgbV9yZXR1cm5BdHRyaWJ1dGVzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlRGVjbD4g
bV9yZXR1cm5UeXBlOworICAgIENvbXBvdW5kU3RhdGVtZW50IG1fYm9keTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdHU0w6OkFTVAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfR0xPQkFM
X0RFQ0woRnVuY3Rpb25EZWNsLCBpc0Z1bmN0aW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dHU0wvQVNUL0dsb2JhbERlY2wuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvR2xvYmFs
RGVjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjNhMzEyM2Zl
MTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9HbG9iYWxEZWNs
LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKworbmFtZXNwYWNlIFdH
U0w6OkFTVCB7CisKK2NsYXNzIEdsb2JhbERlY2wgOiBwdWJsaWMgQVNUTm9kZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBLaW5kIHsKKyAg
ICAgICAgR2xvYmFsVmFyaWFibGUsCisgICAgICAgIFN0cnVjdCwKKyAgICAgICAgRnVuY3Rpb24s
CisgICAgfTsKKworICAgIEdsb2JhbERlY2woU291cmNlU3BhbiBzcGFuLCBHbG9iYWxEZWNsOjpL
aW5kIGtpbmQpCisgICAgICAgIDogQVNUTm9kZShzcGFuKQorICAgICAgICAsIG1fa2luZChraW5k
KQorICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCAgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgYm9vbCBpc0dsb2JhbFZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09
IEtpbmQ6Okdsb2JhbFZhcmlhYmxlOyB9CisgICAgYm9vbCBpc1N0cnVjdCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBLaW5kOjpTdHJ1Y3Q7IH0KKyAgICBib29sIGlzRnVuY3Rpb24oKSBjb25z
dCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6RnVuY3Rpb247IH0KKworcHJpdmF0ZToKKyAgICBL
aW5kIG1fa2luZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVAorCisjZGVmaW5lIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9HTE9CQUxfREVDTChUb1ZhbHVlVHlwZU5hbWUsIHBy
ZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXR1NMOjpBU1Q6OlRvVmFs
dWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXR1NMOjpBU1Q6Okds
b2JhbERlY2wmIGRlY2wpIHsgcmV0dXJuIGRlY2wucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvR2xv
YmFsRGlyZWN0aXZlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0dsb2JhbERpcmVjdGl2ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTRiZDRmNmQwMmJhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9HbG9iYWxEaXJlY3RpdmUu
aApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJBU1ROb2RlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXR1NMOjpBU1QgeworCitjbGFzcyBHbG9iYWxEaXJlY3RpdmUgOiBwdWJsaWMgQVNUTm9kZSB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgY29uc3QgU3RyaW5n
VmlldyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCitwcml2YXRlOgorICAgIFN0
cmluZ1ZpZXcgbV9uYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0dsb2JhbFZhcmlhYmxlRGVjbC5oIGIvU291cmNl
L1dlYkdQVS9XR1NML0FTVC9HbG9iYWxWYXJpYWJsZURlY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAuLmM5NzdlYmI3ZTg0MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvR2xvYmFsVmFyaWFibGVEZWNsLmgKQEAgLTAsMCArMSw3MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisj
aW5jbHVkZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIkdsb2JhbERlY2wuaCIKKyNpbmNsdWRlICJUeXBlRGVjbC5oIgorI2luY2x1ZGUg
IlZhcmlhYmxlUXVhbGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBHbG9iYWxWYXJpYWJsZURlY2wgOiBwdWJs
aWMgR2xvYmFsRGVjbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgR2xvYmFsVmFyaWFibGVEZWNsKFNvdXJjZVNwYW4gc3BhbiwgU3RyaW5nVmlldyBuYW1lLCBz
dGQ6OnVuaXF1ZV9wdHI8VmFyaWFibGVRdWFsaWZpZXI+JiYgcXVhbGlmaWVyLCBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZURlY2w+JiYgdHlwZSwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5p
dGlhbGl6ZXIsIEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQorICAgICAgICA6IEdsb2JhbERlY2wo
c3BhbiwgS2luZDo6R2xvYmFsVmFyaWFibGUpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAg
ICAgICwgbV9hdHRyaWJ1dGVzKFdURk1vdmUoYXR0cmlidXRlcykpCisgICAgICAgICwgbV9xdWFs
aWZpZXIoV1RGTW92ZShxdWFsaWZpZXIpKQorICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUp
KQorICAgICAgICAsIG1faW5pdGlhbGl6ZXIoV1RGTW92ZShpbml0aWFsaXplcikpCisgICAgewor
ICAgICAgICBBU1NFUlQobV90eXBlIHx8IG1faW5pdGlhbGl6ZXIpOworICAgIH0KKworICAgIGNv
bnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBBdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAgVmFyaWFi
bGVRdWFsaWZpZXIqIG1heWJlUXVhbGlmaWVyKCkgeyByZXR1cm4gbV9xdWFsaWZpZXIuZ2V0KCk7
IH0KKyAgICBUeXBlRGVjbCogbWF5YmVUeXBlRGVjbCgpIHsgcmV0dXJuIG1fdHlwZS5nZXQoKTsg
fQorICAgIEV4cHJlc3Npb24qIG1heWJlSW5pdGlhbGl6ZXIoKSB7IHJldHVybiBtX2luaXRpYWxp
emVyLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nVmlldyBtX25hbWU7CisgICAgQXR0
cmlidXRlcyBtX2F0dHJpYnV0ZXM7CisgICAgLy8gRWFjaCBvZiB0aGUgZm9sbG93aW5nIG1heSBi
ZSBudWxsCisgICAgLy8gQnV0IGF0IGxlYXN0IG9uZSBvZiB0eXBlIGFuZCBpbml0aWFsaXplciBt
dXN0IGJlIG5vbi1udWxsCisgICAgc3RkOjp1bmlxdWVfcHRyPFZhcmlhYmxlUXVhbGlmaWVyPiBt
X3F1YWxpZmllcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZURlY2w+IG1fdHlwZTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9pbml0aWFsaXplcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdHU0w6OkFTVAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfR0xPQkFMX0RF
Q0woR2xvYmFsVmFyaWFibGVEZWNsLCBpc0dsb2JhbFZhcmlhYmxlKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dHU0wvQVNUL1NoYWRlck1vZHVsZS5oIGIvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9TaGFkZXJNb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLjBiMTRiNWRlZTcyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvU2hhZGVyTW9kdWxlLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVNUTm9k
ZS5oIgorI2luY2x1ZGUgIkdsb2JhbERpcmVjdGl2ZS5oIgorI2luY2x1ZGUgIkdsb2JhbERlY2wu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdHU0w6
OkFTVCB7CisKK2NsYXNzIFNoYWRlck1vZHVsZSA6IEFTVE5vZGUgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFNoYWRlck1vZHVsZShTb3VyY2VTcGFuIHNwYW4s
IFZlY3RvcjxVbmlxdWVSZWY8R2xvYmFsRGlyZWN0aXZlPj4mJiBkaXJlY3RpdmVzLCBWZWN0b3I8
VW5pcXVlUmVmPEdsb2JhbERlY2w+PiYmIGRlY2xzKQorICAgICAgICA6IEFTVE5vZGUoc3BhbikK
KyAgICAgICAgLCBtX2RpcmVjdGl2ZXMoV1RGTW92ZShkaXJlY3RpdmVzKSkKKyAgICB7CisgICAg
ICAgIGZvciAoYXV0byYgZGVjbCA6IGRlY2xzKSB7CisgICAgICAgICAgICBpZiAoaXM8U3RydWN0
RGVjbD4oZGVjbC5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGdvIGZy
b20gVW5pcXVlUmVmPEJhc2VDbGFzcz4gdG8gVW5pcXVlUmVmPERlcml2ZWRDbGFzcz4sIGJ1dCB0
aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgZG93bmNhc3QuCisgICAgICAgICAgICAgICAgLy8gU28g
aW5zdGVhZCB3ZSBkbyBVbmlxdWVSZWYgLT4gdW5pcXVlX3B0ciAtPiByYXdfcG9pbnRlciAtKGRv
d25jYXN0KS0+IHJhd19wb2ludGVyIC0+IHVuaXF1ZV9wdHIgLT4gVW5pcXVlUmVmLi4uCisgICAg
ICAgICAgICAgICAgR2xvYmFsRGVjbCogcmF3UHRyID0gZGVjbC5tb3ZlVG9VbmlxdWVQdHIoKS5y
ZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0RGVjbCogZG93bmNhc3RlZFJhd1B0ciA9
IGRvd25jYXN0PFN0cnVjdERlY2w+KHJhd1B0cik7CisgICAgICAgICAgICAgICAgbV9zdHJ1Y3Rz
LmFwcGVuZChtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoc3RkOjp1bmlxdWVfcHRy
PFN0cnVjdERlY2w+KGRvd25jYXN0ZWRSYXdQdHIpKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGlzPEdsb2JhbFZhcmlhYmxlRGVjbD4oZGVjbC5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBH
bG9iYWxEZWNsKiByYXdQdHIgPSBkZWNsLm1vdmVUb1VuaXF1ZVB0cigpLnJlbGVhc2UoKTsKKyAg
ICAgICAgICAgICAgICBHbG9iYWxWYXJpYWJsZURlY2wqIGRvd25jYXN0ZWRSYXdQdHIgPSBkb3du
Y2FzdDxHbG9iYWxWYXJpYWJsZURlY2w+KHJhd1B0cik7CisgICAgICAgICAgICAgICAgbV9nbG9i
YWxWYXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoc3RkOjp1bmlx
dWVfcHRyPEdsb2JhbFZhcmlhYmxlRGVjbD4oZG93bmNhc3RlZFJhd1B0cikpKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR2xvYmFsRGVjbCogcmF3UHRyID0gZGVjbC5t
b3ZlVG9VbmlxdWVQdHIoKS5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25EZWNs
KiBmdW5jID0gZG93bmNhc3Q8RnVuY3Rpb25EZWNsPihyYXdQdHIpOworICAgICAgICAgICAgICAg
IG1fZnVuY3Rpb25zLmFwcGVuZChtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoc3Rk
Ojp1bmlxdWVfcHRyPEZ1bmN0aW9uRGVjbD4oZnVuYykpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIFZlY3RvcjxVbmlxdWVSZWY8R2xvYmFsRGlyZWN0aXZlPj4mIGRp
cmVjdGl2ZXMoKSB7IHJldHVybiBtX2RpcmVjdGl2ZXM7IH0KKyAgICBWZWN0b3I8VW5pcXVlUmVm
PFN0cnVjdERlY2w+PiYgc3RydWN0cygpIHsgcmV0dXJuIG1fc3RydWN0czsgfQorICAgIFZlY3Rv
cjxVbmlxdWVSZWY8R2xvYmFsVmFyaWFibGVEZWNsPj4mIGdsb2JhbFZhcnMoKSB7IHJldHVybiBt
X2dsb2JhbFZhcnM7IH0KKyAgICBWZWN0b3I8VW5pcXVlUmVmPEZ1bmN0aW9uRGVjbD4+JiBmdW5j
dGlvbnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxV
bmlxdWVSZWY8R2xvYmFsRGlyZWN0aXZlPj4gbV9kaXJlY3RpdmVzOworCisgICAgVmVjdG9yPFVu
aXF1ZVJlZjxTdHJ1Y3REZWNsPj4gbV9zdHJ1Y3RzOworICAgIFZlY3RvcjxVbmlxdWVSZWY8R2xv
YmFsVmFyaWFibGVEZWNsPj4gbV9nbG9iYWxWYXJzOworICAgIFZlY3RvcjxVbmlxdWVSZWY8RnVu
Y3Rpb25EZWNsPj4gbV9mdW5jdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50LmggYi9Tb3VyY2Uv
V2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uYmZhZmI2YTQ1Nzc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQ
VS9XR1NML0FTVC9TdGF0ZW1lbnQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSA8d3RmL1R5cGVDYXN0
cy5oPgorCituYW1lc3BhY2UgV0dTTDo6QVNUIHsKKworY2xhc3MgU3RhdGVtZW50IDogcHVibGlj
IEFTVE5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAg
ZW51bSBjbGFzcyBLaW5kIDogdWludDhfdCB7CisgICAgICAgIENvbXBvdW5kLAorICAgICAgICBS
ZXR1cm4sCisgICAgICAgIEFzc2lnbm1lbnQsCisgICAgfTsKKworICAgIFN0YXRlbWVudChTb3Vy
Y2VTcGFuIHNwYW4sIEtpbmQga2luZCkKKyAgICAgICAgOiBBU1ROb2RlKHNwYW4pCisgICAgICAg
ICwgbV9raW5kKGtpbmQpCisgICAgeworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0ICB7
IHJldHVybiBtX2tpbmQ7IH0KKyAgICBib29sIGlzQ29tcG91bmQoKSBjb25zdCB7IHJldHVybiBr
aW5kKCkgPT0gS2luZDo6Q29tcG91bmQ7IH0KKyAgICBib29sIGlzUmV0dXJuKCkgY29uc3QgeyBy
ZXR1cm4ga2luZCgpID09IEtpbmQ6OlJldHVybjsgfQorICAgIGJvb2wgaXNBc3NpZ25tZW50KCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkFzc2lnbm1lbnQ7IH0KKworcHJpdmF0ZToK
KyAgICBLaW5kIG1fa2luZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVAorCisjZGVm
aW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9TVEFURU1FTlQoVG9WYWx1ZVR5cGVOYW1l
LCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV0dTTDo6QVNUOjpU
b1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV0dTTDo6QVNU
OjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkgeyByZXR1cm4gc3RhdGVtZW50LnByZWRpY2F0ZTsgfSBc
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BV
L1dHU0wvQVNUL1N0YXRlbWVudHMvQXNzaWdubWVudFN0YXRlbWVudC5oIGIvU291cmNlL1dlYkdQ
VS9XR1NML0FTVC9TdGF0ZW1lbnRzL0Fzc2lnbm1lbnRTdGF0ZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmJmZWQ1ZDY5Yzg0OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50
LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvbi5oIgorCituYW1lc3BhY2UgV0dT
TDo6QVNUIHsKKworY2xhc3MgQXNzaWdubWVudFN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEFzc2lnbm1lbnRT
dGF0ZW1lbnQoU291cmNlU3BhbiBzcGFuLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiBs
aHMsIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIHJocykKKyAgICAgICAgOiBTdGF0ZW1lbnQoc3Bh
biwgS2luZDo6QXNzaWdubWVudCkKKyAgICAgICAgLCBtX2xocyhXVEZNb3ZlKGxocykpCisgICAg
ICAgICwgbV9yaHMoV1RGTW92ZShyaHMpKQorICAgIHsKKyAgICB9CisKKyAgICBFeHByZXNzaW9u
KiBtYXliZUxocygpIHsgcmV0dXJuIG1fbGhzLmdldCgpOyB9CisgICAgRXhwcmVzc2lvbiYgcmhz
KCkgeyByZXR1cm4gbV9yaHM7IH0KKworcHJpdmF0ZToKKyAgICAvLyBMSFMgY2FuIGJlIG51bGwg
aW4gdGhlIGNhc2UgaXQgaXMgJ18nLCBidXQgUkhTIGlzIG5ldmVyIG51bGwKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9saHM7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1f
cmhzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0dTTF9TVEFURU1FTlQoQXNzaWdubWVudFN0YXRlbWVudCwgaXNBc3NpZ25tZW50KCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudHMvQ29tcG91bmRT
dGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9Db21wb3VuZFN0
YXRlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjUxYjM4
YjMxYjVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1l
bnRzL0NvbXBvdW5kU3RhdGVtZW50LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3RhdGVtZW50LmgiCisKK25hbWVzcGFjZSBXR1NMOjpB
U1QgeworCitjbGFzcyBDb21wb3VuZFN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENvbXBvdW5kU3RhdGVtZW50
KFNvdXJjZVNwYW4gc3BhbiwgVmVjdG9yPFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+PiYmIHN0YXRlbWVu
dHMpCisgICAgICAgIDogU3RhdGVtZW50KHNwYW4sIEtpbmQ6OkNvbXBvdW5kKQorICAgICAgICAs
IG1fc3RhdGVtZW50cyhXVEZNb3ZlKHN0YXRlbWVudHMpKQorICAgIHsKKyAgICB9CisKKyAgICBW
ZWN0b3I8VW5pcXVlUmVmPFN0YXRlbWVudD4+JiBzdGF0ZW1lbnRzKCkgeyByZXR1cm4gbV9zdGF0
ZW1lbnRzOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+PiBt
X3N0YXRlbWVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19XR1NMX1NUQVRFTUVOVChDb21wb3VuZFN0YXRlbWVudCwgaXNDb21wb3Vu
ZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1lbnRzL1JldHVy
blN0YXRlbWVudC5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1lbnRzL1JldHVyblN0
YXRlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDZiNTk3
OTNkNGI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1l
bnRzL1JldHVyblN0YXRlbWVudC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiU3RhdGVtZW50LmgiCisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBSZXR1
cm5TdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBSZXR1cm5TdGF0ZW1lbnQoU291cmNlU3BhbiBzcGFuLCBzdGQ6
OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiBleHByZXNzaW9uKQorICAgICAgICA6IFN0YXRlbWVu
dChzcGFuLCBLaW5kOjpSZXR1cm4pCisgICAgICAgICwgbV9leHByZXNzaW9uKFdURk1vdmUoZXhw
cmVzc2lvbikpCisgICAgeworICAgIH0KKworICAgIEV4cHJlc3Npb24qIG1heWJlRXhwcmVzc2lv
bigpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbi5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2V4cHJlc3Npb247Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX1NUQVRFTUVOVChSZXR1
cm5TdGF0ZW1lbnQsIGlzUmV0dXJuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wv
QVNUL1N0cnVjdHVyZURlY2wuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RydWN0dXJlRGVj
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTYzYTk0ZTBlOWZh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdHJ1Y3R1cmVEZWNs
LmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkNvbXBpbGF0
aW9uTWVzc2FnZS5oIgorI2luY2x1ZGUgIkdsb2JhbERlY2wuaCIKKyNpbmNsdWRlICJUeXBlRGVj
bC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKworCituYW1lc3BhY2UgV0dT
TDo6QVNUIHsKKworY2xhc3MgU3RydWN0TWVtYmVyIDogcHVibGljIEFTVE5vZGUgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFN0cnVjdE1lbWJlcihTb3VyY2VT
cGFuIHNwYW4sIFN0cmluZ1ZpZXcgbmFtZSwgVW5pcXVlUmVmPFR5cGVEZWNsPiYmIHR5cGUsIEF0
dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQorICAgICAgICA6IEFTVE5vZGUoc3BhbikKKyAgICAgICAg
LCBtX25hbWUobmFtZSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZXMoV1RGTW92ZShhdHRyaWJ1dGVz
KSkKKyAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKKyAgICB7CisgICAgfQorCisgICAg
Y29uc3QgU3RyaW5nVmlldyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFR5
cGVEZWNsJiB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5n
VmlldyBtX25hbWU7CisgICAgQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CisgICAgVW5pcXVlUmVm
PFR5cGVEZWNsPiBtX3R5cGU7Cit9OworCitjbGFzcyBTdHJ1Y3REZWNsIDogcHVibGljIEdsb2Jh
bERlY2wgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFN0cnVj
dERlY2woU291cmNlU3BhbiBzb3VyY2VTcGFuLCBTdHJpbmdWaWV3IG5hbWUsIFZlY3RvcjxVbmlx
dWVSZWY8U3RydWN0TWVtYmVyPj4mJiBtZW1iZXJzLCBBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykK
KyAgICAgICAgOiBHbG9iYWxEZWNsKHNvdXJjZVNwYW4sIEtpbmQ6OlN0cnVjdCkKKyAgICAgICAg
LCBtX25hbWUobmFtZSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZXMoV1RGTW92ZShhdHRyaWJ1dGVz
KSkKKyAgICAgICAgLCBtX21lbWJlcnMoV1RGTW92ZShtZW1iZXJzKSkKKyAgICB7CisgICAgfQor
CisgICAgY29uc3QgU3RyaW5nVmlldyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQor
ICAgIEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAg
ICBWZWN0b3I8VW5pcXVlUmVmPFN0cnVjdE1lbWJlcj4+JiBtZW1iZXJzKCkgeyByZXR1cm4gbV9t
ZW1iZXJzOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nVmlldyBtX25hbWU7CisgICAgQXR0cmli
dXRlcyBtX2F0dHJpYnV0ZXM7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxTdHJ1Y3RNZW1iZXI+PiBt
X21lbWJlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XR1NMX0dMT0JBTF9ERUNMKFN0cnVjdERlY2wsIGlzU3RydWN0KCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1R5cGVEZWNsLmggYi9Tb3VyY2UvV2ViR1BV
L1dHU0wvQVNUL1R5cGVEZWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwLi45ODM3MGQ5YTczMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wv
QVNUL1R5cGVEZWNsLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKwor
bmFtZXNwYWNlIFdHU0w6OkFTVCB7CisKK2NsYXNzIFR5cGVEZWNsIDogcHVibGljIEFTVE5vZGUg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgZW51bSBjbGFz
cyBLaW5kIDogdWludDhfdCB7CisgICAgICAgIE5hbWVkLAorICAgICAgICBQYXJhbWV0ZXJpemVk
LAorICAgIH07CisKKyAgICBUeXBlRGVjbChTb3VyY2VTcGFuIHNwYW4sIEtpbmQga2luZCkKKyAg
ICAgICAgOiBBU1ROb2RlKHNwYW4pCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeworICAg
IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIGJvb2wg
aXNOYW1lZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpOYW1lZDsgfQorICAgIGJv
b2wgaXNQYXJhbWV0ZXJpemVkKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OlBhcmFt
ZXRlcml6ZWQ7IH0KKworcHJpdmF0ZToKKyAgICBLaW5kIG1fa2luZDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdHU0w6OkFTVAorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9U
WVBFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdHU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdHU0w6OkFTVDo6VHlwZURlY2wmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGlj
YXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1QvVmFyaWFibGVRdWFsaWZpZXIuaCBiL1NvdXJjZS9XZWJHUFUvV0dT
TC9BU1QvVmFyaWFibGVRdWFsaWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLjU2YmJiNzA2ZTgxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUv
V0dTTC9BU1QvVmFyaWFibGVRdWFsaWZpZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisKK25hbWVzcGFjZSBXR1NM
OjpBU1QgeworCitlbnVtIGNsYXNzIFN0b3JhZ2VDbGFzcyA6IHVpbnQ4X3QgeworICAgIEZ1bmN0
aW9uLAorICAgIFByaXZhdGUsCisgICAgV29ya2dyb3VwLAorICAgIFVuaWZvcm0sCisgICAgU3Rv
cmFnZQorfTsKKworZW51bSBjbGFzcyBBY2Nlc3NNb2RlIDogdWludDhfdCB7CisgICAgUmVhZCwK
KyAgICBXcml0ZSwKKyAgICBSZWFkV3JpdGUKK307CisKK2NsYXNzIFZhcmlhYmxlUXVhbGlmaWVy
IDogcHVibGljIEFTVE5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFZhcmlhYmxlUXVhbGlmaWVyKFNvdXJjZVNwYW4gc3BhbiwgU3RvcmFnZUNsYXNzIHN0
b3JhZ2VDbGFzcywgQWNjZXNzTW9kZSBhY2Nlc3NNb2RlKQorICAgICAgICA6IEFTVE5vZGUoc3Bh
bikKKyAgICAgICAgLCBtX3N0b3JhZ2VDbGFzcyhzdG9yYWdlQ2xhc3MpCisgICAgICAgICwgbV9h
Y2Nlc3NNb2RlKGFjY2Vzc01vZGUpCisgICAgeworICAgIH0KKworICAgIFN0b3JhZ2VDbGFzcyBz
dG9yYWdlQ2xhc3MoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VDbGFzczsgfQorICAgIEFjY2Vz
c01vZGUgYWNjZXNzTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzTW9kZTsgfQorCitwcml2
YXRlOgorICAgIFN0b3JhZ2VDbGFzcyBtX3N0b3JhZ2VDbGFzczsKKyAgICBBY2Nlc3NNb2RlIG1f
YWNjZXNzTW9kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkdQVS9XR1NML0FTVE5vZGUuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1ROb2Rl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNWRkZTlhOTJhY2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUTm9kZS5oCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNvdXJjZVNw
YW4uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgV0dTTDo6QVNU
IHsKKworY2xhc3MgQVNUTm9kZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgQVNUTm9kZShTb3VyY2VTcGFuIHNwYW4pCisgICAgICAgIDogbV9zcGFuKHNwYW4p
CisgICAgeworICAgIH0KKworICAgIGNvbnN0IFNvdXJjZVNwYW4mIHNwYW4oKSBjb25zdCB7IHJl
dHVybiBtX3NwYW47IH0KKworcHJpdmF0ZToKKyAgICBTb3VyY2VTcGFuIG1fc3BhbjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NM
L0NvbXBpbGF0aW9uTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQ29tcGlsYXRpb25N
ZXNzYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZhM2Iz
NWUxNzMxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9Db21waWxhdGlv
bk1lc3NhZ2UuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCisKKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdHU0wgeworCit2b2lkIENvbXBpbGF0aW9uTWVz
c2FnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3Nw
YW4ubV9saW5lLCAiOiIsIG1fc3Bhbi5tX2xpbmVPZmZzZXQsICIgbGVuZ3RoOiIsIG1fc3Bhbi5t
X2xlbmd0aCwgbV9tZXNzYWdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkdQVS9XR1NML0NvbXBpbGF0aW9uTWVzc2FnZS5oIGIvU291cmNlL1dlYkdQ
VS9XR1NML0NvbXBpbGF0aW9uTWVzc2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uNmM5NjE1YTRiZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQ
VS9XR1NML0NvbXBpbGF0aW9uTWVzc2FnZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNvdXJjZVNwYW4uaCIKKyNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV0dTTCB7CisKK2NsYXNzIENvbXBpbGF0aW9uTWVzc2FnZSB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ29tcGlsYXRpb25NZXNzYWdlKFN0cmluZyYmIG1l
c3NhZ2UsIFNvdXJjZVNwYW4gc3BhbikKKyAgICAgICAgOiBtX21lc3NhZ2UoV1RGTW92ZShtZXNz
YWdlKSkKKyAgICAgICAgLCBtX3NwYW4oc3BhbikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZyBtX21l
c3NhZ2U7CisgICAgU291cmNlU3BhbiBtX3NwYW47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NM
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAgYi9Tb3VyY2UvV2ViR1BV
L1dHU0wvV0dTTC5jcHAKaW5kZXggOTRmZTM5YWJkNzM0Li5hNTQ2YzY0YTRmNTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmNwcAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wv
V0dTTC5jcHAKQEAgLTI2LDggKzI2LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV0dTTC5oIgogCi0jaW5jbHVkZSAiQVNULmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKKy8vIEFs
bCBvZiB0aGVzZSBhcmUganVzdCB0byBjaGVjayB0aGF0IHRoZXkgY29tcGlsZSwgc2luY2UgZm9y
IG5vdyB0aGV5IGFyZSBub3QgcmVhbGx5IHVzZWQuCisjaW5jbHVkZSAiQVNUL0dsb2JhbFZhcmlh
YmxlRGVjbC5oIgorI2luY2x1ZGUgIkFTVC9TdHJ1Y3R1cmVEZWNsLmgiCisjaW5jbHVkZSAiQVNU
L0Z1bmN0aW9uRGVjbC5oIgorI2luY2x1ZGUgIkFTVC9TaGFkZXJNb2R1bGUuaCIKKyNpbmNsdWRl
ICJBU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50LmgiCisjaW5jbHVkZSAiQVNUL1N0
YXRlbWVudHMvUmV0dXJuU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL0lk
ZW50aWZpZXJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL1R5cGVDb252
ZXJzaW9uLmgiCisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oIgor
I2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9MaXRlcmFsRXhwcmVzc2lvbnMuaCIKIAogbmFtZXNw
YWNlIFdHU0wgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5oIGIvU291
cmNlL1dlYkdQVS9XR1NML1dHU0wuaAppbmRleCA5OWM5ZGU3YTM5YjMuLjEyYmI4YjE2NTUxOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuaAorKysgYi9Tb3VyY2UvV2ViR1BV
L1dHU0wvV0dTTC5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCiAjaW5jbHVkZSA8Y2ludHR5cGVzPgogI2luY2x1ZGUg
PGNzdGRpbnQ+CiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtNDAsMjYgKzQxLDE0IEBAIG5hbWVzcGFj
ZSBXR1NMIHsKIC8vIFN0ZXAgMQogLy8KIAotZW51bSBjbGFzcyBDb21waWxhdGlvbk1lc3NhZ2VU
eXBlIDogdWludDhfdCB7Ci0gICAgRXJyb3IsCi0gICAgV2FybmluZywKLSAgICBJbmZvCi19Owot
Ci1zdHJ1Y3QgQ29tcGlsYXRpb25NZXNzYWdlIHsKLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICB1
aW50NjRfdCBsaW5lTnVtYmVyOwotICAgIHVpbnQ2NF90IGxpbmVQb3NpdGlvbjsKLSAgICB1aW50
NjRfdCBvZmZzZXQ7Ci0gICAgdWludDY0X3QgbGVuZ3RoOwotfTsKLQotY2xhc3MgQVNUOworbmFt
ZXNwYWNlIEFTVCB7CitjbGFzcyBTaGFkZXJNb2R1bGU7Cit9CiAKIHN0cnVjdCBTdWNjZXNzZnVs
Q2hlY2sgewogICAgIH5TdWNjZXNzZnVsQ2hlY2soKTsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25N
ZXNzYWdlPiB3YXJuaW5nczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUPiBhc3Q7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6U2hhZGVyTW9kdWxlPiBhc3Q7CiB9OwogCiBzdHJ1Y3QgRmFpbGVk
Q2hlY2sgewpAQCAtMjA5LDcgKzE5OCw3IEBAIHN0cnVjdCBQcmVwYXJlUmVzdWx0IHsKIAogLy8g
VGhlc2UgYXJlIG5vdCBhbGxvd2VkIHRvIGZhaWwuCiAvLyBBbGwgZmFpbHVyZXMgbXVzdCBoYXZl
IGFscmVhZHkgYmVlbiBjYXVnaHQgaW4gY2hlY2soKS4KLVByZXBhcmVSZXN1bHQgcHJlcGFyZShj
b25zdCBBU1QmLCBjb25zdCBIYXNoTWFwPFN0cmluZywgc3RkOjpvcHRpb25hbDxQaXBlbGluZUxh
eW91dD4+Jik7Ci1QcmVwYXJlUmVzdWx0IHByZXBhcmUoY29uc3QgQVNUJiwgY29uc3QgU3RyaW5n
JiBlbnRyeVBvaW50TmFtZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxQaXBlbGluZUxheW91dD4mKTsK
K1ByZXBhcmVSZXN1bHQgcHJlcGFyZShjb25zdCBBU1Q6OlNoYWRlck1vZHVsZSYsIGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFBpcGVsaW5lTGF5b3V0Pj4mKTsKK1ByZXBhcmVS
ZXN1bHQgcHJlcGFyZShjb25zdCBBU1Q6OlNoYWRlck1vZHVsZSYsIGNvbnN0IFN0cmluZyYgZW50
cnlQb2ludE5hbWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8UGlwZWxpbmVMYXlvdXQ+Jik7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdHU0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDNmNDBjNjM4YmU4My4uMGFjNjc3ZGQ5MDE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2LDYgKzQ2
LDI3IEBACiAJCTMzOEJCMkQyMjdCNkI2M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzhCQjJEMTI3QjZCNjNG
MDBFMDY2QUIgLyogU291cmNlU3Bhbi5oICovOyB9OwogCQkzMzhCQjJENDI3QjZCNjZDMDBFMDY2
QUIgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzOEJCMkQzMjdCNkI2NkMwMEUwNjZBQiAvKiBMZXhlci5oICovOyB9OwogCQkzMzhCQjJE
NjI3QjZCNjg3MDBFMDY2QUIgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzM4QkIyRDUyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNw
cCAqLzsgfTsKKwkJMzNFQTE4NUUyN0JDMTk0RjAwQTFERDUyIC8qIEFTVE5vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODVEMjdCQzE5NEYw
MEExREQ1MiAvKiBBU1ROb2RlLmggKi87IH07CisJCTMzRUExODYwMjdCQzE5ODEwMEExREQ1MiAv
KiBHbG9iYWxEaXJlY3RpdmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMzRUExODVGMjdCQzE5ODEwMEExREQ1MiAvKiBHbG9iYWxEaXJlY3RpdmUuaCAq
LzsgfTsKKwkJMzNFQTE4NjIyN0JDMTlDMTAwQTFERDUyIC8qIEdsb2JhbERlY2wuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODYxMjdCQzE5QzEw
MEExREQ1MiAvKiBHbG9iYWxEZWNsLmggKi87IH07CisJCTMzRUExODY0MjdCQzFBMUQwMEExREQ1
MiAvKiBHbG9iYWxWYXJpYWJsZURlY2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMzRUExODYzMjdCQzFBMUQwMEExREQ1MiAvKiBHbG9iYWxWYXJpYWJs
ZURlY2wuaCAqLzsgfTsKKwkJMzNFQTE4NjYyN0JDMUFENTAwQTFERDUyIC8qIENvbXBpbGF0aW9u
TWVzc2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzNFQTE4NjUyN0JDMUFENTAwQTFERDUyIC8qIENvbXBpbGF0aW9uTWVzc2FnZS5oICovOyB9Owor
CQkzM0VBMTg2ODI3QkMxQjE0MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODY3MjdCQzFC
MTQwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuY3BwICovOyB9OworCQkzM0VBMTg2QTI3
QkMxQkU2MDBBMURENTIgLyogQXR0cmlidXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2OTI3QkMxQkU2MDBBMURENTIgLyogQXR0cmlidXRl
LmggKi87IH07CisJCTMzRUExODZDMjdCQzFDQkMwMEExREQ1MiAvKiBFeHByZXNzaW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2QjI3QkMx
Q0JDMDBBMURENTIgLyogRXhwcmVzc2lvbi5oICovOyB9OworCQkzM0VBMTg2RTI3QkMxRDRDMDBB
MURENTIgLyogVHlwZURlY2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMzRUExODZEMjdCQzFENEMwMEExREQ1MiAvKiBUeXBlRGVjbC5oICovOyB9Owor
CQkzM0VBMTg3MDI3QkMxRThBMDBBMURENTIgLyogU2hhZGVyTW9kdWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2RjI3QkMxRThBMDBBMURE
NTIgLyogU2hhZGVyTW9kdWxlLmggKi87IH07CisJCTMzRUExODcyMjdCQzFGRTEwMEExREQ1MiAv
KiBWYXJpYWJsZVF1YWxpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzNFQTE4NzEyN0JDMUZFMTAwQTFERDUyIC8qIFZhcmlhYmxlUXVhbGlmaWVy
LmggKi87IH07CisJCTMzRUExODc0MjdCQzIwNDkwMEExREQ1MiAvKiBTdHJ1Y3R1cmVEZWNsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg3MzI3
QkMyMDQ5MDBBMURENTIgLyogU3RydWN0dXJlRGVjbC5oICovOyB9OworCQkzM0VBMTg3NjI3QkMy
MTZCMDBBMURENTIgLyogRnVuY3Rpb25EZWNsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg3NTI3QkMyMTZCMDBBMURENTIgLyogRnVuY3Rpb25E
ZWNsLmggKi87IH07CisJCTMzRUExODc5MjdCQzIyQUEwMEExREQ1MiAvKiBTdGF0ZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODc4MjdC
QzIyQUEwMEExREQ1MiAvKiBTdGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzNFQTE4N0IyN0JDMjMwRTAw
QTFERDUyIC8qIENvbXBvdW5kU3RhdGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg3QTI3QkMyMzBFMDBBMURENTIgLyogQ29tcG91bmRT
dGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzNFQTE4N0UyN0JDMjQ5MDAwQTFERDUyIC8qIFJldHVyblN0
YXRlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzNFQTE4N0QyN0JDMjQ5MDAwQTFERDUyIC8qIFJldHVyblN0YXRlbWVudC5oICovOyB9OworCQkz
M0VBMTg4MDI3QkMyNEUyMDBBMURENTIgLyogQXNzaWdubWVudFN0YXRlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4N0YyN0JDMjRFMjAw
QTFERDUyIC8qIEFzc2lnbm1lbnRTdGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzNFQTE4ODIyN0JDMjVE
MDAwQTFERDUyIC8qIElkZW50aWZpZXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg4MTI3QkMyNUQwMDBBMURENTIgLyogSWRl
bnRpZmllckV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMzNFQTE4ODQyN0JDMjY4NjAwQTFERDUyIC8q
IFN0cnVjdHVyZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzNFQTE4ODMyN0JDMjY4NjAwQTFERDUyIC8qIFN0cnVjdHVyZUFjY2Vzcy5oICov
OyB9OworCQkzM0VBMTg4NjI3QkMyNkRGMDBBMURENTIgLyogVHlwZUNvbnZlcnNpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODg1MjdCQzI2
REYwMEExREQ1MiAvKiBUeXBlQ29udmVyc2lvbi5oICovOyB9OworCQkzM0VBMTg4ODI3QkMzNjFF
MDBBMURENTIgLyogTGl0ZXJhbEV4cHJlc3Npb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg4NzI3QkMzNjFFMDBBMURENTIgLyogTGl0ZXJh
bEV4cHJlc3Npb25zLmggKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KQEAgLTEzMSw3ICsxNTIs
NiBAQAogCQkxQ0VCRDgwMTI3MTZCOUFCMDBBNTI1NEQgLyogU0RLVmFyaWFudC54Y2NvbmZpZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBTREtWYXJpYW50LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXR1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MDQy
NzE2QkZBQjAwQTUyNTREIC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25maWcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUNFQkQ4MDcyNzE2QzJDMDAwQTUyNTREIC8qIEFT
VC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBU1QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUNFQkQ4MEEyNzE2QzM2QzAwQTUyNTREIC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25m
aWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MEIyNzE2QzM3OTAwQTUy
NTREIC8qIEV4cG9ydE1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHBvcnRNYWNyb3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MEQyNzE2QzNEODAwQTUyNTREIC8qIFNo
YWRlck1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkZXJNb2R1bGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NSw2ICsxNjUsMjcgQEAKIAkJMzM4QkIyRDEyN0I2QjYzRjAw
RTA2NkFCIC8qIFNvdXJjZVNwYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlU3Bhbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIgLyogTGV4
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzM4QkIyRDUyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4NUQyN0JD
MTk0RjAwQTFERDUyIC8qIEFTVE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQVNUTm9kZS5oOyBwYXRo
ID0gV0dTTC9BU1ROb2RlLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJMzNFQTE4
NUYyN0JDMTk4MTAwQTFERDUyIC8qIEdsb2JhbERpcmVjdGl2ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
bG9iYWxEaXJlY3RpdmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4NjEy
N0JDMTlDMTAwQTFERDUyIC8qIEdsb2JhbERlY2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2xvYmFsRGVj
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg2MzI3QkMxQTFEMDBBMURE
NTIgLyogR2xvYmFsVmFyaWFibGVEZWNsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbFZhcmlhYmxl
RGVjbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg2NTI3QkMxQUQ1MDBB
MURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGF0aW9u
TWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg2NzI3QkMxQjE0
MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
bXBpbGF0aW9uTWVzc2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUEx
ODY5MjdCQzFCRTYwMEExREQ1MiAvKiBBdHRyaWJ1dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXR0cmli
dXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODZCMjdCQzFDQkMwMEEx
REQ1MiAvKiBFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4NkQyN0JDMUQ0QzAwQTFERDUyIC8qIFR5cGVE
ZWNsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVEZWNsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMzRUExODZGMjdCQzFFOEEwMEExREQ1MiAvKiBTaGFkZXJNb2R1bGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2hhZGVyTW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMz
RUExODcxMjdCQzFGRTEwMEExREQ1MiAvKiBWYXJpYWJsZVF1YWxpZmllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWYXJpYWJsZVF1YWxpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
M0VBMTg3MzI3QkMyMDQ5MDBBMURENTIgLyogU3RydWN0dXJlRGVjbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJ1Y3R1cmVEZWNsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODc1
MjdCQzIxNkIwMEExREQ1MiAvKiBGdW5jdGlvbkRlY2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rp
b25EZWNsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODc4MjdCQzIyQUEw
MEExREQ1MiAvKiBTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGVtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODdBMjdCQzIzMEUwMEExREQ1MiAvKiBDb21w
b3VuZFN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wb3VuZFN0YXRlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg3RDI3QkMyNDkwMDBBMURENTIgLyogUmV0
dXJuU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJldHVyblN0YXRlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg3RjI3QkMyNEUyMDBBMURENTIgLyogQXNzaWdu
bWVudFN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3NpZ25tZW50U3RhdGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODgxMjdCQzI1RDAwMEExREQ1MiAvKiBJ
ZGVudGlmaWVyRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJZGVudGlmaWVyRXhwcmVzc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg4MzI3QkMyNjg2MDBBMURE
NTIgLyogU3RydWN0dXJlQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUFjY2Vzcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg4NTI3QkMyNkRGMDBBMURENTIg
LyogVHlwZUNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUNvbnZlcnNpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4ODcyN0JDMzYxRTAwQTFERDUyIC8qIExp
dGVyYWxFeHByZXNzaW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXRlcmFsRXhwcmVzc2lvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rp
b24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAt
MjY5LDggKzMxMCwxMCBAQAogCQkxQ0VCRDdGNjI3MTZCMzMxMDBBNTI1NEQgLyogV0dTTCAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUNFQkQ4MDcyNzE2
QzJDMDAwQTUyNTREIC8qIEFTVC5oICovLAorCQkJCTMzRUExODVDMjdCQzE5M0QwMEExREQ1MiAv
KiBBU1QgKi8sCiAJCQkJMUNFQkQ4MDQyNzE2QkZBQjAwQTUyNTREIC8qIGNvbmZpZy5oICovLAor
CQkJCTMzRUExODY1MjdCQzFBRDUwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuaCAqLywK
KwkJCQkzM0VBMTg2NzI3QkMxQjE0MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCAq
LywKIAkJCQkzMzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCAqLywKIAkJCQkzMzhC
QjJENTI3QjZCNjg3MDBFMDY2QUIgLyogTGV4ZXIuY3BwICovLAogCQkJCTMzOEJCMkQxMjdCNkI2
M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggKi8sCkBAIC0zMTAsNiArMzUzLDQ4IEBACiAJCQlu
YW1lID0gRnJhbWV3b3JrczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTMz
RUExODVDMjdCQzE5M0QwMEExREQ1MiAvKiBBU1QgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTMzRUExODVEMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2Rl
LmggKi8sCisJCQkJMzNFQTE4NjkyN0JDMUJFNjAwQTFERDUyIC8qIEF0dHJpYnV0ZS5oICovLAor
CQkJCTMzRUExODZCMjdCQzFDQkMwMEExREQ1MiAvKiBFeHByZXNzaW9uLmggKi8sCisJCQkJMzNF
QTE4N0MyN0JDMjQ2MDAwQTFERDUyIC8qIEV4cHJlc3Npb25zICovLAorCQkJCTMzRUExODc1MjdC
QzIxNkIwMEExREQ1MiAvKiBGdW5jdGlvbkRlY2wuaCAqLywKKwkJCQkzM0VBMTg1RjI3QkMxOTgx
MDBBMURENTIgLyogR2xvYmFsRGlyZWN0aXZlLmggKi8sCisJCQkJMzNFQTE4NjEyN0JDMTlDMTAw
QTFERDUyIC8qIEdsb2JhbERlY2wuaCAqLywKKwkJCQkzM0VBMTg2MzI3QkMxQTFEMDBBMURENTIg
LyogR2xvYmFsVmFyaWFibGVEZWNsLmggKi8sCisJCQkJMzNFQTE4NkYyN0JDMUU4QTAwQTFERDUy
IC8qIFNoYWRlck1vZHVsZS5oICovLAorCQkJCTMzRUExODczMjdCQzIwNDkwMEExREQ1MiAvKiBT
dHJ1Y3R1cmVEZWNsLmggKi8sCisJCQkJMzNFQTE4NkQyN0JDMUQ0QzAwQTFERDUyIC8qIFR5cGVE
ZWNsLmggKi8sCisJCQkJMzNFQTE4NzEyN0JDMUZFMTAwQTFERDUyIC8qIFZhcmlhYmxlUXVhbGlm
aWVyLmggKi8sCisJCQkJMzNFQTE4NzgyN0JDMjJBQTAwQTFERDUyIC8qIFN0YXRlbWVudC5oICov
LAorCQkJCTMzRUExODc3MjdCQzIyOUEwMEExREQ1MiAvKiBTdGF0ZW1lbnRzICovLAorCQkJKTsK
KwkJCXBhdGggPSBBU1Q7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkzM0VB
MTg3NzI3QkMyMjlBMDBBMURENTIgLyogU3RhdGVtZW50cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMzNFQTE4N0YyN0JDMjRFMjAwQTFERDUyIC8qIEFz
c2lnbm1lbnRTdGF0ZW1lbnQuaCAqLywKKwkJCQkzM0VBMTg3QTI3QkMyMzBFMDBBMURENTIgLyog
Q29tcG91bmRTdGF0ZW1lbnQuaCAqLywKKwkJCQkzM0VBMTg3RDI3QkMyNDkwMDBBMURENTIgLyog
UmV0dXJuU3RhdGVtZW50LmggKi8sCisJCQkpOworCQkJcGF0aCA9IFN0YXRlbWVudHM7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkzM0VBMTg3QzI3QkMyNDYwMDBBMURENTIg
LyogRXhwcmVzc2lvbnMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTMzRUExODgxMjdCQzI1RDAwMEExREQ1MiAvKiBJZGVudGlmaWVyRXhwcmVzc2lvbi5o
ICovLAorCQkJCTMzRUExODgzMjdCQzI2ODYwMEExREQ1MiAvKiBTdHJ1Y3R1cmVBY2Nlc3MuaCAq
LywKKwkJCQkzM0VBMTg4NTI3QkMyNkRGMDBBMURENTIgLyogVHlwZUNvbnZlcnNpb24uaCAqLywK
KwkJCQkzM0VBMTg4NzI3QkMzNjFFMDBBMURENTIgLyogTGl0ZXJhbEV4cHJlc3Npb25zLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IEV4cHJlc3Npb25zOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKIC8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEhlYWRl
cnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTMyNywxMCArNDEyLDMwIEBACiAJCQlpc2EgPSBQ
QlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJ
CQlmaWxlcyA9ICgKKwkJCQkzM0VBMTg3OTI3QkMyMkFBMDBBMURENTIgLyogU3RhdGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg1RTI3QkMxOTRGMDBBMURENTIgLyogQVNUTm9kZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4ODYyN0JDMjZERjAwQTFERDUyIC8qIFR5cGVDb252
ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg2NDI3QkMxQTFEMDBBMURENTIgLyog
R2xvYmFsVmFyaWFibGVEZWNsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg3QjI3QkMyMzBF
MDBBMURENTIgLyogQ29tcG91bmRTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUEx
ODc2MjdCQzIxNkIwMEExREQ1MiAvKiBGdW5jdGlvbkRlY2wuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMzOEJCMkQyMjdCNkI2M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzM0VBMTg2NjI3QkMxQUQ1MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzM0VBMTg3MDI3QkMxRThBMDBBMURENTIgLyogU2hhZGVyTW9kdWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzhCQjJENDI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODg4MjdCQzM2MUUwMEExREQ1MiAvKiBMaXRlcmFs
RXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzOEJCMkNFMjdCNkI2MDIwMEUwNjZB
QiAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4NkMyN0JDMUNCQzAwQTFERDUy
IC8qIEV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFDRUJEN0Y4MjcxNkIzNDQwMEE1
MjU0RCAvKiBXR1NMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg2MjI3QkMxOUMxMDBBMURE
NTIgLyogR2xvYmFsRGVjbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4ODAyN0JDMjRFMjAw
QTFERDUyIC8qIEFzc2lnbm1lbnRTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUEx
ODg0MjdCQzI2ODYwMEExREQ1MiAvKiBTdHJ1Y3R1cmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAor
CQkJCTMzRUExODgyMjdCQzI1RDAwMEExREQ1MiAvKiBJZGVudGlmaWVyRXhwcmVzc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4NjAyN0JDMTk4MTAwQTFERDUyIC8qIEdsb2JhbERpcmVj
dGl2ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4NkUyN0JDMUQ0QzAwQTFERDUyIC8qIFR5
cGVEZWNsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg3NDI3QkMyMDQ5MDBBMURENTIgLyog
U3RydWN0dXJlRGVjbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4N0UyN0JDMjQ5MDAwQTFE
RDUyIC8qIFJldHVyblN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4NkEyN0JD
MUJFNjAwQTFERDUyIC8qIEF0dHJpYnV0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4NzIy
N0JDMUZFMTAwQTFERDUyIC8qIFZhcmlhYmxlUXVhbGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTUxNyw2ICs2MjIsNyBAQAogCQkJCTMzOEJCMkQ2MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQ0VCRDgwMzI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzhCQjJEMDI3QjZCNjFCMDBFMDY2QUIgLyogVG9rZW4u
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzNFQTE4NjgyN0JDMUIxNDAwQTFERDUyIC8qIENvbXBp
bGF0aW9uTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452379</attachid>
            <date>2022-02-17 09:48:16 -0800</date>
            <delta_ts>2022-03-07 16:28:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchAST</filename>
            <type>text/plain</type>
            <size>83761</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggNzMzN2RhZjM1OTg4Li41ZGQ1OTAwZDE5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQ2IEBACisyMDIyLTAyLTE1ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CisKKyAgICAgICAgW1dHU0xdIEFkZCBlbm91Z2ggb2YgdGhlIEFTVCBmb3IgdGhlIHNpbXBs
ZXN0IHNoYWRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNjY1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZXNlIEFTVCBub2RlcyBhcmUganVzdCB0aG9zZSByZXF1aXJlZCBmb3IgdGhlIG1vc3Qg
dHJpdmlhbCBncmFwaGljcyBhbmQgY29tcHV0ZSBzaGFkZXJzLgorICAgICAgICBJIHVzZWQgdGhl
IG1hY2hpbmVyeSBmcm9tIHd0Zi9UeXBlQ2FzdHMgYXMgc3VnZ2VzdGVkIGJ5IE15bGVzIGluIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMyNzYuCisgICAgICAgIEN1
cnJlbnRseSBhbGwgb2YgdGhlIGNvZGUgZm9yIHRoZXNlIG5vZGVzIGlzIGluY2x1ZGVkIGluIFdH
U0wuY3BwIHRvIHZlcmlmeSB0aGF0IHRoZXkgYnVpbGQuIFRoaXMgd2lsbCBiZSByZW1vdmVkIGlu
IHRoZSBwYXJzZXIgcGF0Y2guCisKKyAgICAgICAgQXR0cmlidXRlcyBhcmUgYWRkZWQgaW4gc2V0
QXR0cmlidXRlcyBtZXRob2RzIGluc3RlYWQgb2YgYmVpbmcgcGFydCBvZiB0aGUgY29uc3RydWN0
b3JzLCBiZWNhdXNlIGl0IGNhbiBmYWlsLCBhbmQgcmV0dXJuaW5nIGFuIGVycm9yIGZyb20gYSBj
b25zdHJ1Y3RvciBpcyB0cmlja3kuCisKKyAgICAgICAgKiBXR1NML0FTVC9BdHRyaWJ1dGUuaDog
QWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkF0dHJpYnV0ZTo6QXR0cmlidXRlKToKKyAgICAg
ICAgKFdHU0w6OkFTVDo6QXR0cmlidXRlOjpraW5kIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6QXR0cmlidXRlOjppc0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXR0cmli
dXRlOjppc0dyb3VwIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXR0cmlidXRlOjppc0Jp
bmRpbmcgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzU3RhZ2UgY29u
c3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzTG9jYXRpb24gY29uc3QpOgor
ICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzQnVpbHRpbiBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OkJsb2NrQXR0cmlidXRlOjpCbG9ja0F0dHJpYnV0ZSk6CisgICAgICAgIChX
R1NMOjpBU1Q6Okdyb3VwQXR0cmlidXRlOjpHcm91cEF0dHJpYnV0ZSk6CisgICAgICAgIChXR1NM
OjpBU1Q6Okdyb3VwQXR0cmlidXRlOjpncm91cCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6
OkJpbmRpbmdBdHRyaWJ1dGU6OkJpbmRpbmdBdHRyaWJ1dGUpOgorICAgICAgICAoV0dTTDo6QVNU
OjpCaW5kaW5nQXR0cmlidXRlOjpiaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6
U3RhZ2VBdHRyaWJ1dGU6OlN0YWdlQXR0cmlidXRlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3Rh
Z2VBdHRyaWJ1dGU6OnN0YWdlIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QnVpbHRpbkF0
dHJpYnV0ZTo6QnVpbHRpbkF0dHJpYnV0ZSk6CisgICAgICAgIChXR1NMOjpBU1Q6OkJ1aWx0aW5B
dHRyaWJ1dGU6Om5hbWUgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpMb2NhdGlvbkF0dHJp
YnV0ZTo6TG9jYXRpb25BdHRyaWJ1dGUpOgorICAgICAgICAoV0dTTDo6QVNUOjpMb2NhdGlvbkF0
dHJpYnV0ZTo6bG9jYXRpb24gY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL0V4cHJlc3Npb24u
aDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkV4cHJlc3Npb246OkV4cHJlc3Npb24pOgor
ICAgICAgICAoV0dTTDo6QVNUOjpFeHByZXNzaW9uOjpraW5kIGNvbnN0KToKKyAgICAgICAgKFdH
U0w6OkFTVDo6RXhwcmVzc2lvbjo6aXNCb29sTGl0ZXJhbCBjb25zdCk6CisgICAgICAgIChXR1NM
OjpBU1Q6OkV4cHJlc3Npb246OmlzSW50MzJMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNVSW50MzJMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNGbG9hdDMyTGl0ZXJhbCBjb25zdCk6CisgICAgICAgIChXR1NM
OjpBU1Q6OkV4cHJlc3Npb246OmlzSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6OkV4cHJlc3Npb246OmlzU3RydWN0dXJlQWNjZXNzIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNUeXBlQ29udmVyc2lvbiBjb25zdCk6CisgICAgICAgICogV0dT
TC9BU1QvRXhwcmVzc2lvbnMvSWRlbnRpZmllckV4cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAg
IChXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uOjpJZGVudGlmaWVyRXhwcmVzc2lvbik6
CisgICAgICAgIChXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uOjppZGVudGlmaWVyIGNv
bnN0KToKKyAgICAgICAgKiBXR1NML0FTVC9FeHByZXNzaW9ucy9MaXRlcmFsRXhwcmVzc2lvbnMu
aDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkJvb2xMaXRlcmFsOjpCb29sTGl0ZXJhbCk6
CisgICAgICAgIChXR1NMOjpBU1Q6OkJvb2xMaXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OkludDMyTGl0ZXJhbDo6SW50MzJMaXRlcmFsKToKKyAgICAgICAgKFdHU0w6
OkFTVDo6SW50MzJMaXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlVp
bnQzMkxpdGVyYWw6OlVpbnQzMkxpdGVyYWwpOgorICAgICAgICAoV0dTTDo6QVNUOjpVaW50MzJM
aXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZsb2F0MzJMaXRlcmFs
OjpGbG9hdDMyTGl0ZXJhbCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZsb2F0MzJMaXRlcmFsOjp2
YWx1ZSBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNj
ZXNzLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpTdHJ1Y3R1cmVBY2Nlc3M6OlN0cnVj
dHVyZUFjY2Vzcyk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdHVyZUFjY2Vzczo6YmFzZSk6
CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdHVyZUFjY2Vzczo6ZmllbGROYW1lIGNvbnN0KToK
KyAgICAgICAgKiBXR1NML0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdHU0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OlR5cGVDb252ZXJzaW9uKToKKyAg
ICAgICAgKFdHU0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OnR5cGVEZWNsKToKKyAgICAgICAgKFdH
U0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OmFyZ3VtZW50cyk6CisgICAgICAgICogV0dTTC9BU1Qv
RnVuY3Rpb25EZWNsLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpQYXJhbWV0ZXI6OlBh
cmFtZXRlcik6CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6c2V0QXR0cmlidXRlcyk6
CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6YnVpbHRpbiBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6bG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV0dTTDo6
QVNUOjpQYXJhbWV0ZXI6Om5hbWUgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpQYXJhbWV0
ZXI6OnR5cGUpOgorICAgICAgICAoV0dTTDo6QVNUOjpGdW5jdGlvbkRlY2w6OkZ1bmN0aW9uRGVj
bCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6c2V0QXR0cmlidXRlcyk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6c2V0UmV0dXJuQXR0cmlidXRlcyk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6ZW50cnlQb2ludFN0YWdlIGNvbnN0KToK
KyAgICAgICAgKFdHU0w6OkFTVDo6RnVuY3Rpb25EZWNsOjpuYW1lIGNvbnN0KToKKyAgICAgICAg
KFdHU0w6OkFTVDo6RnVuY3Rpb25EZWNsOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKFdHU0w6OkFT
VDo6RnVuY3Rpb25EZWNsOjpyZXR1cm5CdWlsdGluIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6RnVuY3Rpb25EZWNsOjpyZXR1cm5Mb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6OkZ1bmN0aW9uRGVjbDo6bWF5YmVSZXR1cm5UeXBlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6
RnVuY3Rpb25EZWNsOjpib2R5KToKKyAgICAgICAgKiBXR1NML0FTVC9HbG9iYWxEZWNsLmg6IEFk
ZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxEZWNsOjpHbG9iYWxEZWNsKToKKyAgICAg
ICAgKFdHU0w6OkFTVDo6R2xvYmFsRGVjbDo6a2luZCBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6Okdsb2JhbERlY2w6OmlzR2xvYmFsVmFyaWFibGUgY29uc3QpOgorICAgICAgICAoV0dTTDo6
QVNUOjpHbG9iYWxEZWNsOjppc1N0cnVjdCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okds
b2JhbERlY2w6OmlzRnVuY3Rpb24gY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL0dsb2JhbERp
cmVjdGl2ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsRGlyZWN0aXZlOjpu
YW1lIGNvbnN0KToKKyAgICAgICAgKiBXR1NML0FTVC9HbG9iYWxWYXJpYWJsZURlY2wuaDogQWRk
ZWQuCisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6R2xvYmFsVmFyaWFi
bGVEZWNsKToKKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsVmFyaWFibGVEZWNsOjpzZXRBdHRy
aWJ1dGVzKToKKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsVmFyaWFibGVEZWNsOjpncm91cCBj
b25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6YmluZGluZyBj
b25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6bmFtZSBjb25z
dCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6bWF5YmVRdWFsaWZp
ZXIpOgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxWYXJpYWJsZURlY2w6Om1heWJlVHlwZURl
Y2wpOgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxWYXJpYWJsZURlY2w6Om1heWJlSW5pdGlh
bGl6ZXIpOgorICAgICAgICAqIFdHU0wvQVNUL1NoYWRlci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkdQVS9XR1NML0FTVC5oLgorICAgICAgICAqIFdHU0wvQVNUL1N0YXRlbWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6U3RhdGVtZW50OjpTdGF0ZW1lbnQpOgorICAgICAgICAo
V0dTTDo6QVNUOjpTdGF0ZW1lbnQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpT
dGF0ZW1lbnQ6OmlzQ29tcG91bmQgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpTdGF0ZW1l
bnQ6OmlzUmV0dXJuIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RhdGVtZW50Ojppc0Fz
c2lnbm1lbnQgY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL1N0YXRlbWVudHMvQXNzaWdubWVu
dFN0YXRlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6QXNzaWdubWVudFN0YXRl
bWVudDo6QXNzaWdubWVudFN0YXRlbWVudCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkFzc2lnbm1l
bnRTdGF0ZW1lbnQ6Om1heWJlTGhzKToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXNzaWdubWVudFN0
YXRlbWVudDo6cmhzKToKKyAgICAgICAgKiBXR1NML0FTVC9TdGF0ZW1lbnRzL1JldHVyblN0YXRl
bWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6UmV0dXJuU3RhdGVtZW50OjpSZXR1
cm5TdGF0ZW1lbnQpOgorICAgICAgICAoV0dTTDo6QVNUOjpSZXR1cm5TdGF0ZW1lbnQ6Om1heWJl
RXhwcmVzc2lvbik6CisgICAgICAgICogV0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oOiBBZGRlZC4K
KyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0TWVtYmVyOjpTdHJ1Y3RNZW1iZXIpOgorICAgICAg
ICAoV0dTTDo6QVNUOjpTdHJ1Y3RNZW1iZXI6OnNldEF0dHJpYnV0ZXMpOgorICAgICAgICAoV0dT
TDo6QVNUOjpTdHJ1Y3RNZW1iZXI6OmJ1aWx0aW4gY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNU
OjpTdHJ1Y3RNZW1iZXI6OmxvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3Ry
dWN0TWVtYmVyOjpuYW1lIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0TWVtYmVy
Ojp0eXBlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0RGVjbDo6U3RydWN0RGVjbCk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdERlY2w6OnNldEF0dHJpYnV0ZXMpOgorICAgICAgICAo
V0dTTDo6QVNUOjpTdHJ1Y3REZWNsOjppc0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6U3RydWN0RGVjbDo6bmFtZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdERl
Y2w6Om1lbWJlcnMpOgorICAgICAgICAqIFdHU0wvQVNUL1R5cGVEZWNsLmg6IEFkZGVkLgorICAg
ICAgICAoV0dTTDo6QVNUOjpUeXBlRGVjbDo6VHlwZURlY2wpOgorICAgICAgICAoV0dTTDo6QVNU
OjpUeXBlRGVjbDo6a2luZCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlR5cGVEZWNsOjpp
c05hbWVkIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6VHlwZURlY2w6OmlzUGFyYW1ldGVy
aXplZCBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvVmFyaWFibGVRdWFsaWZpZXIuaDogQWRk
ZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OlZhcmlhYmxlUXVhbGlmaWVyOjpWYXJpYWJsZVF1YWxp
Zmllcik6CisgICAgICAgIChXR1NMOjpBU1Q6OlZhcmlhYmxlUXVhbGlmaWVyOjpzdG9yYWdlQ2xh
c3MgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpWYXJpYWJsZVF1YWxpZmllcjo6YWNjZXNz
TW9kZSBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1ROb2RlLmg6IEFkZGVkLgorICAgICAgICAo
V0dTTDo6QVNUOjpBU1ROb2RlOjpBU1ROb2RlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6QVNUTm9k
ZTo6c3BhbiBjb25zdCk6CisgICAgICAgICogV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdHU0w6OkNvbXBpbGF0aW9uTWVzc2FnZTo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuaDogQWRkZWQuCisgICAgICAgIChXR1NM
OjpDb21waWxhdGlvbk1lc3NhZ2U6OkNvbXBpbGF0aW9uTWVzc2FnZSk6CisgICAgICAgICogV0dT
TC9XR1NMLmNwcDoKKyAgICAgICAgKiBXR1NML1dHU0wuaDoKKyAgICAgICAgKiBXZWJHUFUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMi0wMi0xNCAgUm9iaW4gTW9yaXNzZXQgIDxy
bW9yaXNzZXRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXR1NMXSBJbXBsZW1lbnQgZW5vdWdoIG9m
IHRoZSBsZXhlciBmb3IgdGhlIHNpbXBsZXN0IHNoYWRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJHUFUvV0dTTC9BU1QuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggODFjM2E0MDRmZDVkLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkdQVS9XR1NML0FTVC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi1u
YW1lc3BhY2UgV0dTTCB7Ci0KLWNsYXNzIEFTVCB7Ci0KLX07Ci0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvQXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0F0dHJpYnV0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2Uy
MGFmNzI1YjA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9BdHRy
aWJ1dGUuaApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKyNp
bmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgV0dTTDo6QVNUIHsKKworY2xhc3MgQXR0cmlidXRlIDogcHVibGljIEFTVE5vZGUgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgS2lu
ZCB7CisgICAgICAgIEJsb2NrLAorICAgICAgICBHcm91cCwKKyAgICAgICAgQmluZGluZywKKyAg
ICAgICAgU3RhZ2UsCisgICAgICAgIExvY2F0aW9uLAorICAgICAgICBCdWlsdGluLAorICAgIH07
CisKKyAgICBBdHRyaWJ1dGUoU291cmNlU3BhbiBzcGFuKQorICAgICAgICA6IEFTVE5vZGUoc3Bh
bikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+QXR0cmlidXRlKCkge307CisKKyAgICB2
aXJ0dWFsIEtpbmQga2luZCgpIGNvbnN0ID0gMCA7CisgICAgYm9vbCBpc0Jsb2NrKCkgY29uc3Qg
eyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkJsb2NrOyB9CisgICAgYm9vbCBpc0dyb3VwKCkgY29u
c3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6Okdyb3VwOyB9CisgICAgYm9vbCBpc0JpbmRpbmco
KSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6QmluZGluZzsgfQorICAgIGJvb2wgaXNT
dGFnZSgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpTdGFnZTsgfQorICAgIGJvb2wg
aXNMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpMb2NhdGlvbjsgfQor
ICAgIGJvb2wgaXNCdWlsdGluKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkJ1aWx0
aW47IH0KK307CisKK2NsYXNzIEJsb2NrQXR0cmlidXRlIGZpbmFsIDogcHVibGljIEF0dHJpYnV0
ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQmxvY2tBdHRy
aWJ1dGUoU291cmNlU3BhbiBzcGFuKQorICAgICAgICA6IEF0dHJpYnV0ZShzcGFuKQorICAgIHsK
KyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLaW5kOjpC
bG9jazsgfQorfTsKKworY2xhc3MgR3JvdXBBdHRyaWJ1dGUgZmluYWwgOiBwdWJsaWMgQXR0cmli
dXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHcm91cEF0
dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4sIHVuc2lnbmVkIGdyb3VwKQorICAgICAgICA6IEF0dHJp
YnV0ZShzcGFuKQorICAgICAgICAsIG1fdmFsdWUoZ3JvdXApCisgICAgeworICAgIH0KKworICAg
IEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6Okdyb3VwOyB9CisgICAg
dW5zaWduZWQgZ3JvdXAoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6Cisg
ICAgdW5zaWduZWQgbV92YWx1ZTsKK307CisKK2NsYXNzIEJpbmRpbmdBdHRyaWJ1dGUgZmluYWwg
OiBwdWJsaWMgQXR0cmlidXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBCaW5kaW5nQXR0cmlidXRlKFNvdXJjZVNwYW4gc3BhbiwgdW5zaWduZWQgYmluZGlu
ZykKKyAgICAgICAgOiBBdHRyaWJ1dGUoc3BhbikKKyAgICAgICAgLCBtX3ZhbHVlKGJpbmRpbmcp
CisgICAgeworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IEtpbmQ6OkJpbmRpbmc7IH0KKyAgICB1bnNpZ25lZCBiaW5kaW5nKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fdmFsdWU7Cit9OworCitjbGFz
cyBTdGFnZUF0dHJpYnV0ZSBmaW5hbCA6IHB1YmxpYyBBdHRyaWJ1dGUgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgU3RhZ2UgOiB1aW50OF90
IHsKKyAgICAgICAgQ29tcHV0ZSwKKyAgICAgICAgVmVydGV4LAorICAgICAgICBGcmFnbWVudAor
ICAgIH07CisKKyAgICBTdGFnZUF0dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4sIFN0YWdlIHN0YWdl
KQorICAgICAgICA6IEF0dHJpYnV0ZShzcGFuKQorICAgICAgICAsIG1fc3RhZ2Uoc3RhZ2UpCisg
ICAgeworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtp
bmQ6OlN0YWdlOyB9CisgICAgU3RhZ2Ugc3RhZ2UoKSBjb25zdCB7IHJldHVybiBtX3N0YWdlOyB9
CisKK3ByaXZhdGU6CisgICAgU3RhZ2UgbV9zdGFnZTsKK307CisKK2NsYXNzIEJ1aWx0aW5BdHRy
aWJ1dGUgZmluYWwgOiBwdWJsaWMgQXR0cmlidXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBCdWlsdGluQXR0cmlidXRlKFNvdXJjZVNwYW4gc3BhbiwgU3Ry
aW5nVmlldyBuYW1lKQorICAgICAgICA6IEF0dHJpYnV0ZShzcGFuKQorICAgICAgICAsIG1fbmFt
ZShuYW1lKQorICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBLaW5kOjpCdWlsdGluOyB9CisgICAgY29uc3QgU3RyaW5nVmlldyYgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZ1ZpZXcgbV9uYW1l
OworfTsKKworY2xhc3MgTG9jYXRpb25BdHRyaWJ1dGUgZmluYWwgOiBwdWJsaWMgQXR0cmlidXRl
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBMb2NhdGlvbkF0
dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4sIHVuc2lnbmVkIHZhbHVlKQorICAgICAgICA6IEF0dHJp
YnV0ZShzcGFuKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAg
IEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6OkxvY2F0aW9uOyB9Cisg
ICAgdW5zaWduZWQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3ByaXZh
dGU6CisgICAgdW5zaWduZWQgbV92YWx1ZTsKK307CisKK3VzaW5nIEF0dHJpYnV0ZXMgPSBWZWN0
b3I8VW5pcXVlUmVmPEF0dHJpYnV0ZT4sIDI+OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QK
KworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKFRvVmFsdWVU
eXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdHU0w6
OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdH
U0w6OkFTVDo6QXR0cmlidXRlJiBhdHRyKSB7IHJldHVybiBhdHRyLnByZWRpY2F0ZTsgfSBcCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dT
TF9BVFRSSUJVVEUoQmxvY2tBdHRyaWJ1dGUsIGlzQmxvY2soKSkKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0dTTF9BVFRSSUJVVEUoR3JvdXBBdHRyaWJ1dGUsIGlzR3JvdXAoKSkKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfV0dTTF9BVFRSSUJVVEUoQmluZGluZ0F0dHJpYnV0ZSwgaXNCaW5kaW5n
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKFN0YWdlQXR0cmlidXRl
LCBpc1N0YWdlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKExvY2F0
aW9uQXR0cmlidXRlLCBpc0xvY2F0aW9uKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xf
QVRUUklCVVRFKEJ1aWx0aW5BdHRyaWJ1dGUsIGlzQnVpbHRpbigpKQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
Yzg2YjA4YjI5YmQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9F
eHByZXNzaW9uLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKworbmFt
ZXNwYWNlIFdHU0w6OkFTVCB7CisKK2NsYXNzIEV4cHJlc3Npb24gOiBwdWJsaWMgQVNUTm9kZSB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBL
aW5kIHsKKyAgICAgICAgQm9vbExpdGVyYWwsCisgICAgICAgIEludDMyTGl0ZXJhbCwKKyAgICAg
ICAgVWludDMyTGl0ZXJhbCwKKyAgICAgICAgRmxvYXQzMkxpdGVyYWwsCisgICAgICAgIElkZW50
aWZpZXIsCisgICAgICAgIFN0cnVjdHVyZUFjY2VzcywKKyAgICAgICAgVHlwZUNvbnZlcnNpb24s
CisgICAgfTsKKworICAgIEV4cHJlc3Npb24oU291cmNlU3BhbiBzcGFuKQorICAgICAgICA6IEFT
VE5vZGUoc3BhbikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RXhwcmVzc2lvbigpIHt9
CisKKyAgICB2aXJ0dWFsIEtpbmQga2luZCgpIGNvbnN0ICA9IDA7CisgICAgYm9vbCBpc0Jvb2xM
aXRlcmFsKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkJvb2xMaXRlcmFsOyB9Cisg
ICAgYm9vbCBpc0ludDMyTGl0ZXJhbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpJ
bnQzMkxpdGVyYWw7IH0KKyAgICBib29sIGlzVUludDMyTGl0ZXJhbCgpIGNvbnN0IHsgcmV0dXJu
IGtpbmQoKSA9PSBLaW5kOjpVaW50MzJMaXRlcmFsOyB9CisgICAgYm9vbCBpc0Zsb2F0MzJMaXRl
cmFsKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkZsb2F0MzJMaXRlcmFsOyB9Cisg
ICAgYm9vbCBpc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6SWRl
bnRpZmllcjsgfQorICAgIGJvb2wgaXNTdHJ1Y3R1cmVBY2Nlc3MoKSBjb25zdCB7IHJldHVybiBr
aW5kKCkgPT0gS2luZDo6U3RydWN0dXJlQWNjZXNzOyB9CisgICAgYm9vbCBpc1R5cGVDb252ZXJz
aW9uKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OlR5cGVDb252ZXJzaW9uOyB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dHU0xfRVhQUkVTU0lPTihUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXR1NMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAor
ICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXR1NMOjpBU1Q6OkV4cHJlc3Npb24mIGV4cHJl
c3Npb24pIHsgcmV0dXJuIGV4cHJlc3Npb24ucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVz
c2lvbnMvSWRlbnRpZmllckV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhw
cmVzc2lvbnMvSWRlbnRpZmllckV4cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjhhYjcyZDkwM2E0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvSWRlbnRpZmllckV4cHJlc3Npb24uaApAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1lc3BhY2UgV0dT
TDo6QVNUIHsKKworY2xhc3MgSWRlbnRpZmllckV4cHJlc3Npb24gZmluYWwgOiBwdWJsaWMgRXhw
cmVzc2lvbiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSWRl
bnRpZmllckV4cHJlc3Npb24oU291cmNlU3BhbiBzcGFuLCBTdHJpbmdWaWV3IGlkZW50aWZpZXIp
CisgICAgICAgIDogRXhwcmVzc2lvbihzcGFuKQorICAgICAgICAsIG1faWRlbnRpZmllcihpZGVu
dGlmaWVyKQorICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBLaW5kOjpJZGVudGlmaWVyOyB9CisgICAgY29uc3QgU3RyaW5nVmlldyYgaWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCitwcml2YXRlOgorICAgIFN0
cmluZ1ZpZXcgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9FWFBSRVNTSU9OKElkZW50aWZpZXJFeHByZXNz
aW9uLCBpc0lkZW50aWZpZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1Qv
RXhwcmVzc2lvbnMvTGl0ZXJhbEV4cHJlc3Npb25zLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0V4cHJlc3Npb25zL0xpdGVyYWxFeHByZXNzaW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMC4uMWRlYzc2YjZlOGRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9MaXRlcmFsRXhwcmVzc2lvbnMuaApAQCAtMCww
ICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXR1NMOjpB
U1QgeworCitjbGFzcyBCb29sTGl0ZXJhbCBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCb29sTGl0ZXJhbChTb3Vy
Y2VTcGFuIHNwYW4sIGJvb2wgdmFsdWUpCisgICAgICAgIDogRXhwcmVzc2lvbihzcGFuKQorICAg
ICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6OkJvb2xMaXRlcmFsOyB9CisgICAgYm9vbCB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1fdmFs
dWU7Cit9OworCitjbGFzcyBJbnQzMkxpdGVyYWwgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSW50MzJMaXRlcmFs
KFNvdXJjZVNwYW4gc3BhbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBFeHByZXNzaW9uKHNw
YW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgS2luZCBr
aW5kKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2luZDo6SW50MzJMaXRlcmFsOyB9CisgICAg
aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJpdmF0ZToKKyAg
ICBpbnQzMl90IG1fdmFsdWU7Cit9OworCitjbGFzcyBVaW50MzJMaXRlcmFsIGZpbmFsIDogcHVi
bGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIFVpbnQzMkxpdGVyYWwoU291cmNlU3BhbiBzcGFuLCB1aW50MzJfdCB2YWx1ZSkKKyAgICAg
ICAgOiBFeHByZXNzaW9uKHNwYW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7Cisg
ICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2luZDo6VWlu
dDMyTGl0ZXJhbDsgfQorICAgIHVpbnQzMl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fdmFsdWU7Cit9OworCitjbGFzcyBGbG9h
dDMyTGl0ZXJhbCBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGbG9hdDMyTGl0ZXJhbChTb3VyY2VTcGFuIHNwYW4s
IGZsb2F0IHZhbHVlKQorICAgICAgICA6IEV4cHJlc3Npb24oc3BhbikKKyAgICAgICAgLCBtX3Zh
bHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBLaW5kOjpGbG9hdDMyTGl0ZXJhbDsgfQorICAgIGZsb2F0IHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IG1fdmFsdWU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
R1NMX0VYUFJFU1NJT04oQm9vbExpdGVyYWwsIGlzQm9vbExpdGVyYWwoKSkKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0dTTF9FWFBSRVNTSU9OKEludDMyTGl0ZXJhbCwgaXNJbnQzMkxpdGVyYWwo
KSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9FWFBSRVNTSU9OKEZsb2F0MzJMaXRlcmFs
LCBpc0Zsb2F0MzJMaXRlcmFsKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfRVhQUkVT
U0lPTihVaW50MzJMaXRlcmFsLCBpc1VJbnQzMkxpdGVyYWwoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNjZXNzLmggYi9Tb3VyY2Uv
V2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzdiNWQyODUwYWYwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3Mu
aApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1l
c3BhY2UgV0dTTDo6QVNUIHsKKworY2xhc3MgU3RydWN0dXJlQWNjZXNzIGZpbmFsIDogcHVibGlj
IEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFN0cnVjdHVyZUFjY2VzcyhTb3VyY2VTcGFuIHNwYW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYm
IGJhc2UsIFN0cmluZ1ZpZXcgZmllbGROYW1lKQorICAgICAgICA6IEV4cHJlc3Npb24oc3BhbikK
KyAgICAgICAgLCBtX2Jhc2UoV1RGTW92ZShiYXNlKSkKKyAgICAgICAgLCBtX2ZpZWxkTmFtZShm
aWVsZE5hbWUpCisgICAgeworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEtpbmQ6OlN0cnVjdHVyZUFjY2VzczsgfQorICAgIFVuaXF1ZVJlZjxFeHByZXNz
aW9uPiYgYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIGZp
ZWxkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmllbGROYW1lOyB9CisKK3ByaXZhdGU6CisgICAg
VW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fYmFzZTsKKyAgICBTdHJpbmdWaWV3IG1fZmllbGROYW1l
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0dTTF9FWFBSRVNTSU9OKFN0cnVjdHVyZUFjY2VzcywgaXNTdHJ1Y3R1cmVBY2Nlc3MoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvVHlwZUNvbnZl
cnNpb24uaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvVHlwZUNvbnZlcnNp
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQxNTdlOWY4YWUw
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMv
VHlwZUNvbnZlcnNpb24uaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdHU0w6OkFTVCB7CisKKy8v
IE1heSBiZSBjb252ZXJ0ZWQgdG8gYSBmdW5jdGlvbiBjYWxsIGR1cmluZyB2YWxpZGF0aW9uLCBh
cyB3ZSBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlIGR1cmluZyBwYXJzaW5nLgorY2xhc3MgVHlw
ZUNvbnZlcnNpb24gZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVHlwZUNvbnZlcnNpb24oU291cmNlU3BhbiBzcGFu
LCBVbmlxdWVSZWY8VHlwZURlY2w+JiYgdHlwZURlY2wsIFZlY3RvcjxVbmlxdWVSZWY8RXhwcmVz
c2lvbj4+JiYgYXJndW1lbnRzKQorICAgICAgICA6IEV4cHJlc3Npb24oc3BhbikKKyAgICAgICAg
LCBtX3R5cGVEZWNsKFdURk1vdmUodHlwZURlY2wpKQorICAgICAgICAsIG1fYXJndW1lbnRzKFdU
Rk1vdmUoYXJndW1lbnRzKSkKKyAgICB7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gS2luZDo6VHlwZUNvbnZlcnNpb247IH0KKyAgICBVbmlxdWVSZWY8
VHlwZURlY2w+JiB0eXBlRGVjbCgpIHsgcmV0dXJuIG1fdHlwZURlY2w7IH0KKyAgICBWZWN0b3I8
VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYgYXJndW1lbnRzKCkgeyByZXR1cm4gbV9hcmd1bWVudHM7
IH0KKworcHJpdmF0ZToKKyAgICBVbmlxdWVSZWY8VHlwZURlY2w+IG1fdHlwZURlY2w7CisgICAg
VmVjdG9yPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9hcmd1bWVudHM7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0VYUFJFU1NJ
T04oVHlwZUNvbnZlcnNpb24sIGlzVHlwZUNvbnZlcnNpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1QvRnVuY3Rpb25EZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0Z1bmN0aW9uRGVjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
ZDNjZjcyZGU4ODk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9G
dW5jdGlvbkRlY2wuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5jbHVk
ZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiU3RhdGVtZW50cy9Db21wb3VuZFN0
YXRlbWVudC5oIgorI2luY2x1ZGUgIlR5cGVEZWNsLmgiCisKK25hbWVzcGFjZSBXR1NMOjpBU1Qg
eworCitjbGFzcyBQYXJhbWV0ZXIgZmluYWwgOiBwdWJsaWMgQVNUTm9kZSB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUGFyYW1ldGVyKFNvdXJjZVNwYW4gc3Bh
biwgU3RyaW5nVmlldyBuYW1lLCBVbmlxdWVSZWY8VHlwZURlY2w+JiYgdHlwZSwgQXR0cmlidXRl
cyYmIGF0dHJpYnV0ZXMpCisgICAgICAgIDogQVNUTm9kZShzcGFuKQorICAgICAgICAsIG1fbmFt
ZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQorICAgICAg
ICAsIG1fYXR0cmlidXRlcyhXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIHsKKyAgICB9CisKKyAg
ICBjb25zdCBTdHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAg
VHlwZURlY2wmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KKworcHJpdmF0ZToKKyAgICBTdHJp
bmdWaWV3IG1fbmFtZTsKKyAgICBVbmlxdWVSZWY8VHlwZURlY2w+IG1fdHlwZTsKKyAgICBBdHRy
aWJ1dGVzIG1fYXR0cmlidXRlczsKK307CisKK2NsYXNzIEZ1bmN0aW9uRGVjbCBmaW5hbCA6IHB1
YmxpYyBHbG9iYWxEZWNsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBGdW5jdGlvbkRlY2woU291cmNlU3BhbiBzb3VyY2VTcGFuLCBTdHJpbmdWaWV3IG5hbWUs
IFZlY3RvcjxVbmlxdWVSZWY8UGFyYW1ldGVyPj4mJiBwYXJhbWV0ZXJzLCBzdGQ6OnVuaXF1ZV9w
dHI8VHlwZURlY2w+JiYgcmV0dXJuVHlwZSwgQ29tcG91bmRTdGF0ZW1lbnQmJiBib2R5LCBBdHRy
aWJ1dGVzJiYgYXR0cmlidXRlcywgQXR0cmlidXRlcyYmIHJldHVybkF0dHJpYnV0ZXMpCisgICAg
ICAgIDogR2xvYmFsRGVjbChzb3VyY2VTcGFuKQorICAgICAgICAsIG1fbmFtZShuYW1lKQorICAg
ICAgICAsIG1fcGFyYW1ldGVycyhXVEZNb3ZlKHBhcmFtZXRlcnMpKQorICAgICAgICAsIG1fYXR0
cmlidXRlcyhXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgICAgICAsIG1fcmV0dXJuQXR0cmlidXRl
cyhXVEZNb3ZlKHJldHVybkF0dHJpYnV0ZXMpKQorICAgICAgICAsIG1fcmV0dXJuVHlwZShXVEZN
b3ZlKHJldHVyblR5cGUpKQorICAgICAgICAsIG1fYm9keShXVEZNb3ZlKGJvZHkpKQorICAgIHsK
KyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLaW5kOjpG
dW5jdGlvbjsgfQorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KKyAgICBWZWN0b3I8VW5pcXVlUmVmPFBhcmFtZXRlcj4+JiBwYXJhbWV0ZXJzKCkg
eyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIHsg
cmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIEF0dHJpYnV0ZXMmIHJldHVybkF0dHJpYnV0ZXMo
KSB7IHJldHVybiBtX3JldHVybkF0dHJpYnV0ZXM7IH0KKyAgICBUeXBlRGVjbCogbWF5YmVSZXR1
cm5UeXBlKCkgeyByZXR1cm4gbV9yZXR1cm5UeXBlLmdldCgpOyB9CisgICAgQ29tcG91bmRTdGF0
ZW1lbnQmIGJvZHkoKSB7IHJldHVybiBtX2JvZHk7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdW
aWV3IG1fbmFtZTsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPFBhcmFtZXRlcj4+IG1fcGFyYW1ldGVy
czsKKyAgICBBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICBBdHRyaWJ1dGVzIG1fcmV0dXJu
QXR0cmlidXRlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZURlY2w+IG1fcmV0dXJuVHlwZTsK
KyAgICBDb21wb3VuZFN0YXRlbWVudCBtX2JvZHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NM
OjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0dMT0JBTF9ERUNMKEZ1bmN0aW9u
RGVjbCwgaXNGdW5jdGlvbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9H
bG9iYWxEZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0dsb2JhbERlY2wuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQwYzE1Zjg0MGYwZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvR2xvYmFsRGVjbC5oCkBAIC0wLDAgKzEs
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFTVE5vZGUuaCIK
KyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitj
bGFzcyBHbG9iYWxEZWNsIDogcHVibGljIEFTVE5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgS2luZCB7CisgICAgICAgIEdsb2JhbFZh
cmlhYmxlLAorICAgICAgICBTdHJ1Y3QsCisgICAgICAgIEZ1bmN0aW9uLAorICAgIH07CisKKyAg
ICBHbG9iYWxEZWNsKFNvdXJjZVNwYW4gc3BhbikKKyAgICAgICAgOiBBU1ROb2RlKHNwYW4pCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkdsb2JhbERlY2woKSB7fQorCisgICAgdmlydHVh
bCBLaW5kIGtpbmQoKSBjb25zdCA9IDA7CisgICAgYm9vbCBpc0dsb2JhbFZhcmlhYmxlKCkgY29u
c3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6Okdsb2JhbFZhcmlhYmxlOyB9CisgICAgYm9vbCBp
c1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpTdHJ1Y3Q7IH0KKyAgICBi
b29sIGlzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6RnVuY3Rpb247
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVAorCisjZGVmaW5lIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0dTTF9HTE9CQUxfREVDTChUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkg
XAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXR1NMOjpBU1Q6OlRvVmFsdWVUeXBlTmFt
ZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXR1NMOjpBU1Q6Okdsb2JhbERlY2wm
IGRlY2wpIHsgcmV0dXJuIGRlY2wucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvR2xvYmFsRGlyZWN0
aXZlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0dsb2JhbERpcmVjdGl2ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmI4NWUyOTkzODhjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9HbG9iYWxEaXJlY3RpdmUuaApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2Rl
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXR1NMOjpB
U1QgeworCitjbGFzcyBHbG9iYWxEaXJlY3RpdmUgOiBwdWJsaWMgQVNUTm9kZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR2xvYmFsRGlyZWN0aXZlKFNvdXJj
ZVNwYW4gc3BhbiwgU3RyaW5nVmlldyBuYW1lKQorICAgICAgICA6IEFTVE5vZGUoc3BhbikKKyAg
ICAgICAgLCBtX25hbWUobmFtZSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nVmll
dyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCitwcml2YXRlOgorICAgIFN0cmlu
Z1ZpZXcgbV9uYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0dsb2JhbFZhcmlhYmxlRGVjbC5oIGIvU291cmNlL1dl
YkdQVS9XR1NML0FTVC9HbG9iYWxWYXJpYWJsZURlY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjZlOGM4MjY2NmNhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1QvR2xvYmFsVmFyaWFibGVEZWNsLmgKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5j
bHVkZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIkdsb2JhbERlY2wuaCIKKyNpbmNsdWRlICJUeXBlRGVjbC5oIgorI2luY2x1ZGUgIlZh
cmlhYmxlUXVhbGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBHbG9iYWxWYXJpYWJsZURlY2wgZmluYWwgOiBw
dWJsaWMgR2xvYmFsRGVjbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgR2xvYmFsVmFyaWFibGVEZWNsKFNvdXJjZVNwYW4gc3BhbiwgU3RyaW5nVmlldyBuYW1l
LCBzdGQ6OnVuaXF1ZV9wdHI8VmFyaWFibGVRdWFsaWZpZXI+JiYgcXVhbGlmaWVyLCBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZURlY2w+JiYgdHlwZSwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYg
aW5pdGlhbGl6ZXIsIEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQorICAgICAgICA6IEdsb2JhbERl
Y2woc3BhbikKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZXMo
V1RGTW92ZShhdHRyaWJ1dGVzKSkKKyAgICAgICAgLCBtX3F1YWxpZmllcihXVEZNb3ZlKHF1YWxp
ZmllcikpCisgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCisgICAgICAgICwgbV9pbml0
aWFsaXplcihXVEZNb3ZlKGluaXRpYWxpemVyKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5
cGUgfHwgbV9pbml0aWFsaXplcik7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gS2luZDo6R2xvYmFsVmFyaWFibGU7IH0KKyAgICBjb25zdCBTdHJpbmdW
aWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgQXR0cmlidXRlcyYgYXR0
cmlidXRlcygpIHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIFZhcmlhYmxlUXVhbGlmaWVy
KiBtYXliZVF1YWxpZmllcigpIHsgcmV0dXJuIG1fcXVhbGlmaWVyLmdldCgpOyB9CisgICAgVHlw
ZURlY2wqIG1heWJlVHlwZURlY2woKSB7IHJldHVybiBtX3R5cGUuZ2V0KCk7IH0KKyAgICBFeHBy
ZXNzaW9uKiBtYXliZUluaXRpYWxpemVyKCkgeyByZXR1cm4gbV9pbml0aWFsaXplci5nZXQoKTsg
fQorCitwcml2YXRlOgorICAgIFN0cmluZ1ZpZXcgbV9uYW1lOworICAgIEF0dHJpYnV0ZXMgbV9h
dHRyaWJ1dGVzOworICAgIC8vIEVhY2ggb2YgdGhlIGZvbGxvd2luZyBtYXkgYmUgbnVsbAorICAg
IC8vIEJ1dCBhdCBsZWFzdCBvbmUgb2YgdHlwZSBhbmQgaW5pdGlhbGl6ZXIgbXVzdCBiZSBub24t
bnVsbAorICAgIHN0ZDo6dW5pcXVlX3B0cjxWYXJpYWJsZVF1YWxpZmllcj4gbV9xdWFsaWZpZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVEZWNsPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEV4cHJlc3Npb24+IG1faW5pdGlhbGl6ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NM
OjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0dMT0JBTF9ERUNMKEdsb2JhbFZh
cmlhYmxlRGVjbCwgaXNHbG9iYWxWYXJpYWJsZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQ
VS9XR1NML0FTVC9TaGFkZXJNb2R1bGUuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU2hhZGVy
TW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMDZkZGYz
MDcwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1NoYWRlck1v
ZHVsZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFTVE5vZGUuaCIKKyNpbmNs
dWRlICJHbG9iYWxEZWNsLmgiCisjaW5jbHVkZSAiR2xvYmFsRGlyZWN0aXZlLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitj
bGFzcyBTaGFkZXJNb2R1bGUgZmluYWwgOiBBU1ROb2RlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTaGFkZXJNb2R1bGUoU291cmNlU3BhbiBzcGFuLCBWZWN0
b3I8VW5pcXVlUmVmPEdsb2JhbERpcmVjdGl2ZT4+JiYgZGlyZWN0aXZlcywgVmVjdG9yPFVuaXF1
ZVJlZjxHbG9iYWxEZWNsPj4mJiBkZWNscykKKyAgICAgICAgOiBBU1ROb2RlKHNwYW4pCisgICAg
ICAgICwgbV9kaXJlY3RpdmVzKFdURk1vdmUoZGlyZWN0aXZlcykpCisgICAgeworICAgICAgICBm
b3IgKGF1dG8mIGRlY2wgOiBkZWNscykgeworICAgICAgICAgICAgaWYgKGlzPFN0cnVjdERlY2w+
KGRlY2wuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBnbyBmcm9tIFVu
aXF1ZVJlZjxCYXNlQ2xhc3M+IHRvIFVuaXF1ZVJlZjxEZXJpdmVkQ2xhc3M+LCBidXQgdGhhdCBp
cyBub3Qgc3VwcG9ydGVkIGJ5IGRvd25jYXN0LgorICAgICAgICAgICAgICAgIC8vIFNvIGluc3Rl
YWQgd2UgZG8gVW5pcXVlUmVmIC0+IHVuaXF1ZV9wdHIgLT4gcmF3X3BvaW50ZXIgLShkb3duY2Fz
dCktPiByYXdfcG9pbnRlciAtPiB1bmlxdWVfcHRyIC0+IFVuaXF1ZVJlZi4uLgorICAgICAgICAg
ICAgICAgIEdsb2JhbERlY2wqIHJhd1B0ciA9IGRlY2wubW92ZVRvVW5pcXVlUHRyKCkucmVsZWFz
ZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdERlY2wqIGRvd25jYXN0ZWRSYXdQdHIgPSBkb3du
Y2FzdDxTdHJ1Y3REZWNsPihyYXdQdHIpOworICAgICAgICAgICAgICAgIG1fc3RydWN0cy5hcHBl
bmQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0ZDo6dW5pcXVlX3B0cjxTdHJ1
Y3REZWNsPihkb3duY2FzdGVkUmF3UHRyKSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpczxH
bG9iYWxWYXJpYWJsZURlY2w+KGRlY2wuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgR2xvYmFs
RGVjbCogcmF3UHRyID0gZGVjbC5tb3ZlVG9VbmlxdWVQdHIoKS5yZWxlYXNlKCk7CisgICAgICAg
ICAgICAgICAgR2xvYmFsVmFyaWFibGVEZWNsKiBkb3duY2FzdGVkUmF3UHRyID0gZG93bmNhc3Q8
R2xvYmFsVmFyaWFibGVEZWNsPihyYXdQdHIpOworICAgICAgICAgICAgICAgIG1fZ2xvYmFsVmFy
cy5hcHBlbmQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0ZDo6dW5pcXVlX3B0
cjxHbG9iYWxWYXJpYWJsZURlY2w+KGRvd25jYXN0ZWRSYXdQdHIpKSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIEdsb2JhbERlY2wqIHJhd1B0ciA9IGRlY2wubW92ZVRv
VW5pcXVlUHRyKCkucmVsZWFzZSgpOworICAgICAgICAgICAgICAgIEZ1bmN0aW9uRGVjbCogZnVu
YyA9IGRvd25jYXN0PEZ1bmN0aW9uRGVjbD4ocmF3UHRyKTsKKyAgICAgICAgICAgICAgICBtX2Z1
bmN0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0ZDo6dW5p
cXVlX3B0cjxGdW5jdGlvbkRlY2w+KGZ1bmMpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEdsb2JhbERpcmVjdGl2ZT4+JiBkaXJlY3Rp
dmVzKCkgeyByZXR1cm4gbV9kaXJlY3RpdmVzOyB9CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxTdHJ1
Y3REZWNsPj4mIHN0cnVjdHMoKSB7IHJldHVybiBtX3N0cnVjdHM7IH0KKyAgICBWZWN0b3I8VW5p
cXVlUmVmPEdsb2JhbFZhcmlhYmxlRGVjbD4+JiBnbG9iYWxWYXJzKCkgeyByZXR1cm4gbV9nbG9i
YWxWYXJzOyB9CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxGdW5jdGlvbkRlY2w+PiYgZnVuY3Rpb25z
KCkgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VW5pcXVl
UmVmPEdsb2JhbERpcmVjdGl2ZT4+IG1fZGlyZWN0aXZlczsKKworICAgIFZlY3RvcjxVbmlxdWVS
ZWY8U3RydWN0RGVjbD4+IG1fc3RydWN0czsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEdsb2JhbFZh
cmlhYmxlRGVjbD4+IG1fZ2xvYmFsVmFyczsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEZ1bmN0aW9u
RGVjbD4+IG1fZnVuY3Rpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudC5oIGIvU291cmNlL1dlYkdQ
VS9XR1NML0FTVC9TdGF0ZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLjFhY2E0ZTVjN2QyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dT
TC9BU1QvU3RhdGVtZW50LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
KworbmFtZXNwYWNlIFdHU0w6OkFTVCB7CisKK2NsYXNzIFN0YXRlbWVudCA6IHB1YmxpYyBBU1RO
b2RlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIGVudW0g
Y2xhc3MgS2luZCA6IHVpbnQ4X3QgeworICAgICAgICBDb21wb3VuZCwKKyAgICAgICAgUmV0dXJu
LAorICAgICAgICBBc3NpZ25tZW50LAorICAgIH07CisKKyAgICBTdGF0ZW1lbnQoU291cmNlU3Bh
biBzcGFuKQorICAgICAgICA6IEFTVE5vZGUoc3BhbikKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB+U3RhdGVtZW50KCkge30KKworICAgIHZpcnR1YWwgS2luZCBraW5kKCkgY29uc3QgPSAw
OworICAgIGJvb2wgaXNDb21wb3VuZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpD
b21wb3VuZDsgfQorICAgIGJvb2wgaXNSZXR1cm4oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0g
S2luZDo6UmV0dXJuOyB9CisgICAgYm9vbCBpc0Fzc2lnbm1lbnQoKSBjb25zdCB7IHJldHVybiBr
aW5kKCkgPT0gS2luZDo6QXNzaWdubWVudDsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6
QVNUCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX1NUQVRFTUVOVChUb1Zh
bHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
R1NMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXR1NMOjpBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KSB7IHJldHVybiBzdGF0ZW1lbnQucHJl
ZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50LmggYi9T
b3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudHMvQXNzaWdubWVudFN0YXRlbWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGU0YzY0MWVmMGUzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1lbnRzL0Fzc2lnbm1l
bnRTdGF0ZW1lbnQuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiU3RhdGVtZW50LmgiCisKK25h
bWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBBc3NpZ25tZW50U3RhdGVtZW50IGZpbmFsIDog
cHVibGljIFN0YXRlbWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgQXNzaWdubWVudFN0YXRlbWVudChTb3VyY2VTcGFuIHNwYW4sIHN0ZDo6dW5pcXVlX3B0
cjxFeHByZXNzaW9uPiYmIGxocywgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgcmhzKQorICAgICAg
ICA6IFN0YXRlbWVudChzcGFuKQorICAgICAgICAsIG1fbGhzKFdURk1vdmUobGhzKSkKKyAgICAg
ICAgLCBtX3JocyhXVEZNb3ZlKHJocykpCisgICAgeworICAgIH0KKworICAgIEtpbmQga2luZCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6OkFzc2lnbm1lbnQ7IH0KKyAgICBFeHByZXNz
aW9uKiBtYXliZUxocygpIHsgcmV0dXJuIG1fbGhzLmdldCgpOyB9CisgICAgRXhwcmVzc2lvbiYg
cmhzKCkgeyByZXR1cm4gbV9yaHM7IH0KKworcHJpdmF0ZToKKyAgICAvLyBMSFMgY2FuIGJlIG51
bGwgaW4gdGhlIGNhc2UgaXQgaXMgJ18nLCBidXQgUkhTIGlzIG5ldmVyIG51bGwKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9saHM7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+
IG1fcmhzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0dTTF9TVEFURU1FTlQoQXNzaWdubWVudFN0YXRlbWVudCwgaXNBc3NpZ25tZW50
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudHMvQ29tcG91
bmRTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9Db21wb3Vu
ZFN0YXRlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDYy
YTc2NDcyNDcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0
ZW1lbnRzL0NvbXBvdW5kU3RhdGVtZW50LmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3RhdGVtZW50LmgiCisKK25hbWVzcGFjZSBXR1NM
OjpBU1QgeworCitjbGFzcyBDb21wb3VuZFN0YXRlbWVudCBmaW5hbCA6IHB1YmxpYyBTdGF0ZW1l
bnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENvbXBvdW5k
U3RhdGVtZW50KFNvdXJjZVNwYW4gc3BhbiwgVmVjdG9yPFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+PiYm
IHN0YXRlbWVudHMpCisgICAgICAgIDogU3RhdGVtZW50KHNwYW4pCisgICAgICAgICwgbV9zdGF0
ZW1lbnRzKFdURk1vdmUoc3RhdGVtZW50cykpCisgICAgeworICAgIH0KKworICAgIEtpbmQga2lu
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6OkNvbXBvdW5kOyB9CisgICAgVmVjdG9y
PFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+PiYgc3RhdGVtZW50cygpIHsgcmV0dXJuIG1fc3RhdGVtZW50
czsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxVbmlxdWVSZWY8U3RhdGVtZW50Pj4gbV9zdGF0
ZW1lbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0dTTF9TVEFURU1FTlQoQ29tcG91bmRTdGF0ZW1lbnQsIGlzQ29tcG91bmQoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9SZXR1cm5TdGF0
ZW1lbnQuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9SZXR1cm5TdGF0ZW1l
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRkMzc2ZWNmNmU1
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9S
ZXR1cm5TdGF0ZW1lbnQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUg
IlN0YXRlbWVudC5oIgorCituYW1lc3BhY2UgV0dTTDo6QVNUIHsKKworY2xhc3MgUmV0dXJuU3Rh
dGVtZW50IGZpbmFsIDogcHVibGljIFN0YXRlbWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgUmV0dXJuU3RhdGVtZW50KFNvdXJjZVNwYW4gc3Bhbiwgc3Rk
Ojp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgZXhwcmVzc2lvbikKKyAgICAgICAgOiBTdGF0ZW1l
bnQoc3BhbikKKyAgICAgICAgLCBtX2V4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSkKKyAg
ICB7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2lu
ZDo6UmV0dXJuOyB9CisgICAgRXhwcmVzc2lvbiogbWF5YmVFeHByZXNzaW9uKCkgeyByZXR1cm4g
bV9leHByZXNzaW9uLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4
cHJlc3Npb24+IG1fZXhwcmVzc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVAor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfU1RBVEVNRU5UKFJldHVyblN0YXRlbWVudCwg
aXNSZXR1cm4oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RydWN0dXJl
RGVjbC5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdHJ1Y3R1cmVEZWNsLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YWRlYmU1OWViYWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0cnVjdHVyZURlY2wuaApAQCAtMCwwICsx
LDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgi
CisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgi
CisjaW5jbHVkZSAiR2xvYmFsRGVjbC5oIgorI2luY2x1ZGUgIlR5cGVEZWNsLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorCisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitj
bGFzcyBTdHJ1Y3RNZW1iZXIgZmluYWwgOiBwdWJsaWMgQVNUTm9kZSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3RydWN0TWVtYmVyKFNvdXJjZVNwYW4gc3Bh
biwgU3RyaW5nVmlldyBuYW1lLCBVbmlxdWVSZWY8VHlwZURlY2w+JiYgdHlwZSwgQXR0cmlidXRl
cyYmIGF0dHJpYnV0ZXMpCisgICAgICAgIDogQVNUTm9kZShzcGFuKQorICAgICAgICAsIG1fbmFt
ZShuYW1lKQorICAgICAgICAsIG1fYXR0cmlidXRlcyhXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAg
ICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBT
dHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgVHlwZURlY2wm
IHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdWaWV3IG1f
bmFtZTsKKyAgICBBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICBVbmlxdWVSZWY8VHlwZURl
Y2w+IG1fdHlwZTsKK307CisKK2NsYXNzIFN0cnVjdERlY2wgZmluYWwgOiBwdWJsaWMgR2xvYmFs
RGVjbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3RydWN0
RGVjbChTb3VyY2VTcGFuIHNvdXJjZVNwYW4sIFN0cmluZ1ZpZXcgbmFtZSwgVmVjdG9yPFVuaXF1
ZVJlZjxTdHJ1Y3RNZW1iZXI+PiYmIG1lbWJlcnMsIEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQor
ICAgICAgICA6IEdsb2JhbERlY2woc291cmNlU3BhbikKKyAgICAgICAgLCBtX25hbWUobmFtZSkK
KyAgICAgICAgLCBtX2F0dHJpYnV0ZXMoV1RGTW92ZShhdHRyaWJ1dGVzKSkKKyAgICAgICAgLCBt
X21lbWJlcnMoV1RGTW92ZShtZW1iZXJzKSkKKyAgICB7CisgICAgfQorCisgICAgS2luZCBraW5k
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2luZDo6U3RydWN0OyB9CisgICAgY29uc3QgU3Ry
aW5nVmlldyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIEF0dHJpYnV0ZXMm
IGF0dHJpYnV0ZXMoKSB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBWZWN0b3I8VW5pcXVl
UmVmPFN0cnVjdE1lbWJlcj4+JiBtZW1iZXJzKCkgeyByZXR1cm4gbV9tZW1iZXJzOyB9CisKK3By
aXZhdGU6CisgICAgU3RyaW5nVmlldyBtX25hbWU7CisgICAgQXR0cmlidXRlcyBtX2F0dHJpYnV0
ZXM7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxTdHJ1Y3RNZW1iZXI+PiBtX21lbWJlcnM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NM
X0dMT0JBTF9ERUNMKFN0cnVjdERlY2wsIGlzU3RydWN0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViR1BVL1dHU0wvQVNUL1R5cGVEZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1R5cGVE
ZWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZGRmODIwNzli
MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1R5cGVEZWNsLmgK
QEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkFTVE5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisKK25hbWVzcGFjZSBXR1NM
OjpBU1QgeworCitjbGFzcyBUeXBlRGVjbCA6IHB1YmxpYyBBU1ROb2RlIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIGVudW0gY2xhc3MgS2luZCA6IHVpbnQ4
X3QgeworICAgICAgICBOYW1lZCwKKyAgICAgICAgUGFyYW1ldGVyaXplZCwKKyAgICB9OworCisg
ICAgVHlwZURlY2woU291cmNlU3BhbiBzcGFuKQorICAgICAgICA6IEFTVE5vZGUoc3BhbikKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB+VHlwZURlY2woKSB7fQorCisgICAgdmlydHVhbCBL
aW5kIGtpbmQoKSBjb25zdCA9IDA7CisgICAgYm9vbCBpc05hbWVkKCkgY29uc3QgeyByZXR1cm4g
a2luZCgpID09IEtpbmQ6Ok5hbWVkOyB9CisgICAgYm9vbCBpc1BhcmFtZXRlcml6ZWQoKSBjb25z
dCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6UGFyYW1ldGVyaXplZDsgfQorfTsKKworY2xhc3Mg
TmFtZWRUeXBlIGZpbmFsIDogcHVibGljIFR5cGVEZWNsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBOYW1lZFR5cGUoU291cmNlU3BhbiBzcGFuLCBTdHJpbmdW
aWV3JiYgbmFtZSkKKyAgICAgICAgOiBUeXBlRGVjbChzcGFuKQorICAgICAgICAsIG1fbmFtZShX
VEZNb3ZlKG5hbWUpKQorICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBLaW5kOjpOYW1lZDsgfQorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdWaWV3IG1f
bmFtZTsKK307CisKK2NsYXNzIFBhcmFtZXRlcml6ZWRUeXBlIDogcHVibGljIFR5cGVEZWNsIHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEJh
c2UgeworICAgICAgICBWZWMyLAorICAgICAgICBWZWMzLAorICAgICAgICBWZWM0LAorICAgICAg
ICBNYXQyeDIsCisgICAgICAgIE1hdDJ4MywKKyAgICAgICAgTWF0Mng0LAorICAgICAgICBNYXQz
eDIsCisgICAgICAgIE1hdDN4MywKKyAgICAgICAgTWF0M3g0LAorICAgICAgICBNYXQ0eDIsCisg
ICAgICAgIE1hdDR4MywKKyAgICAgICAgTWF0NHg0CisgICAgfTsKKworICAgIFBhcmFtZXRlcml6
ZWRUeXBlKFNvdXJjZVNwYW4gc3BhbiwgQmFzZSBiYXNlLCBVbmlxdWVSZWY8VHlwZURlY2w+JiYg
ZWxlbWVudFR5cGUpCisgICAgICAgIDogVHlwZURlY2woc3BhbikKKyAgICAgICAgLCBtX2Jhc2Uo
YmFzZSkKKyAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdURk1vdmUoZWxlbWVudFR5cGUpKQorICAg
IHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLaW5k
OjpQYXJhbWV0ZXJpemVkOyB9CisgICAgQmFzZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNl
OyB9CisgICAgVHlwZURlY2wmIGVsZW1lbnRUeXBlKCkgeyByZXR1cm4gbV9lbGVtZW50VHlwZTsg
fQorCitwcml2YXRlOgorICAgIEJhc2UgbV9iYXNlOworICAgIFVuaXF1ZVJlZjxUeXBlRGVjbD4g
bV9lbGVtZW50VHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVAorCisjZGVmaW5l
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9UWVBFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGlj
YXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdHU0w6OkFTVDo6VG9WYWx1ZVR5
cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdHU0w6OkFTVDo6VHlwZURl
Y2wmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX1RZUEUoTmFtZWRUeXBl
LCBpc05hbWVkKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfVFlQRShQYXJhbWV0ZXJp
emVkVHlwZSwgaXNQYXJhbWV0ZXJpemVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL1ZhcmlhYmxlUXVhbGlmaWVyLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1Zhcmlh
YmxlUXVhbGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4w
NTZjNDBkMTZkODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1Zh
cmlhYmxlUXVhbGlmaWVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorCituYW1lc3BhY2UgV0dTTDo6QVNUIHsKKwor
ZW51bSBjbGFzcyBTdG9yYWdlQ2xhc3MgOiB1aW50OF90IHsKKyAgICBGdW5jdGlvbiwKKyAgICBQ
cml2YXRlLAorICAgIFdvcmtncm91cCwKKyAgICBVbmlmb3JtLAorICAgIFN0b3JhZ2UKK307CisK
K2VudW0gY2xhc3MgQWNjZXNzTW9kZSA6IHVpbnQ4X3QgeworICAgIFJlYWQsCisgICAgV3JpdGUs
CisgICAgUmVhZFdyaXRlCit9OworCitjbGFzcyBWYXJpYWJsZVF1YWxpZmllciBmaW5hbCA6IHB1
YmxpYyBBU1ROb2RlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBWYXJpYWJsZVF1YWxpZmllcihTb3VyY2VTcGFuIHNwYW4sIFN0b3JhZ2VDbGFzcyBzdG9yYWdl
Q2xhc3MsIEFjY2Vzc01vZGUgYWNjZXNzTW9kZSkKKyAgICAgICAgOiBBU1ROb2RlKHNwYW4pCisg
ICAgICAgICwgbV9zdG9yYWdlQ2xhc3Moc3RvcmFnZUNsYXNzKQorICAgICAgICAsIG1fYWNjZXNz
TW9kZShhY2Nlc3NNb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBTdG9yYWdlQ2xhc3Mgc3RvcmFn
ZUNsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQ2xhc3M7IH0KKyAgICBBY2Nlc3NNb2Rl
IGFjY2Vzc01vZGUoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc01vZGU7IH0KKworcHJpdmF0ZToK
KyAgICBTdG9yYWdlQ2xhc3MgbV9zdG9yYWdlQ2xhc3M7CisgICAgQWNjZXNzTW9kZSBtX2FjY2Vz
c01vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1ROb2RlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUTm9kZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzVkZGU5YTkyYWNiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVE5vZGUuaApAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTb3VyY2VTcGFuLmgi
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIFdHU0w6OkFTVCB7CisK
K2NsYXNzIEFTVE5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIEFTVE5vZGUoU291cmNlU3BhbiBzcGFuKQorICAgICAgICA6IG1fc3BhbihzcGFuKQorICAg
IHsKKyAgICB9CisKKyAgICBjb25zdCBTb3VyY2VTcGFuJiBzcGFuKCkgY29uc3QgeyByZXR1cm4g
bV9zcGFuOyB9CisKK3ByaXZhdGU6CisgICAgU291cmNlU3BhbiBtX3NwYW47Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9Db21w
aWxhdGlvbk1lc3NhZ2UuY3BwIGIvU291cmNlL1dlYkdQVS9XR1NML0NvbXBpbGF0aW9uTWVzc2Fn
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mYTNiMzVlMTcz
MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQ29tcGlsYXRpb25NZXNz
YWdlLmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNvbXBpbGF0aW9uTWVzc2FnZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXR1NMIHsKKwordm9pZCBDb21waWxhdGlvbk1lc3NhZ2U6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9zcGFuLm1f
bGluZSwgIjoiLCBtX3NwYW4ubV9saW5lT2Zmc2V0LCAiIGxlbmd0aDoiLCBtX3NwYW4ubV9sZW5n
dGgsIG1fbWVzc2FnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdHU0wKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuaCBiL1NvdXJjZS9XZWJHUFUvV0dT
TC9Db21waWxhdGlvbk1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLjZjOTYxNWE0YmZkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dT
TC9Db21waWxhdGlvbk1lc3NhZ2UuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJTb3VyY2VTcGFuLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdH
U0wgeworCitjbGFzcyBDb21waWxhdGlvbk1lc3NhZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIENvbXBpbGF0aW9uTWVzc2FnZShTdHJpbmcmJiBtZXNzYWdl
LCBTb3VyY2VTcGFuIHNwYW4pCisgICAgICAgIDogbV9tZXNzYWdlKFdURk1vdmUobWVzc2FnZSkp
CisgICAgICAgICwgbV9zcGFuKHNwYW4pCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9tZXNzYWdl
OworICAgIFNvdXJjZVNwYW4gbV9zcGFuOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwIGIvU291cmNlL1dlYkdQVS9XR1NM
L1dHU0wuY3BwCmluZGV4IDk0ZmUzOWFiZDczNC4uYTU0NmM2NGE0ZjU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1dHU0wu
Y3BwCkBAIC0yNiw4ICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldH
U0wuaCIKIAotI2luY2x1ZGUgIkFTVC5oIgogI2luY2x1ZGUgIkxleGVyLmgiCisvLyBBbGwgb2Yg
dGhlc2UgYXJlIGp1c3QgdG8gY2hlY2sgdGhhdCB0aGV5IGNvbXBpbGUsIHNpbmNlIGZvciBub3cg
dGhleSBhcmUgbm90IHJlYWxseSB1c2VkLgorI2luY2x1ZGUgIkFTVC9HbG9iYWxWYXJpYWJsZURl
Y2wuaCIKKyNpbmNsdWRlICJBU1QvU3RydWN0dXJlRGVjbC5oIgorI2luY2x1ZGUgIkFTVC9GdW5j
dGlvbkRlY2wuaCIKKyNpbmNsdWRlICJBU1QvU2hhZGVyTW9kdWxlLmgiCisjaW5jbHVkZSAiQVNU
L1N0YXRlbWVudHMvQXNzaWdubWVudFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1l
bnRzL1JldHVyblN0YXRlbWVudC5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9JZGVudGlm
aWVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lv
bi5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3MuaCIKKyNpbmNs
dWRlICJBU1QvRXhwcmVzc2lvbnMvTGl0ZXJhbEV4cHJlc3Npb25zLmgiCiAKIG5hbWVzcGFjZSBX
R1NMIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuaCBiL1NvdXJjZS9X
ZWJHUFUvV0dTTC9XR1NMLmgKaW5kZXggOTljOWRlN2EzOWIzLi4xMmJiOGIxNjU1MTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmgKKysrIGIvU291cmNlL1dlYkdQVS9XR1NM
L1dHU0wuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNv
bXBpbGF0aW9uTWVzc2FnZS5oIgogI2luY2x1ZGUgPGNpbnR0eXBlcz4KICNpbmNsdWRlIDxjc3Rk
aW50PgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTQwLDI2ICs0MSwxNCBAQCBuYW1lc3BhY2UgV0dT
TCB7CiAvLyBTdGVwIDEKIC8vCiAKLWVudW0gY2xhc3MgQ29tcGlsYXRpb25NZXNzYWdlVHlwZSA6
IHVpbnQ4X3QgewotICAgIEVycm9yLAotICAgIFdhcm5pbmcsCi0gICAgSW5mbwotfTsKLQotc3Ry
dWN0IENvbXBpbGF0aW9uTWVzc2FnZSB7Ci0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgdWludDY0
X3QgbGluZU51bWJlcjsKLSAgICB1aW50NjRfdCBsaW5lUG9zaXRpb247Ci0gICAgdWludDY0X3Qg
b2Zmc2V0OwotICAgIHVpbnQ2NF90IGxlbmd0aDsKLX07Ci0KLWNsYXNzIEFTVDsKK25hbWVzcGFj
ZSBBU1QgeworY2xhc3MgU2hhZGVyTW9kdWxlOworfQogCiBzdHJ1Y3QgU3VjY2Vzc2Z1bENoZWNr
IHsKICAgICB+U3VjY2Vzc2Z1bENoZWNrKCk7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uTWVzc2Fn
ZT4gd2FybmluZ3M7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVD4gYXN0OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlNoYWRlck1vZHVsZT4gYXN0OwogfTsKIAogc3RydWN0IEZhaWxlZENoZWNr
IHsKQEAgLTIwOSw3ICsxOTgsNyBAQCBzdHJ1Y3QgUHJlcGFyZVJlc3VsdCB7CiAKIC8vIFRoZXNl
IGFyZSBub3QgYWxsb3dlZCB0byBmYWlsLgogLy8gQWxsIGZhaWx1cmVzIG11c3QgaGF2ZSBhbHJl
YWR5IGJlZW4gY2F1Z2h0IGluIGNoZWNrKCkuCi1QcmVwYXJlUmVzdWx0IHByZXBhcmUoY29uc3Qg
QVNUJiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8UGlwZWxpbmVMYXlvdXQ+
PiYpOwotUHJlcGFyZVJlc3VsdCBwcmVwYXJlKGNvbnN0IEFTVCYsIGNvbnN0IFN0cmluZyYgZW50
cnlQb2ludE5hbWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8UGlwZWxpbmVMYXlvdXQ+Jik7CitQcmVw
YXJlUmVzdWx0IHByZXBhcmUoY29uc3QgQVNUOjpTaGFkZXJNb2R1bGUmLCBjb25zdCBIYXNoTWFw
PFN0cmluZywgc3RkOjpvcHRpb25hbDxQaXBlbGluZUxheW91dD4+Jik7CitQcmVwYXJlUmVzdWx0
IHByZXBhcmUoY29uc3QgQVNUOjpTaGFkZXJNb2R1bGUmLCBjb25zdCBTdHJpbmcmIGVudHJ5UG9p
bnROYW1lLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFBpcGVsaW5lTGF5b3V0PiYpOwogCiB9IC8vIG5h
bWVzcGFjZSBXR1NMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAzZjQwYzYzOGJlODMuLjY5Y2I3MzMyZDlkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Niw2ICs0NiwyNyBA
QAogCQkzMzhCQjJEMjI3QjZCNjNGMDBFMDY2QUIgLyogU291cmNlU3Bhbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM4QkIyRDEyN0I2QjYzRjAwRTA2
NkFCIC8qIFNvdXJjZVNwYW4uaCAqLzsgfTsKIAkJMzM4QkIyRDQyN0I2QjY2QzAwRTA2NkFCIC8q
IExleGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCAqLzsgfTsKIAkJMzM4QkIyRDYyN0I2
QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMzOEJCMkQ1MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgKi87
IH07CisJCTMzRUExODVFMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg1RDI3QkMxOTRGMDBBMURE
NTIgLyogQVNUTm9kZS5oICovOyB9OworCQkzM0VBMTg2MDI3QkMxOTgxMDBBMURENTIgLyogR2xv
YmFsRGlyZWN0aXZlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzM0VBMTg1RjI3QkMxOTgxMDBBMURENTIgLyogR2xvYmFsRGlyZWN0aXZlLmggKi87IH07
CisJCTMzRUExODYyMjdCQzE5QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2MTI3QkMxOUMxMDBBMURE
NTIgLyogR2xvYmFsRGVjbC5oICovOyB9OworCQkzM0VBMTg2NDI3QkMxQTFEMDBBMURENTIgLyog
R2xvYmFsVmFyaWFibGVEZWNsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzM0VBMTg2MzI3QkMxQTFEMDBBMURENTIgLyogR2xvYmFsVmFyaWFibGVEZWNs
LmggKi87IH07CisJCTMzRUExODY2MjdCQzFBRDUwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3Nh
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUEx
ODY1MjdCQzFBRDUwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuaCAqLzsgfTsKKwkJMzNF
QTE4NjgyN0JDMUIxNDAwQTFERDUyIC8qIENvbXBpbGF0aW9uTWVzc2FnZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2NzI3QkMxQjE0MDBB
MURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCAqLzsgfTsKKwkJMzNFQTE4NkEyN0JDMUJF
NjAwQTFERDUyIC8qIEF0dHJpYnV0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzNFQTE4NjkyN0JDMUJFNjAwQTFERDUyIC8qIEF0dHJpYnV0ZS5oICov
OyB9OworCQkzM0VBMTg2QzI3QkMxQ0JDMDBBMURENTIgLyogRXhwcmVzc2lvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NkIyN0JDMUNCQzAw
QTFERDUyIC8qIEV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMzNFQTE4NkUyN0JDMUQ0QzAwQTFERDUy
IC8qIFR5cGVEZWNsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzM0VBMTg2RDI3QkMxRDRDMDBBMURENTIgLyogVHlwZURlY2wuaCAqLzsgfTsKKwkJMzNF
QTE4NzAyN0JDMUU4QTAwQTFERDUyIC8qIFNoYWRlck1vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NkYyN0JDMUU4QTAwQTFERDUyIC8q
IFNoYWRlck1vZHVsZS5oICovOyB9OworCQkzM0VBMTg3MjI3QkMxRkUxMDBBMURENTIgLyogVmFy
aWFibGVRdWFsaWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMzRUExODcxMjdCQzFGRTEwMEExREQ1MiAvKiBWYXJpYWJsZVF1YWxpZmllci5oICov
OyB9OworCQkzM0VBMTg3NDI3QkMyMDQ5MDBBMURENTIgLyogU3RydWN0dXJlRGVjbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NzMyN0JDMjA0
OTAwQTFERDUyIC8qIFN0cnVjdHVyZURlY2wuaCAqLzsgfTsKKwkJMzNFQTE4NzYyN0JDMjE2QjAw
QTFERDUyIC8qIEZ1bmN0aW9uRGVjbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzNFQTE4NzUyN0JDMjE2QjAwQTFERDUyIC8qIEZ1bmN0aW9uRGVjbC5o
ICovOyB9OworCQkzM0VBMTg3OTI3QkMyMkFBMDBBMURENTIgLyogU3RhdGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg3ODI3QkMyMkFB
MDBBMURENTIgLyogU3RhdGVtZW50LmggKi87IH07CisJCTMzRUExODdCMjdCQzIzMEUwMEExREQ1
MiAvKiBDb21wb3VuZFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzNFQTE4N0EyN0JDMjMwRTAwQTFERDUyIC8qIENvbXBvdW5kU3RhdGVt
ZW50LmggKi87IH07CisJCTMzRUExODdFMjdCQzI0OTAwMEExREQ1MiAvKiBSZXR1cm5TdGF0ZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUEx
ODdEMjdCQzI0OTAwMEExREQ1MiAvKiBSZXR1cm5TdGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzNFQTE4
ODAyN0JDMjRFMjAwQTFERDUyIC8qIEFzc2lnbm1lbnRTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODdGMjdCQzI0RTIwMEExREQ1
MiAvKiBBc3NpZ25tZW50U3RhdGVtZW50LmggKi87IH07CisJCTMzRUExODgyMjdCQzI1RDAwMEEx
REQ1MiAvKiBJZGVudGlmaWVyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4ODEyN0JDMjVEMDAwQTFERDUyIC8qIElkZW50aWZp
ZXJFeHByZXNzaW9uLmggKi87IH07CisJCTMzRUExODg0MjdCQzI2ODYwMEExREQ1MiAvKiBTdHJ1
Y3R1cmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzRUExODgzMjdCQzI2ODYwMEExREQ1MiAvKiBTdHJ1Y3R1cmVBY2Nlc3MuaCAqLzsgfTsK
KwkJMzNFQTE4ODYyN0JDMjZERjAwQTFERDUyIC8qIFR5cGVDb252ZXJzaW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg4NTI3QkMyNkRGMDBB
MURENTIgLyogVHlwZUNvbnZlcnNpb24uaCAqLzsgfTsKKwkJMzNFQTE4ODgyN0JDMzYxRTAwQTFE
RDUyIC8qIExpdGVyYWxFeHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4ODcyN0JDMzYxRTAwQTFERDUyIC8qIExpdGVyYWxFeHBy
ZXNzaW9ucy5oICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJl
Z2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC0xMzEsNyArMTUyLDYgQEAK
IAkJMUNFQkQ4MDEyNzE2QjlBQjAwQTUyNTREIC8qIFNES1ZhcmlhbnQueGNjb25maWcgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmln
OyBwYXRoID0gU0RLVmFyaWFudC54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUNFQkQ4MDIyNzE2QkY4MjAwQTUyNTREIC8qIFdHU0wuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0dTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDRUJEODA0MjcxNkJG
QUIwMEE1MjU0RCAvKiBjb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29uZmlnLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDRUJEODA3MjcxNkMyQzAwMEE1MjU0RCAvKiBBU1QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDRUJE
ODBBMjcxNkMzNkMwMEE1MjU0RCAvKiBjb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29uZmlnLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDRUJEODBCMjcxNkMzNzkwMEE1MjU0RCAv
KiBFeHBvcnRNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwb3J0TWFjcm9zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDRUJEODBEMjcxNkMzRDgwMEE1MjU0RCAvKiBTaGFkZXJN
b2R1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhZGVyTW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNDUsNiArMTY1LDI3IEBACiAJCTMzOEJCMkQxMjdCNkI2M0YwMEUwNjZB
QiAvKiBTb3VyY2VTcGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZVNwYW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM4QkIyRDMyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMz
OEJCMkQ1MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBM
ZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODVEMjdCQzE5NEYw
MEExREQ1MiAvKiBBU1ROb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFTVE5vZGUuaDsgcGF0aCA9IFdH
U0wvQVNUTm9kZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTMzRUExODVGMjdC
QzE5ODEwMEExREQ1MiAvKiBHbG9iYWxEaXJlY3RpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2xvYmFs
RGlyZWN0aXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODYxMjdCQzE5
QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbERlY2wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4NjMyN0JDMUExRDAwQTFERDUyIC8q
IEdsb2JhbFZhcmlhYmxlRGVjbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbG9iYWxWYXJpYWJsZURlY2wu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4NjUyN0JDMUFENTAwQTFERDUy
IC8qIENvbXBpbGF0aW9uTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21waWxhdGlvbk1lc3Nh
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4NjcyN0JDMUIxNDAwQTFE
RDUyIC8qIENvbXBpbGF0aW9uTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxh
dGlvbk1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg2OTI3
QkMxQkU2MDBBMURENTIgLyogQXR0cmlidXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0dHJpYnV0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg2QjI3QkMxQ0JDMDBBMURENTIg
LyogRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMzRUExODZEMjdCQzFENEMwMEExREQ1MiAvKiBUeXBlRGVjbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlRGVjbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzM0VBMTg2RjI3QkMxRThBMDBBMURENTIgLyogU2hhZGVyTW9kdWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNoYWRlck1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg3
MTI3QkMxRkUxMDBBMURENTIgLyogVmFyaWFibGVRdWFsaWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmFyaWFibGVRdWFsaWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4
NzMyN0JDMjA0OTAwQTFERDUyIC8qIFN0cnVjdHVyZURlY2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlRGVjbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg3NTI3QkMy
MTZCMDBBMURENTIgLyogRnVuY3Rpb25EZWNsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uRGVj
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg3ODI3QkMyMkFBMDBBMURE
NTIgLyogU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg3QTI3QkMyMzBFMDBBMURENTIgLyogQ29tcG91bmRT
dGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcG91bmRTdGF0ZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4N0QyN0JDMjQ5MDAwQTFERDUyIC8qIFJldHVyblN0
YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXR1cm5TdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4N0YyN0JDMjRFMjAwQTFERDUyIC8qIEFzc2lnbm1lbnRT
dGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXNzaWdubWVudFN0YXRlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg4MTI3QkMyNUQwMDBBMURENTIgLyogSWRlbnRp
ZmllckV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWRlbnRpZmllckV4cHJlc3Npb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4ODMyN0JDMjY4NjAwQTFERDUyIC8q
IFN0cnVjdHVyZUFjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVBY2Nlc3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4ODUyN0JDMjZERjAwQTFERDUyIC8qIFR5
cGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVDb252ZXJzaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODg3MjdCQzM2MUUwMEExREQ1MiAvKiBMaXRlcmFs
RXhwcmVzc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGl0ZXJhbEV4cHJlc3Npb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICov
CiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTI2OSw4
ICszMTAsMTAgQEAKIAkJMUNFQkQ3RjYyNzE2QjMzMTAwQTUyNTREIC8qIFdHU0wgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTFDRUJEODA3MjcxNkMyQzAw
MEE1MjU0RCAvKiBBU1QuaCAqLywKKwkJCQkzM0VBMTg1QzI3QkMxOTNEMDBBMURENTIgLyogQVNU
ICovLAogCQkJCTFDRUJEODA0MjcxNkJGQUIwMEE1MjU0RCAvKiBjb25maWcuaCAqLywKKwkJCQkz
M0VBMTg2NTI3QkMxQUQ1MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmggKi8sCisJCQkJ
MzNFQTE4NjcyN0JDMUIxNDAwQTFERDUyIC8qIENvbXBpbGF0aW9uTWVzc2FnZS5jcHAgKi8sCiAJ
CQkJMzM4QkIyRDMyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmggKi8sCiAJCQkJMzM4QkIyRDUy
N0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLywKIAkJCQkzMzhCQjJEMTI3QjZCNjNGMDBF
MDY2QUIgLyogU291cmNlU3Bhbi5oICovLApAQCAtMzEwLDYgKzM1Myw0OCBAQAogCQkJbmFtZSA9
IEZyYW1ld29ya3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkzM0VBMTg1
QzI3QkMxOTNEMDBBMURENTIgLyogQVNUICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQkzM0VBMTg1RDI3QkMxOTRGMDBBMURENTIgLyogQVNUTm9kZS5oICov
LAorCQkJCTMzRUExODY5MjdCQzFCRTYwMEExREQ1MiAvKiBBdHRyaWJ1dGUuaCAqLywKKwkJCQkz
M0VBMTg2QjI3QkMxQ0JDMDBBMURENTIgLyogRXhwcmVzc2lvbi5oICovLAorCQkJCTMzRUExODdD
MjdCQzI0NjAwMEExREQ1MiAvKiBFeHByZXNzaW9ucyAqLywKKwkJCQkzM0VBMTg3NTI3QkMyMTZC
MDBBMURENTIgLyogRnVuY3Rpb25EZWNsLmggKi8sCisJCQkJMzNFQTE4NUYyN0JDMTk4MTAwQTFE
RDUyIC8qIEdsb2JhbERpcmVjdGl2ZS5oICovLAorCQkJCTMzRUExODYxMjdCQzE5QzEwMEExREQ1
MiAvKiBHbG9iYWxEZWNsLmggKi8sCisJCQkJMzNFQTE4NjMyN0JDMUExRDAwQTFERDUyIC8qIEds
b2JhbFZhcmlhYmxlRGVjbC5oICovLAorCQkJCTMzRUExODZGMjdCQzFFOEEwMEExREQ1MiAvKiBT
aGFkZXJNb2R1bGUuaCAqLywKKwkJCQkzM0VBMTg3ODI3QkMyMkFBMDBBMURENTIgLyogU3RhdGVt
ZW50LmggKi8sCisJCQkJMzNFQTE4NzcyN0JDMjI5QTAwQTFERDUyIC8qIFN0YXRlbWVudHMgKi8s
CisJCQkJMzNFQTE4NzMyN0JDMjA0OTAwQTFERDUyIC8qIFN0cnVjdHVyZURlY2wuaCAqLywKKwkJ
CQkzM0VBMTg2RDI3QkMxRDRDMDBBMURENTIgLyogVHlwZURlY2wuaCAqLywKKwkJCQkzM0VBMTg3
MTI3QkMxRkUxMDBBMURENTIgLyogVmFyaWFibGVRdWFsaWZpZXIuaCAqLywKKwkJCSk7CisJCQlw
YXRoID0gQVNUOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMzNFQTE4Nzcy
N0JDMjI5QTAwQTFERDUyIC8qIFN0YXRlbWVudHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTMzRUExODdGMjdCQzI0RTIwMEExREQ1MiAvKiBBc3NpZ25t
ZW50U3RhdGVtZW50LmggKi8sCisJCQkJMzNFQTE4N0EyN0JDMjMwRTAwQTFERDUyIC8qIENvbXBv
dW5kU3RhdGVtZW50LmggKi8sCisJCQkJMzNFQTE4N0QyN0JDMjQ5MDAwQTFERDUyIC8qIFJldHVy
blN0YXRlbWVudC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBTdGF0ZW1lbnRzOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMzNFQTE4N0MyN0JDMjQ2MDAwQTFERDUyIC8qIEV4
cHJlc3Npb25zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQkzM0VBMTg4MTI3QkMyNUQwMDBBMURENTIgLyogSWRlbnRpZmllckV4cHJlc3Npb24uaCAqLywK
KwkJCQkzM0VBMTg4MzI3QkMyNjg2MDBBMURENTIgLyogU3RydWN0dXJlQWNjZXNzLmggKi8sCisJ
CQkJMzNFQTE4ODUyN0JDMjZERjAwQTFERDUyIC8qIFR5cGVDb252ZXJzaW9uLmggKi8sCisJCQkJ
MzNFQTE4ODcyN0JDMzYxRTAwQTFERDUyIC8qIExpdGVyYWxFeHByZXNzaW9ucy5oICovLAorCQkJ
KTsKKwkJCXBhdGggPSBFeHByZXNzaW9uczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhIZWFkZXJzQnVp
bGRQaGFzZSBzZWN0aW9uICovCkBAIC0zMjcsMTAgKzQxMiwzMCBAQAogCQkJaXNhID0gUEJYSGVh
ZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmls
ZXMgPSAoCisJCQkJMzNFQTE4NzkyN0JDMjJBQTAwQTFERDUyIC8qIFN0YXRlbWVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzNFQTE4NUUyN0JDMTk0RjAwQTFERDUyIC8qIEFTVE5vZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMzRUExODg2MjdCQzI2REYwMEExREQ1MiAvKiBUeXBlQ29udmVyc2lv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4NjQyN0JDMUExRDAwQTFERDUyIC8qIEdsb2Jh
bFZhcmlhYmxlRGVjbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4N0IyN0JDMjMwRTAwQTFE
RDUyIC8qIENvbXBvdW5kU3RhdGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg3NjI3
QkMyMTZCMDBBMURENTIgLyogRnVuY3Rpb25EZWNsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzhC
QjJEMjI3QjZCNjNGMDBFMDY2QUIgLyogU291cmNlU3Bhbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzNFQTE4NjYyN0JDMUFENTAwQTFERDUyIC8qIENvbXBpbGF0aW9uTWVzc2FnZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMzNFQTE4NzAyN0JDMUU4QTAwQTFERDUyIC8qIFNoYWRlck1vZHVsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzM4QkIyRDQyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzM0VBMTg4ODI3QkMzNjFFMDBBMURENTIgLyogTGl0ZXJhbEV4cHJl
c3Npb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzhCQjJDRTI3QjZCNjAyMDBFMDY2QUIgLyog
VG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODZDMjdCQzFDQkMwMEExREQ1MiAvKiBF
eHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0VCRDdGODI3MTZCMzQ0MDBBNTI1NEQg
LyogV0dTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4NjIyN0JDMTlDMTAwQTFERDUyIC8q
IEdsb2JhbERlY2wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODgwMjdCQzI0RTIwMEExREQ1
MiAvKiBBc3NpZ25tZW50U3RhdGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg4NDI3
QkMyNjg2MDBBMURENTIgLyogU3RydWN0dXJlQWNjZXNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkz
M0VBMTg4MjI3QkMyNUQwMDBBMURENTIgLyogSWRlbnRpZmllckV4cHJlc3Npb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMzRUExODYwMjdCQzE5ODEwMEExREQ1MiAvKiBHbG9iYWxEaXJlY3RpdmUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODZFMjdCQzFENEMwMEExREQ1MiAvKiBUeXBlRGVj
bC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4NzQyN0JDMjA0OTAwQTFERDUyIC8qIFN0cnVj
dHVyZURlY2wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODdFMjdCQzI0OTAwMEExREQ1MiAv
KiBSZXR1cm5TdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODZBMjdCQzFCRTYw
MEExREQ1MiAvKiBBdHRyaWJ1dGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODcyMjdCQzFG
RTEwMEExREQ1MiAvKiBWYXJpYWJsZVF1YWxpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC01MTcs
NiArNjIyLDcgQEAKIAkJCQkzMzhCQjJENjI3QjZCNjg3MDBFMDY2QUIgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUNFQkQ4MDMyNzE2QkY4MjAwQTUyNTREIC8qIFdHU0wuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzM4QkIyRDAyN0I2QjYxQjAwRTA2NkFCIC8qIFRva2VuLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTMzRUExODY4MjdCQzFCMTQwMEExREQ1MiAvKiBDb21waWxhdGlv
bk1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cg==
</data>
<flag name="review"
          id="479405"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
    <flag name="commit-queue"
          id="479406"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454049</attachid>
            <date>2022-03-07 16:28:07 -0800</date>
            <delta_ts>2022-03-08 12:42:37 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patchAST</filename>
            <type>text/plain</type>
            <size>87295</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggNGU2ZGNmMzczYjQzLi4yMWM4MTlmZTk3ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQ2IEBACisyMDIyLTAyLTE1ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CisKKyAgICAgICAgW1dHU0xdIEFkZCBlbm91Z2ggb2YgdGhlIEFTVCBmb3IgdGhlIHNpbXBs
ZXN0IHNoYWRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNjY1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE15bGVzIE1heGZpZWxkLgorCisgICAg
ICAgIFRoZXNlIEFTVCBub2RlcyBhcmUganVzdCB0aG9zZSByZXF1aXJlZCBmb3IgdGhlIG1vc3Qg
dHJpdmlhbCBncmFwaGljcyBhbmQgY29tcHV0ZSBzaGFkZXJzLgorICAgICAgICBJIHVzZWQgdGhl
IG1hY2hpbmVyeSBmcm9tIHd0Zi9UeXBlQ2FzdHMgYXMgc3VnZ2VzdGVkIGJ5IE15bGVzIGluIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMyNzYuCisgICAgICAgIEN1
cnJlbnRseSBhbGwgb2YgdGhlIGNvZGUgZm9yIHRoZXNlIG5vZGVzIGlzIGluY2x1ZGVkIGluIFdH
U0wuY3BwIHRvIHZlcmlmeSB0aGF0IHRoZXkgYnVpbGQuIFRoaXMgd2lsbCBiZSByZW1vdmVkIGlu
IHRoZSBwYXJzZXIgcGF0Y2guCisKKyAgICAgICAgQXR0cmlidXRlcyBhcmUgYWRkZWQgaW4gc2V0
QXR0cmlidXRlcyBtZXRob2RzIGluc3RlYWQgb2YgYmVpbmcgcGFydCBvZiB0aGUgY29uc3RydWN0
b3JzLCBiZWNhdXNlIGl0IGNhbiBmYWlsLCBhbmQgcmV0dXJuaW5nIGFuIGVycm9yIGZyb20gYSBj
b25zdHJ1Y3RvciBpcyB0cmlja3kuCisKKyAgICAgICAgKiBXR1NML0FTVC9BdHRyaWJ1dGUuaDog
QWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkF0dHJpYnV0ZTo6QXR0cmlidXRlKToKKyAgICAg
ICAgKFdHU0w6OkFTVDo6QXR0cmlidXRlOjpraW5kIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6QXR0cmlidXRlOjppc0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXR0cmli
dXRlOjppc0dyb3VwIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXR0cmlidXRlOjppc0Jp
bmRpbmcgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzU3RhZ2UgY29u
c3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzTG9jYXRpb24gY29uc3QpOgor
ICAgICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzQnVpbHRpbiBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OkJsb2NrQXR0cmlidXRlOjpCbG9ja0F0dHJpYnV0ZSk6CisgICAgICAgIChX
R1NMOjpBU1Q6Okdyb3VwQXR0cmlidXRlOjpHcm91cEF0dHJpYnV0ZSk6CisgICAgICAgIChXR1NM
OjpBU1Q6Okdyb3VwQXR0cmlidXRlOjpncm91cCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6
OkJpbmRpbmdBdHRyaWJ1dGU6OkJpbmRpbmdBdHRyaWJ1dGUpOgorICAgICAgICAoV0dTTDo6QVNU
OjpCaW5kaW5nQXR0cmlidXRlOjpiaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6
U3RhZ2VBdHRyaWJ1dGU6OlN0YWdlQXR0cmlidXRlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3Rh
Z2VBdHRyaWJ1dGU6OnN0YWdlIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6QnVpbHRpbkF0
dHJpYnV0ZTo6QnVpbHRpbkF0dHJpYnV0ZSk6CisgICAgICAgIChXR1NMOjpBU1Q6OkJ1aWx0aW5B
dHRyaWJ1dGU6Om5hbWUgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpMb2NhdGlvbkF0dHJp
YnV0ZTo6TG9jYXRpb25BdHRyaWJ1dGUpOgorICAgICAgICAoV0dTTDo6QVNUOjpMb2NhdGlvbkF0
dHJpYnV0ZTo6bG9jYXRpb24gY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL0V4cHJlc3Npb24u
aDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkV4cHJlc3Npb246OkV4cHJlc3Npb24pOgor
ICAgICAgICAoV0dTTDo6QVNUOjpFeHByZXNzaW9uOjpraW5kIGNvbnN0KToKKyAgICAgICAgKFdH
U0w6OkFTVDo6RXhwcmVzc2lvbjo6aXNCb29sTGl0ZXJhbCBjb25zdCk6CisgICAgICAgIChXR1NM
OjpBU1Q6OkV4cHJlc3Npb246OmlzSW50MzJMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNVSW50MzJMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNGbG9hdDMyTGl0ZXJhbCBjb25zdCk6CisgICAgICAgIChXR1NM
OjpBU1Q6OkV4cHJlc3Npb246OmlzSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6OkV4cHJlc3Npb246OmlzU3RydWN0dXJlQWNjZXNzIGNvbnN0KToKKyAgICAgICAgKFdHU0w6
OkFTVDo6RXhwcmVzc2lvbjo6aXNUeXBlQ29udmVyc2lvbiBjb25zdCk6CisgICAgICAgICogV0dT
TC9BU1QvRXhwcmVzc2lvbnMvSWRlbnRpZmllckV4cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAg
IChXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uOjpJZGVudGlmaWVyRXhwcmVzc2lvbik6
CisgICAgICAgIChXR1NMOjpBU1Q6OklkZW50aWZpZXJFeHByZXNzaW9uOjppZGVudGlmaWVyIGNv
bnN0KToKKyAgICAgICAgKiBXR1NML0FTVC9FeHByZXNzaW9ucy9MaXRlcmFsRXhwcmVzc2lvbnMu
aDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OkJvb2xMaXRlcmFsOjpCb29sTGl0ZXJhbCk6
CisgICAgICAgIChXR1NMOjpBU1Q6OkJvb2xMaXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OkludDMyTGl0ZXJhbDo6SW50MzJMaXRlcmFsKToKKyAgICAgICAgKFdHU0w6
OkFTVDo6SW50MzJMaXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlVp
bnQzMkxpdGVyYWw6OlVpbnQzMkxpdGVyYWwpOgorICAgICAgICAoV0dTTDo6QVNUOjpVaW50MzJM
aXRlcmFsOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZsb2F0MzJMaXRlcmFs
OjpGbG9hdDMyTGl0ZXJhbCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZsb2F0MzJMaXRlcmFsOjp2
YWx1ZSBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNj
ZXNzLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpTdHJ1Y3R1cmVBY2Nlc3M6OlN0cnVj
dHVyZUFjY2Vzcyk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdHVyZUFjY2Vzczo6YmFzZSk6
CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdHVyZUFjY2Vzczo6ZmllbGROYW1lIGNvbnN0KToK
KyAgICAgICAgKiBXR1NML0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdHU0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OlR5cGVDb252ZXJzaW9uKToKKyAg
ICAgICAgKFdHU0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OnR5cGVEZWNsKToKKyAgICAgICAgKFdH
U0w6OkFTVDo6VHlwZUNvbnZlcnNpb246OmFyZ3VtZW50cyk6CisgICAgICAgICogV0dTTC9BU1Qv
RnVuY3Rpb25EZWNsLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpQYXJhbWV0ZXI6OlBh
cmFtZXRlcik6CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6c2V0QXR0cmlidXRlcyk6
CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6YnVpbHRpbiBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6bG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV0dTTDo6
QVNUOjpQYXJhbWV0ZXI6Om5hbWUgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpQYXJhbWV0
ZXI6OnR5cGUpOgorICAgICAgICAoV0dTTDo6QVNUOjpGdW5jdGlvbkRlY2w6OkZ1bmN0aW9uRGVj
bCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6c2V0QXR0cmlidXRlcyk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6c2V0UmV0dXJuQXR0cmlidXRlcyk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6ZW50cnlQb2ludFN0YWdlIGNvbnN0KToK
KyAgICAgICAgKFdHU0w6OkFTVDo6RnVuY3Rpb25EZWNsOjpuYW1lIGNvbnN0KToKKyAgICAgICAg
KFdHU0w6OkFTVDo6RnVuY3Rpb25EZWNsOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKFdHU0w6OkFT
VDo6RnVuY3Rpb25EZWNsOjpyZXR1cm5CdWlsdGluIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6RnVuY3Rpb25EZWNsOjpyZXR1cm5Mb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6OkZ1bmN0aW9uRGVjbDo6bWF5YmVSZXR1cm5UeXBlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6
RnVuY3Rpb25EZWNsOjpib2R5KToKKyAgICAgICAgKiBXR1NML0FTVC9HbG9iYWxEZWNsLmg6IEFk
ZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxEZWNsOjpHbG9iYWxEZWNsKToKKyAgICAg
ICAgKFdHU0w6OkFTVDo6R2xvYmFsRGVjbDo6a2luZCBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6Okdsb2JhbERlY2w6OmlzR2xvYmFsVmFyaWFibGUgY29uc3QpOgorICAgICAgICAoV0dTTDo6
QVNUOjpHbG9iYWxEZWNsOjppc1N0cnVjdCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okds
b2JhbERlY2w6OmlzRnVuY3Rpb24gY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL0dsb2JhbERp
cmVjdGl2ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsRGlyZWN0aXZlOjpu
YW1lIGNvbnN0KToKKyAgICAgICAgKiBXR1NML0FTVC9HbG9iYWxWYXJpYWJsZURlY2wuaDogQWRk
ZWQuCisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6R2xvYmFsVmFyaWFi
bGVEZWNsKToKKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsVmFyaWFibGVEZWNsOjpzZXRBdHRy
aWJ1dGVzKToKKyAgICAgICAgKFdHU0w6OkFTVDo6R2xvYmFsVmFyaWFibGVEZWNsOjpncm91cCBj
b25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6YmluZGluZyBj
b25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6bmFtZSBjb25z
dCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbDo6bWF5YmVRdWFsaWZp
ZXIpOgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxWYXJpYWJsZURlY2w6Om1heWJlVHlwZURl
Y2wpOgorICAgICAgICAoV0dTTDo6QVNUOjpHbG9iYWxWYXJpYWJsZURlY2w6Om1heWJlSW5pdGlh
bGl6ZXIpOgorICAgICAgICAqIFdHU0wvQVNUL1NoYWRlci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkdQVS9XR1NML0FTVC5oLgorICAgICAgICAqIFdHU0wvQVNUL1N0YXRlbWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6U3RhdGVtZW50OjpTdGF0ZW1lbnQpOgorICAgICAgICAo
V0dTTDo6QVNUOjpTdGF0ZW1lbnQ6OmtpbmQgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpT
dGF0ZW1lbnQ6OmlzQ29tcG91bmQgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpTdGF0ZW1l
bnQ6OmlzUmV0dXJuIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RhdGVtZW50Ojppc0Fz
c2lnbm1lbnQgY29uc3QpOgorICAgICAgICAqIFdHU0wvQVNUL1N0YXRlbWVudHMvQXNzaWdubWVu
dFN0YXRlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6QXNzaWdubWVudFN0YXRl
bWVudDo6QXNzaWdubWVudFN0YXRlbWVudCk6CisgICAgICAgIChXR1NMOjpBU1Q6OkFzc2lnbm1l
bnRTdGF0ZW1lbnQ6Om1heWJlTGhzKToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXNzaWdubWVudFN0
YXRlbWVudDo6cmhzKToKKyAgICAgICAgKiBXR1NML0FTVC9TdGF0ZW1lbnRzL1JldHVyblN0YXRl
bWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6UmV0dXJuU3RhdGVtZW50OjpSZXR1
cm5TdGF0ZW1lbnQpOgorICAgICAgICAoV0dTTDo6QVNUOjpSZXR1cm5TdGF0ZW1lbnQ6Om1heWJl
RXhwcmVzc2lvbik6CisgICAgICAgICogV0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oOiBBZGRlZC4K
KyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0TWVtYmVyOjpTdHJ1Y3RNZW1iZXIpOgorICAgICAg
ICAoV0dTTDo6QVNUOjpTdHJ1Y3RNZW1iZXI6OnNldEF0dHJpYnV0ZXMpOgorICAgICAgICAoV0dT
TDo6QVNUOjpTdHJ1Y3RNZW1iZXI6OmJ1aWx0aW4gY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNU
OjpTdHJ1Y3RNZW1iZXI6OmxvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3Ry
dWN0TWVtYmVyOjpuYW1lIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0TWVtYmVy
Ojp0eXBlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6U3RydWN0RGVjbDo6U3RydWN0RGVjbCk6Cisg
ICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdERlY2w6OnNldEF0dHJpYnV0ZXMpOgorICAgICAgICAo
V0dTTDo6QVNUOjpTdHJ1Y3REZWNsOjppc0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFT
VDo6U3RydWN0RGVjbDo6bmFtZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdERl
Y2w6Om1lbWJlcnMpOgorICAgICAgICAqIFdHU0wvQVNUL1R5cGVEZWNsLmg6IEFkZGVkLgorICAg
ICAgICAoV0dTTDo6QVNUOjpUeXBlRGVjbDo6VHlwZURlY2wpOgorICAgICAgICAoV0dTTDo6QVNU
OjpUeXBlRGVjbDo6a2luZCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlR5cGVEZWNsOjpp
c05hbWVkIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6VHlwZURlY2w6OmlzUGFyYW1ldGVy
aXplZCBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvVmFyaWFibGVRdWFsaWZpZXIuaDogQWRk
ZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OlZhcmlhYmxlUXVhbGlmaWVyOjpWYXJpYWJsZVF1YWxp
Zmllcik6CisgICAgICAgIChXR1NMOjpBU1Q6OlZhcmlhYmxlUXVhbGlmaWVyOjpzdG9yYWdlQ2xh
c3MgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpWYXJpYWJsZVF1YWxpZmllcjo6YWNjZXNz
TW9kZSBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1ROb2RlLmg6IEFkZGVkLgorICAgICAgICAo
V0dTTDo6QVNUOjpBU1ROb2RlOjpBU1ROb2RlKToKKyAgICAgICAgKFdHU0w6OkFTVDo6QVNUTm9k
ZTo6c3BhbiBjb25zdCk6CisgICAgICAgICogV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdHU0w6OkNvbXBpbGF0aW9uTWVzc2FnZTo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuaDogQWRkZWQuCisgICAgICAgIChXR1NM
OjpDb21waWxhdGlvbk1lc3NhZ2U6OkNvbXBpbGF0aW9uTWVzc2FnZSk6CisgICAgICAgICogV0dT
TC9XR1NMLmNwcDoKKyAgICAgICAgKiBXR1NML1dHU0wuaDoKKyAgICAgICAgKiBXZWJHUFUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMi0wMy0wNiAgTXlsZXMgQy4gTWF4ZmllbGQg
IDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIFVzZSBDKysgcmVmZXJl
bmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzIHdoZXJlIGFwcGxpY2FibGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFjM2E0MDRmZDVkLi4wMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkdQVS9XR1NML0FTVC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi1uYW1lc3BhY2UgV0dTTCB7Ci0KLWNsYXNzIEFTVCB7Ci0KLX07Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvQXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0F0dHJpYnV0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uN2UyMGFmNzI1YjA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FT
VC9BdHRyaWJ1dGUuaApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcu
aD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV0dTTDo6QVNUIHsKKworY2xhc3MgQXR0cmlidXRlIDogcHVibGljIEFTVE5v
ZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xh
c3MgS2luZCB7CisgICAgICAgIEJsb2NrLAorICAgICAgICBHcm91cCwKKyAgICAgICAgQmluZGlu
ZywKKyAgICAgICAgU3RhZ2UsCisgICAgICAgIExvY2F0aW9uLAorICAgICAgICBCdWlsdGluLAor
ICAgIH07CisKKyAgICBBdHRyaWJ1dGUoU291cmNlU3BhbiBzcGFuKQorICAgICAgICA6IEFTVE5v
ZGUoc3BhbikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+QXR0cmlidXRlKCkge307CisK
KyAgICB2aXJ0dWFsIEtpbmQga2luZCgpIGNvbnN0ID0gMCA7CisgICAgYm9vbCBpc0Jsb2NrKCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkJsb2NrOyB9CisgICAgYm9vbCBpc0dyb3Vw
KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6Okdyb3VwOyB9CisgICAgYm9vbCBpc0Jp
bmRpbmcoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6QmluZGluZzsgfQorICAgIGJv
b2wgaXNTdGFnZSgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpTdGFnZTsgfQorICAg
IGJvb2wgaXNMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpMb2NhdGlv
bjsgfQorICAgIGJvb2wgaXNCdWlsdGluKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6
OkJ1aWx0aW47IH0KK307CisKK2NsYXNzIEJsb2NrQXR0cmlidXRlIGZpbmFsIDogcHVibGljIEF0
dHJpYnV0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQmxv
Y2tBdHRyaWJ1dGUoU291cmNlU3BhbiBzcGFuKQorICAgICAgICA6IEF0dHJpYnV0ZShzcGFuKQor
ICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBL
aW5kOjpCbG9jazsgfQorfTsKKworY2xhc3MgR3JvdXBBdHRyaWJ1dGUgZmluYWwgOiBwdWJsaWMg
QXR0cmlidXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBH
cm91cEF0dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4sIHVuc2lnbmVkIGdyb3VwKQorICAgICAgICA6
IEF0dHJpYnV0ZShzcGFuKQorICAgICAgICAsIG1fdmFsdWUoZ3JvdXApCisgICAgeworICAgIH0K
KworICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6Okdyb3VwOyB9
CisgICAgdW5zaWduZWQgZ3JvdXAoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3ByaXZh
dGU6CisgICAgdW5zaWduZWQgbV92YWx1ZTsKK307CisKK2NsYXNzIEJpbmRpbmdBdHRyaWJ1dGUg
ZmluYWwgOiBwdWJsaWMgQXR0cmlidXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBCaW5kaW5nQXR0cmlidXRlKFNvdXJjZVNwYW4gc3BhbiwgdW5zaWduZWQg
YmluZGluZykKKyAgICAgICAgOiBBdHRyaWJ1dGUoc3BhbikKKyAgICAgICAgLCBtX3ZhbHVlKGJp
bmRpbmcpCisgICAgeworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEtpbmQ6OkJpbmRpbmc7IH0KKyAgICB1bnNpZ25lZCBiaW5kaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fdmFsdWU7Cit9Owor
CitjbGFzcyBTdGFnZUF0dHJpYnV0ZSBmaW5hbCA6IHB1YmxpYyBBdHRyaWJ1dGUgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgU3RhZ2UgOiB1
aW50OF90IHsKKyAgICAgICAgQ29tcHV0ZSwKKyAgICAgICAgVmVydGV4LAorICAgICAgICBGcmFn
bWVudAorICAgIH07CisKKyAgICBTdGFnZUF0dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4sIFN0YWdl
IHN0YWdlKQorICAgICAgICA6IEF0dHJpYnV0ZShzcGFuKQorICAgICAgICAsIG1fc3RhZ2Uoc3Rh
Z2UpCisgICAgeworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIEtpbmQ6OlN0YWdlOyB9CisgICAgU3RhZ2Ugc3RhZ2UoKSBjb25zdCB7IHJldHVybiBtX3N0
YWdlOyB9CisKK3ByaXZhdGU6CisgICAgU3RhZ2UgbV9zdGFnZTsKK307CisKK2NsYXNzIEJ1aWx0
aW5BdHRyaWJ1dGUgZmluYWwgOiBwdWJsaWMgQXR0cmlidXRlIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCdWlsdGluQXR0cmlidXRlKFNvdXJjZVNwYW4gc3Bh
biwgU3RyaW5nVmlldyBuYW1lKQorICAgICAgICA6IEF0dHJpYnV0ZShzcGFuKQorICAgICAgICAs
IG1fbmFtZShuYW1lKQorICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBLaW5kOjpCdWlsdGluOyB9CisgICAgY29uc3QgU3RyaW5nVmlldyYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZ1ZpZXcg
bV9uYW1lOworfTsKKworY2xhc3MgTG9jYXRpb25BdHRyaWJ1dGUgZmluYWwgOiBwdWJsaWMgQXR0
cmlidXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBMb2Nh
dGlvbkF0dHJpYnV0ZShTb3VyY2VTcGFuIHNwYW4sIHVuc2lnbmVkIHZhbHVlKQorICAgICAgICA6
IEF0dHJpYnV0ZShzcGFuKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KworICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6OkxvY2F0aW9u
OyB9CisgICAgdW5zaWduZWQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisK
K3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV92YWx1ZTsKK307CisKK3VzaW5nIEF0dHJpYnV0ZXMg
PSBWZWN0b3I8VW5pcXVlUmVmPEF0dHJpYnV0ZT4sIDI+OworCit9IC8vIG5hbWVzcGFjZSBXR1NM
OjpBU1QKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKFRv
VmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdHU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdHU0w6OkFTVDo6QXR0cmlidXRlJiBhdHRyKSB7IHJldHVybiBhdHRyLnByZWRpY2F0ZTsg
fSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0dTTF9BVFRSSUJVVEUoQmxvY2tBdHRyaWJ1dGUsIGlzQmxvY2soKSkKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0dTTF9BVFRSSUJVVEUoR3JvdXBBdHRyaWJ1dGUsIGlzR3JvdXAoKSkKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9BVFRSSUJVVEUoQmluZGluZ0F0dHJpYnV0ZSwgaXNC
aW5kaW5nKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKFN0YWdlQXR0
cmlidXRlLCBpc1N0YWdlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRF
KExvY2F0aW9uQXR0cmlidXRlLCBpc0xvY2F0aW9uKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X1dHU0xfQVRUUklCVVRFKEJ1aWx0aW5BdHRyaWJ1dGUsIGlzQnVpbHRpbigpKQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJHUFUv
V0dTTC9BU1QvRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uYzg2YjA4YjI5YmQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9FeHByZXNzaW9uLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
KworbmFtZXNwYWNlIFdHU0w6OkFTVCB7CisKK2NsYXNzIEV4cHJlc3Npb24gOiBwdWJsaWMgQVNU
Tm9kZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBj
bGFzcyBLaW5kIHsKKyAgICAgICAgQm9vbExpdGVyYWwsCisgICAgICAgIEludDMyTGl0ZXJhbCwK
KyAgICAgICAgVWludDMyTGl0ZXJhbCwKKyAgICAgICAgRmxvYXQzMkxpdGVyYWwsCisgICAgICAg
IElkZW50aWZpZXIsCisgICAgICAgIFN0cnVjdHVyZUFjY2VzcywKKyAgICAgICAgVHlwZUNvbnZl
cnNpb24sCisgICAgfTsKKworICAgIEV4cHJlc3Npb24oU291cmNlU3BhbiBzcGFuKQorICAgICAg
ICA6IEFTVE5vZGUoc3BhbikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RXhwcmVzc2lv
bigpIHt9CisKKyAgICB2aXJ0dWFsIEtpbmQga2luZCgpIGNvbnN0ICA9IDA7CisgICAgYm9vbCBp
c0Jvb2xMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkJvb2xMaXRlcmFs
OyB9CisgICAgYm9vbCBpc0ludDMyTGl0ZXJhbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBL
aW5kOjpJbnQzMkxpdGVyYWw7IH0KKyAgICBib29sIGlzVUludDMyTGl0ZXJhbCgpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpVaW50MzJMaXRlcmFsOyB9CisgICAgYm9vbCBpc0Zsb2F0
MzJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkZsb2F0MzJMaXRlcmFs
OyB9CisgICAgYm9vbCBpc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2lu
ZDo6SWRlbnRpZmllcjsgfQorICAgIGJvb2wgaXNTdHJ1Y3R1cmVBY2Nlc3MoKSBjb25zdCB7IHJl
dHVybiBraW5kKCkgPT0gS2luZDo6U3RydWN0dXJlQWNjZXNzOyB9CisgICAgYm9vbCBpc1R5cGVD
b252ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OlR5cGVDb252ZXJzaW9u
OyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1dHU0xfRVhQUkVTU0lPTihUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkg
XAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXR1NMOjpBU1Q6OlRvVmFsdWVUeXBlTmFt
ZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXR1NMOjpBU1Q6OkV4cHJlc3Npb24m
IGV4cHJlc3Npb24pIHsgcmV0dXJuIGV4cHJlc3Npb24ucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1Qv
RXhwcmVzc2lvbnMvSWRlbnRpZmllckV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvRXhwcmVzc2lvbnMvSWRlbnRpZmllckV4cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAuLjhhYjcyZDkwM2E0MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvSWRlbnRpZmllckV4cHJlc3Npb24uaApA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1lc3Bh
Y2UgV0dTTDo6QVNUIHsKKworY2xhc3MgSWRlbnRpZmllckV4cHJlc3Npb24gZmluYWwgOiBwdWJs
aWMgRXhwcmVzc2lvbiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgSWRlbnRpZmllckV4cHJlc3Npb24oU291cmNlU3BhbiBzcGFuLCBTdHJpbmdWaWV3IGlkZW50
aWZpZXIpCisgICAgICAgIDogRXhwcmVzc2lvbihzcGFuKQorICAgICAgICAsIG1faWRlbnRpZmll
cihpZGVudGlmaWVyKQorICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBLaW5kOjpJZGVudGlmaWVyOyB9CisgICAgY29uc3QgU3RyaW5nVmlldyYg
aWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCitwcml2YXRlOgor
ICAgIFN0cmluZ1ZpZXcgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6
QVNUCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9FWFBSRVNTSU9OKElkZW50aWZpZXJF
eHByZXNzaW9uLCBpc0lkZW50aWZpZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dT
TC9BU1QvRXhwcmVzc2lvbnMvTGl0ZXJhbEV4cHJlc3Npb25zLmggYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0V4cHJlc3Npb25zL0xpdGVyYWxFeHByZXNzaW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMWRlYzc2YjZlOGRmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9MaXRlcmFsRXhwcmVzc2lvbnMuaApA
QCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBX
R1NMOjpBU1QgeworCitjbGFzcyBCb29sTGl0ZXJhbCBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9u
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCb29sTGl0ZXJh
bChTb3VyY2VTcGFuIHNwYW4sIGJvb2wgdmFsdWUpCisgICAgICAgIDogRXhwcmVzc2lvbihzcGFu
KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIEtpbmQga2lu
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6OkJvb2xMaXRlcmFsOyB9CisgICAgYm9v
bCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBib29s
IG1fdmFsdWU7Cit9OworCitjbGFzcyBJbnQzMkxpdGVyYWwgZmluYWwgOiBwdWJsaWMgRXhwcmVz
c2lvbiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSW50MzJM
aXRlcmFsKFNvdXJjZVNwYW4gc3BhbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBFeHByZXNz
aW9uKHNwYW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAg
S2luZCBraW5kKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2luZDo6SW50MzJMaXRlcmFsOyB9
CisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJpdmF0
ZToKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCitjbGFzcyBVaW50MzJMaXRlcmFsIGZpbmFs
IDogcHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFVpbnQzMkxpdGVyYWwoU291cmNlU3BhbiBzcGFuLCB1aW50MzJfdCB2YWx1ZSkK
KyAgICAgICAgOiBFeHByZXNzaW9uKHNwYW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAg
ICB7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2lu
ZDo6VWludDMyTGl0ZXJhbDsgfQorICAgIHVpbnQzMl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fdmFsdWU7Cit9OworCitjbGFz
cyBGbG9hdDMyTGl0ZXJhbCBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGbG9hdDMyTGl0ZXJhbChTb3VyY2VTcGFu
IHNwYW4sIGZsb2F0IHZhbHVlKQorICAgICAgICA6IEV4cHJlc3Npb24oc3BhbikKKyAgICAgICAg
LCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBLaW5kOjpGbG9hdDMyTGl0ZXJhbDsgfQorICAgIGZsb2F0IHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IG1fdmFs
dWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XR1NMX0VYUFJFU1NJT04oQm9vbExpdGVyYWwsIGlzQm9vbExpdGVyYWwoKSkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9FWFBSRVNTSU9OKEludDMyTGl0ZXJhbCwgaXNJbnQzMkxp
dGVyYWwoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9FWFBSRVNTSU9OKEZsb2F0MzJM
aXRlcmFsLCBpc0Zsb2F0MzJMaXRlcmFsKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xf
RVhQUkVTU0lPTihVaW50MzJMaXRlcmFsLCBpc1VJbnQzMkxpdGVyYWwoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNjZXNzLmggYi9T
b3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb25zL1N0cnVjdHVyZUFjY2Vzcy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzdiNWQyODUwYWYwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVB
Y2Nlc3MuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgor
CituYW1lc3BhY2UgV0dTTDo6QVNUIHsKKworY2xhc3MgU3RydWN0dXJlQWNjZXNzIGZpbmFsIDog
cHVibGljIEV4cHJlc3Npb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFN0cnVjdHVyZUFjY2VzcyhTb3VyY2VTcGFuIHNwYW4sIFVuaXF1ZVJlZjxFeHByZXNz
aW9uPiYmIGJhc2UsIFN0cmluZ1ZpZXcgZmllbGROYW1lKQorICAgICAgICA6IEV4cHJlc3Npb24o
c3BhbikKKyAgICAgICAgLCBtX2Jhc2UoV1RGTW92ZShiYXNlKSkKKyAgICAgICAgLCBtX2ZpZWxk
TmFtZShmaWVsZE5hbWUpCisgICAgeworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6OlN0cnVjdHVyZUFjY2VzczsgfQorICAgIFVuaXF1ZVJlZjxF
eHByZXNzaW9uPiYgYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIGNvbnN0IFN0cmluZ1Zp
ZXcmIGZpZWxkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmllbGROYW1lOyB9CisKK3ByaXZhdGU6
CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fYmFzZTsKKyAgICBTdHJpbmdWaWV3IG1fZmll
bGROYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0dTTF9FWFBSRVNTSU9OKFN0cnVjdHVyZUFjY2VzcywgaXNTdHJ1Y3R1cmVBY2Nl
c3MoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvVHlw
ZUNvbnZlcnNpb24uaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVzc2lvbnMvVHlwZUNv
bnZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQxNTdl
OWY4YWUwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRXhwcmVz
c2lvbnMvVHlwZUNvbnZlcnNpb24uaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1
ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdHU0w6OkFTVCB7
CisKKy8vIE1heSBiZSBjb252ZXJ0ZWQgdG8gYSBmdW5jdGlvbiBjYWxsIGR1cmluZyB2YWxpZGF0
aW9uLCBhcyB3ZSBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlIGR1cmluZyBwYXJzaW5nLgorY2xh
c3MgVHlwZUNvbnZlcnNpb24gZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVHlwZUNvbnZlcnNpb24oU291cmNlU3Bh
biBzcGFuLCBVbmlxdWVSZWY8VHlwZURlY2w+JiYgdHlwZURlY2wsIFZlY3RvcjxVbmlxdWVSZWY8
RXhwcmVzc2lvbj4+JiYgYXJndW1lbnRzKQorICAgICAgICA6IEV4cHJlc3Npb24oc3BhbikKKyAg
ICAgICAgLCBtX3R5cGVEZWNsKFdURk1vdmUodHlwZURlY2wpKQorICAgICAgICAsIG1fYXJndW1l
bnRzKFdURk1vdmUoYXJndW1lbnRzKSkKKyAgICB7CisgICAgfQorCisgICAgS2luZCBraW5kKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2luZDo6VHlwZUNvbnZlcnNpb247IH0KKyAgICBVbmlx
dWVSZWY8VHlwZURlY2w+JiB0eXBlRGVjbCgpIHsgcmV0dXJuIG1fdHlwZURlY2w7IH0KKyAgICBW
ZWN0b3I8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYgYXJndW1lbnRzKCkgeyByZXR1cm4gbV9hcmd1
bWVudHM7IH0KKworcHJpdmF0ZToKKyAgICBVbmlxdWVSZWY8VHlwZURlY2w+IG1fdHlwZURlY2w7
CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9hcmd1bWVudHM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0VY
UFJFU1NJT04oVHlwZUNvbnZlcnNpb24sIGlzVHlwZUNvbnZlcnNpb24oKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRnVuY3Rpb25EZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0Z1bmN0aW9uRGVjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uZDNjZjcyZGU4ODk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9GdW5jdGlvbkRlY2wuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisj
aW5jbHVkZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiU3RhdGVtZW50cy9Db21w
b3VuZFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlR5cGVEZWNsLmgiCisKK25hbWVzcGFjZSBXR1NM
OjpBU1QgeworCitjbGFzcyBQYXJhbWV0ZXIgZmluYWwgOiBwdWJsaWMgQVNUTm9kZSB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUGFyYW1ldGVyKFNvdXJjZVNw
YW4gc3BhbiwgU3RyaW5nVmlldyBuYW1lLCBVbmlxdWVSZWY8VHlwZURlY2w+JiYgdHlwZSwgQXR0
cmlidXRlcyYmIGF0dHJpYnV0ZXMpCisgICAgICAgIDogQVNUTm9kZShzcGFuKQorICAgICAgICAs
IG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQor
ICAgICAgICAsIG1fYXR0cmlidXRlcyhXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgIHsKKyAgICB9
CisKKyAgICBjb25zdCBTdHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgVHlwZURlY2wmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KKworcHJpdmF0ZToKKyAg
ICBTdHJpbmdWaWV3IG1fbmFtZTsKKyAgICBVbmlxdWVSZWY8VHlwZURlY2w+IG1fdHlwZTsKKyAg
ICBBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKK307CisKK2NsYXNzIEZ1bmN0aW9uRGVjbCBmaW5h
bCA6IHB1YmxpYyBHbG9iYWxEZWNsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBGdW5jdGlvbkRlY2woU291cmNlU3BhbiBzb3VyY2VTcGFuLCBTdHJpbmdWaWV3
IG5hbWUsIFZlY3RvcjxVbmlxdWVSZWY8UGFyYW1ldGVyPj4mJiBwYXJhbWV0ZXJzLCBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZURlY2w+JiYgcmV0dXJuVHlwZSwgQ29tcG91bmRTdGF0ZW1lbnQmJiBib2R5
LCBBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcywgQXR0cmlidXRlcyYmIHJldHVybkF0dHJpYnV0ZXMp
CisgICAgICAgIDogR2xvYmFsRGVjbChzb3VyY2VTcGFuKQorICAgICAgICAsIG1fbmFtZShuYW1l
KQorICAgICAgICAsIG1fcGFyYW1ldGVycyhXVEZNb3ZlKHBhcmFtZXRlcnMpKQorICAgICAgICAs
IG1fYXR0cmlidXRlcyhXVEZNb3ZlKGF0dHJpYnV0ZXMpKQorICAgICAgICAsIG1fcmV0dXJuQXR0
cmlidXRlcyhXVEZNb3ZlKHJldHVybkF0dHJpYnV0ZXMpKQorICAgICAgICAsIG1fcmV0dXJuVHlw
ZShXVEZNb3ZlKHJldHVyblR5cGUpKQorICAgICAgICAsIG1fYm9keShXVEZNb3ZlKGJvZHkpKQor
ICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBL
aW5kOjpGdW5jdGlvbjsgfQorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX25hbWU7IH0KKyAgICBWZWN0b3I8VW5pcXVlUmVmPFBhcmFtZXRlcj4+JiBwYXJhbWV0
ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgQXR0cmlidXRlcyYgYXR0cmlidXRl
cygpIHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIEF0dHJpYnV0ZXMmIHJldHVybkF0dHJp
YnV0ZXMoKSB7IHJldHVybiBtX3JldHVybkF0dHJpYnV0ZXM7IH0KKyAgICBUeXBlRGVjbCogbWF5
YmVSZXR1cm5UeXBlKCkgeyByZXR1cm4gbV9yZXR1cm5UeXBlLmdldCgpOyB9CisgICAgQ29tcG91
bmRTdGF0ZW1lbnQmIGJvZHkoKSB7IHJldHVybiBtX2JvZHk7IH0KKworcHJpdmF0ZToKKyAgICBT
dHJpbmdWaWV3IG1fbmFtZTsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPFBhcmFtZXRlcj4+IG1fcGFy
YW1ldGVyczsKKyAgICBBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICBBdHRyaWJ1dGVzIG1f
cmV0dXJuQXR0cmlidXRlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZURlY2w+IG1fcmV0dXJu
VHlwZTsKKyAgICBDb21wb3VuZFN0YXRlbWVudCBtX2JvZHk7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0dMT0JBTF9ERUNMKEZ1
bmN0aW9uRGVjbCwgaXNGdW5jdGlvbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9HbG9iYWxEZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0dsb2JhbERlY2wuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQwYzE1Zjg0MGYwZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvR2xvYmFsRGVjbC5oCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFTVE5v
ZGUuaCIKKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisKK25hbWVzcGFjZSBXR1NMOjpBU1Qg
eworCitjbGFzcyBHbG9iYWxEZWNsIDogcHVibGljIEFTVE5vZGUgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgS2luZCB7CisgICAgICAgIEds
b2JhbFZhcmlhYmxlLAorICAgICAgICBTdHJ1Y3QsCisgICAgICAgIEZ1bmN0aW9uLAorICAgIH07
CisKKyAgICBHbG9iYWxEZWNsKFNvdXJjZVNwYW4gc3BhbikKKyAgICAgICAgOiBBU1ROb2RlKHNw
YW4pCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkdsb2JhbERlY2woKSB7fQorCisgICAg
dmlydHVhbCBLaW5kIGtpbmQoKSBjb25zdCA9IDA7CisgICAgYm9vbCBpc0dsb2JhbFZhcmlhYmxl
KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6Okdsb2JhbFZhcmlhYmxlOyB9CisgICAg
Ym9vbCBpc1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpTdHJ1Y3Q7IH0K
KyAgICBib29sIGlzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6RnVu
Y3Rpb247IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVAorCisjZGVmaW5lIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9HTE9CQUxfREVDTChUb1ZhbHVlVHlwZU5hbWUsIHByZWRp
Y2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXR1NMOjpBU1Q6OlRvVmFsdWVU
eXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXR1NMOjpBU1Q6Okdsb2Jh
bERlY2wmIGRlY2wpIHsgcmV0dXJuIGRlY2wucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvR2xvYmFs
RGlyZWN0aXZlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0dsb2JhbERpcmVjdGl2ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmI4NWUyOTkzODhjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9HbG9iYWxEaXJlY3RpdmUuaApA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJB
U1ROb2RlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
R1NMOjpBU1QgeworCitjbGFzcyBHbG9iYWxEaXJlY3RpdmUgOiBwdWJsaWMgQVNUTm9kZSB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR2xvYmFsRGlyZWN0aXZl
KFNvdXJjZVNwYW4gc3BhbiwgU3RyaW5nVmlldyBuYW1lKQorICAgICAgICA6IEFTVE5vZGUoc3Bh
bikKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgU3Ry
aW5nVmlldyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCitwcml2YXRlOgorICAg
IFN0cmluZ1ZpZXcgbV9uYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0dsb2JhbFZhcmlhYmxlRGVjbC5oIGIvU291
cmNlL1dlYkdQVS9XR1NML0FTVC9HbG9iYWxWYXJpYWJsZURlY2wuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjZlOGM4MjY2NmNhNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvR2xvYmFsVmFyaWFibGVEZWNsLmgKQEAgLTAsMCArMSw3
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXR0cmlidXRlLmgi
CisjaW5jbHVkZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIkdsb2JhbERlY2wuaCIKKyNpbmNsdWRlICJUeXBlRGVjbC5oIgorI2luY2x1
ZGUgIlZhcmlhYmxlUXVhbGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBHbG9iYWxWYXJpYWJsZURlY2wgZmlu
YWwgOiBwdWJsaWMgR2xvYmFsRGVjbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgR2xvYmFsVmFyaWFibGVEZWNsKFNvdXJjZVNwYW4gc3BhbiwgU3RyaW5nVmll
dyBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VmFyaWFibGVRdWFsaWZpZXI+JiYgcXVhbGlmaWVyLCBz
dGQ6OnVuaXF1ZV9wdHI8VHlwZURlY2w+JiYgdHlwZSwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Np
b24+JiYgaW5pdGlhbGl6ZXIsIEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQorICAgICAgICA6IEds
b2JhbERlY2woc3BhbikKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICAgICAgLCBtX2F0dHJp
YnV0ZXMoV1RGTW92ZShhdHRyaWJ1dGVzKSkKKyAgICAgICAgLCBtX3F1YWxpZmllcihXVEZNb3Zl
KHF1YWxpZmllcikpCisgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCisgICAgICAgICwg
bV9pbml0aWFsaXplcihXVEZNb3ZlKGluaXRpYWxpemVyKSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3R5cGUgfHwgbV9pbml0aWFsaXplcik7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2luZDo6R2xvYmFsVmFyaWFibGU7IH0KKyAgICBjb25zdCBT
dHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgQXR0cmlidXRl
cyYgYXR0cmlidXRlcygpIHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIFZhcmlhYmxlUXVh
bGlmaWVyKiBtYXliZVF1YWxpZmllcigpIHsgcmV0dXJuIG1fcXVhbGlmaWVyLmdldCgpOyB9Cisg
ICAgVHlwZURlY2wqIG1heWJlVHlwZURlY2woKSB7IHJldHVybiBtX3R5cGUuZ2V0KCk7IH0KKyAg
ICBFeHByZXNzaW9uKiBtYXliZUluaXRpYWxpemVyKCkgeyByZXR1cm4gbV9pbml0aWFsaXplci5n
ZXQoKTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZ1ZpZXcgbV9uYW1lOworICAgIEF0dHJpYnV0
ZXMgbV9hdHRyaWJ1dGVzOworICAgIC8vIEVhY2ggb2YgdGhlIGZvbGxvd2luZyBtYXkgYmUgbnVs
bAorICAgIC8vIEJ1dCBhdCBsZWFzdCBvbmUgb2YgdHlwZSBhbmQgaW5pdGlhbGl6ZXIgbXVzdCBi
ZSBub24tbnVsbAorICAgIHN0ZDo6dW5pcXVlX3B0cjxWYXJpYWJsZVF1YWxpZmllcj4gbV9xdWFs
aWZpZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVEZWNsPiBtX3R5cGU7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1faW5pdGlhbGl6ZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0dMT0JBTF9ERUNMKEds
b2JhbFZhcmlhYmxlRGVjbCwgaXNHbG9iYWxWYXJpYWJsZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XR1NML0FTVC9TaGFkZXJNb2R1bGUuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1Qv
U2hhZGVyTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5m
MDZkZGYzMDcwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1No
YWRlck1vZHVsZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFTVE5vZGUuaCIK
KyNpbmNsdWRlICJHbG9iYWxEZWNsLmgiCisjaW5jbHVkZSAiR2xvYmFsRGlyZWN0aXZlLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXR1NMOjpBU1Qg
eworCitjbGFzcyBTaGFkZXJNb2R1bGUgZmluYWwgOiBBU1ROb2RlIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTaGFkZXJNb2R1bGUoU291cmNlU3BhbiBzcGFu
LCBWZWN0b3I8VW5pcXVlUmVmPEdsb2JhbERpcmVjdGl2ZT4+JiYgZGlyZWN0aXZlcywgVmVjdG9y
PFVuaXF1ZVJlZjxHbG9iYWxEZWNsPj4mJiBkZWNscykKKyAgICAgICAgOiBBU1ROb2RlKHNwYW4p
CisgICAgICAgICwgbV9kaXJlY3RpdmVzKFdURk1vdmUoZGlyZWN0aXZlcykpCisgICAgeworICAg
ICAgICBmb3IgKGF1dG8mIGRlY2wgOiBkZWNscykgeworICAgICAgICAgICAgaWYgKGlzPFN0cnVj
dERlY2w+KGRlY2wuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBnbyBm
cm9tIFVuaXF1ZVJlZjxCYXNlQ2xhc3M+IHRvIFVuaXF1ZVJlZjxEZXJpdmVkQ2xhc3M+LCBidXQg
dGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRvd25jYXN0LgorICAgICAgICAgICAgICAgIC8vIFNv
IGluc3RlYWQgd2UgZG8gVW5pcXVlUmVmIC0+IHVuaXF1ZV9wdHIgLT4gcmF3X3BvaW50ZXIgLShk
b3duY2FzdCktPiByYXdfcG9pbnRlciAtPiB1bmlxdWVfcHRyIC0+IFVuaXF1ZVJlZi4uLgorICAg
ICAgICAgICAgICAgIEdsb2JhbERlY2wqIHJhd1B0ciA9IGRlY2wubW92ZVRvVW5pcXVlUHRyKCku
cmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdERlY2wqIGRvd25jYXN0ZWRSYXdQdHIg
PSBkb3duY2FzdDxTdHJ1Y3REZWNsPihyYXdQdHIpOworICAgICAgICAgICAgICAgIG1fc3RydWN0
cy5hcHBlbmQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0ZDo6dW5pcXVlX3B0
cjxTdHJ1Y3REZWNsPihkb3duY2FzdGVkUmF3UHRyKSkpOworICAgICAgICAgICAgfSBlbHNlIGlm
IChpczxHbG9iYWxWYXJpYWJsZURlY2w+KGRlY2wuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAg
R2xvYmFsRGVjbCogcmF3UHRyID0gZGVjbC5tb3ZlVG9VbmlxdWVQdHIoKS5yZWxlYXNlKCk7Cisg
ICAgICAgICAgICAgICAgR2xvYmFsVmFyaWFibGVEZWNsKiBkb3duY2FzdGVkUmF3UHRyID0gZG93
bmNhc3Q8R2xvYmFsVmFyaWFibGVEZWNsPihyYXdQdHIpOworICAgICAgICAgICAgICAgIG1fZ2xv
YmFsVmFycy5hcHBlbmQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0ZDo6dW5p
cXVlX3B0cjxHbG9iYWxWYXJpYWJsZURlY2w+KGRvd25jYXN0ZWRSYXdQdHIpKSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdsb2JhbERlY2wqIHJhd1B0ciA9IGRlY2wu
bW92ZVRvVW5pcXVlUHRyKCkucmVsZWFzZSgpOworICAgICAgICAgICAgICAgIEZ1bmN0aW9uRGVj
bCogZnVuYyA9IGRvd25jYXN0PEZ1bmN0aW9uRGVjbD4ocmF3UHRyKTsKKyAgICAgICAgICAgICAg
ICBtX2Z1bmN0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKHN0
ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkRlY2w+KGZ1bmMpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEdsb2JhbERpcmVjdGl2ZT4+JiBk
aXJlY3RpdmVzKCkgeyByZXR1cm4gbV9kaXJlY3RpdmVzOyB9CisgICAgVmVjdG9yPFVuaXF1ZVJl
ZjxTdHJ1Y3REZWNsPj4mIHN0cnVjdHMoKSB7IHJldHVybiBtX3N0cnVjdHM7IH0KKyAgICBWZWN0
b3I8VW5pcXVlUmVmPEdsb2JhbFZhcmlhYmxlRGVjbD4+JiBnbG9iYWxWYXJzKCkgeyByZXR1cm4g
bV9nbG9iYWxWYXJzOyB9CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxGdW5jdGlvbkRlY2w+PiYgZnVu
Y3Rpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8
VW5pcXVlUmVmPEdsb2JhbERpcmVjdGl2ZT4+IG1fZGlyZWN0aXZlczsKKworICAgIFZlY3RvcjxV
bmlxdWVSZWY8U3RydWN0RGVjbD4+IG1fc3RydWN0czsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEds
b2JhbFZhcmlhYmxlRGVjbD4+IG1fZ2xvYmFsVmFyczsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEZ1
bmN0aW9uRGVjbD4+IG1fZnVuY3Rpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNU
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudC5oIGIvU291cmNl
L1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjFhY2E0ZTVjN2QyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJH
UFUvV0dTTC9BU1QvU3RhdGVtZW50LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2Fz
dHMuaD4KKworbmFtZXNwYWNlIFdHU0w6OkFTVCB7CisKK2NsYXNzIFN0YXRlbWVudCA6IHB1Ymxp
YyBBU1ROb2RlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAg
IGVudW0gY2xhc3MgS2luZCA6IHVpbnQ4X3QgeworICAgICAgICBDb21wb3VuZCwKKyAgICAgICAg
UmV0dXJuLAorICAgICAgICBBc3NpZ25tZW50LAorICAgIH07CisKKyAgICBTdGF0ZW1lbnQoU291
cmNlU3BhbiBzcGFuKQorICAgICAgICA6IEFTVE5vZGUoc3BhbikKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB+U3RhdGVtZW50KCkge30KKworICAgIHZpcnR1YWwgS2luZCBraW5kKCkgY29u
c3QgPSAwOworICAgIGJvb2wgaXNDb21wb3VuZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBL
aW5kOjpDb21wb3VuZDsgfQorICAgIGJvb2wgaXNSZXR1cm4oKSBjb25zdCB7IHJldHVybiBraW5k
KCkgPT0gS2luZDo6UmV0dXJuOyB9CisgICAgYm9vbCBpc0Fzc2lnbm1lbnQoKSBjb25zdCB7IHJl
dHVybiBraW5kKCkgPT0gS2luZDo6QXNzaWdubWVudDsgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V0dTTDo6QVNUCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX1NUQVRFTUVO
VChUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19C
RUdJTihXR1NMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlw
ZShjb25zdCBXR1NMOjpBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KSB7IHJldHVybiBzdGF0ZW1l
bnQucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50
LmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudHMvQXNzaWdubWVudFN0YXRlbWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGU0YzY0MWVmMGUz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1lbnRzL0Fz
c2lnbm1lbnRTdGF0ZW1lbnQuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiU3RhdGVtZW50Lmgi
CisKK25hbWVzcGFjZSBXR1NMOjpBU1QgeworCitjbGFzcyBBc3NpZ25tZW50U3RhdGVtZW50IGZp
bmFsIDogcHVibGljIFN0YXRlbWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgQXNzaWdubWVudFN0YXRlbWVudChTb3VyY2VTcGFuIHNwYW4sIHN0ZDo6dW5p
cXVlX3B0cjxFeHByZXNzaW9uPiYmIGxocywgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgcmhzKQor
ICAgICAgICA6IFN0YXRlbWVudChzcGFuKQorICAgICAgICAsIG1fbGhzKFdURk1vdmUobGhzKSkK
KyAgICAgICAgLCBtX3JocyhXVEZNb3ZlKHJocykpCisgICAgeworICAgIH0KKworICAgIEtpbmQg
a2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6OkFzc2lnbm1lbnQ7IH0KKyAgICBF
eHByZXNzaW9uKiBtYXliZUxocygpIHsgcmV0dXJuIG1fbGhzLmdldCgpOyB9CisgICAgRXhwcmVz
c2lvbiYgcmhzKCkgeyByZXR1cm4gbV9yaHM7IH0KKworcHJpdmF0ZToKKyAgICAvLyBMSFMgY2Fu
IGJlIG51bGwgaW4gdGhlIGNhc2UgaXQgaXMgJ18nLCBidXQgUkhTIGlzIG5ldmVyIG51bGwKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9saHM7CisgICAgVW5pcXVlUmVmPEV4cHJl
c3Npb24+IG1fcmhzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfV0dTTF9TVEFURU1FTlQoQXNzaWdubWVudFN0YXRlbWVudCwgaXNBc3Np
Z25tZW50KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudHMv
Q29tcG91bmRTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9D
b21wb3VuZFN0YXRlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uMDYyYTc2NDcyNDcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FT
VC9TdGF0ZW1lbnRzL0NvbXBvdW5kU3RhdGVtZW50LmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3RhdGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXR1NMOjpBU1QgeworCitjbGFzcyBDb21wb3VuZFN0YXRlbWVudCBmaW5hbCA6IHB1YmxpYyBT
dGF0ZW1lbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENv
bXBvdW5kU3RhdGVtZW50KFNvdXJjZVNwYW4gc3BhbiwgVmVjdG9yPFVuaXF1ZVJlZjxTdGF0ZW1l
bnQ+PiYmIHN0YXRlbWVudHMpCisgICAgICAgIDogU3RhdGVtZW50KHNwYW4pCisgICAgICAgICwg
bV9zdGF0ZW1lbnRzKFdURk1vdmUoc3RhdGVtZW50cykpCisgICAgeworICAgIH0KKworICAgIEtp
bmQga2luZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtpbmQ6OkNvbXBvdW5kOyB9CisgICAg
VmVjdG9yPFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+PiYgc3RhdGVtZW50cygpIHsgcmV0dXJuIG1fc3Rh
dGVtZW50czsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxVbmlxdWVSZWY8U3RhdGVtZW50Pj4g
bV9zdGF0ZW1lbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfV0dTTF9TVEFURU1FTlQoQ29tcG91bmRTdGF0ZW1lbnQsIGlzQ29tcG91
bmQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9SZXR1
cm5TdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9SZXR1cm5T
dGF0ZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRkMzc2
ZWNmNmU1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVt
ZW50cy9SZXR1cm5TdGF0ZW1lbnQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIlN0YXRlbWVudC5oIgorCituYW1lc3BhY2UgV0dTTDo6QVNUIHsKKworY2xhc3MgUmV0
dXJuU3RhdGVtZW50IGZpbmFsIDogcHVibGljIFN0YXRlbWVudCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUmV0dXJuU3RhdGVtZW50KFNvdXJjZVNwYW4gc3Bh
biwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgZXhwcmVzc2lvbikKKyAgICAgICAgOiBT
dGF0ZW1lbnQoc3BhbikKKyAgICAgICAgLCBtX2V4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9u
KSkKKyAgICB7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gS2luZDo6UmV0dXJuOyB9CisgICAgRXhwcmVzc2lvbiogbWF5YmVFeHByZXNzaW9uKCkgeyBy
ZXR1cm4gbV9leHByZXNzaW9uLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVf
cHRyPEV4cHJlc3Npb24+IG1fZXhwcmVzc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6
OkFTVAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfU1RBVEVNRU5UKFJldHVyblN0YXRl
bWVudCwgaXNSZXR1cm4oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3Ry
dWN0dXJlRGVjbC5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdHJ1Y3R1cmVEZWNsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YWRlYmU1OWViYWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0cnVjdHVyZURlY2wuaApAQCAt
MCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1RO
b2RlLmgiCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiQ29tcGlsYXRpb25NZXNz
YWdlLmgiCisjaW5jbHVkZSAiR2xvYmFsRGVjbC5oIgorI2luY2x1ZGUgIlR5cGVEZWNsLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorCisKK25hbWVzcGFjZSBXR1NMOjpBU1Qg
eworCitjbGFzcyBTdHJ1Y3RNZW1iZXIgZmluYWwgOiBwdWJsaWMgQVNUTm9kZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3RydWN0TWVtYmVyKFNvdXJjZVNw
YW4gc3BhbiwgU3RyaW5nVmlldyBuYW1lLCBVbmlxdWVSZWY8VHlwZURlY2w+JiYgdHlwZSwgQXR0
cmlidXRlcyYmIGF0dHJpYnV0ZXMpCisgICAgICAgIDogQVNUTm9kZShzcGFuKQorICAgICAgICAs
IG1fbmFtZShuYW1lKQorICAgICAgICAsIG1fYXR0cmlidXRlcyhXVEZNb3ZlKGF0dHJpYnV0ZXMp
KQorICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQorICAgIHsKKyAgICB9CisKKyAgICBj
b25zdCBTdHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgVHlw
ZURlY2wmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdW
aWV3IG1fbmFtZTsKKyAgICBBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICBVbmlxdWVSZWY8
VHlwZURlY2w+IG1fdHlwZTsKK307CisKK2NsYXNzIFN0cnVjdERlY2wgZmluYWwgOiBwdWJsaWMg
R2xvYmFsRGVjbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
U3RydWN0RGVjbChTb3VyY2VTcGFuIHNvdXJjZVNwYW4sIFN0cmluZ1ZpZXcgbmFtZSwgVmVjdG9y
PFVuaXF1ZVJlZjxTdHJ1Y3RNZW1iZXI+PiYmIG1lbWJlcnMsIEF0dHJpYnV0ZXMmJiBhdHRyaWJ1
dGVzKQorICAgICAgICA6IEdsb2JhbERlY2woc291cmNlU3BhbikKKyAgICAgICAgLCBtX25hbWUo
bmFtZSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZXMoV1RGTW92ZShhdHRyaWJ1dGVzKSkKKyAgICAg
ICAgLCBtX21lbWJlcnMoV1RGTW92ZShtZW1iZXJzKSkKKyAgICB7CisgICAgfQorCisgICAgS2lu
ZCBraW5kKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2luZDo6U3RydWN0OyB9CisgICAgY29u
c3QgU3RyaW5nVmlldyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIEF0dHJp
YnV0ZXMmIGF0dHJpYnV0ZXMoKSB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBWZWN0b3I8
VW5pcXVlUmVmPFN0cnVjdE1lbWJlcj4+JiBtZW1iZXJzKCkgeyByZXR1cm4gbV9tZW1iZXJzOyB9
CisKK3ByaXZhdGU6CisgICAgU3RyaW5nVmlldyBtX25hbWU7CisgICAgQXR0cmlidXRlcyBtX2F0
dHJpYnV0ZXM7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxTdHJ1Y3RNZW1iZXI+PiBtX21lbWJlcnM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XR1NMX0dMT0JBTF9ERUNMKFN0cnVjdERlY2wsIGlzU3RydWN0KCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dHU0wvQVNUL1R5cGVEZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L1R5cGVEZWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZGRm
ODIwNzliMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1R5cGVE
ZWNsLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkFTVE5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisKK25hbWVzcGFj
ZSBXR1NMOjpBU1QgeworCitjbGFzcyBUeXBlRGVjbCA6IHB1YmxpYyBBU1ROb2RlIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIGVudW0gY2xhc3MgS2luZCA6
IHVpbnQ4X3QgeworICAgICAgICBOYW1lZCwKKyAgICAgICAgUGFyYW1ldGVyaXplZCwKKyAgICB9
OworCisgICAgVHlwZURlY2woU291cmNlU3BhbiBzcGFuKQorICAgICAgICA6IEFTVE5vZGUoc3Bh
bikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+VHlwZURlY2woKSB7fQorCisgICAgdmly
dHVhbCBLaW5kIGtpbmQoKSBjb25zdCA9IDA7CisgICAgYm9vbCBpc05hbWVkKCkgY29uc3QgeyBy
ZXR1cm4ga2luZCgpID09IEtpbmQ6Ok5hbWVkOyB9CisgICAgYm9vbCBpc1BhcmFtZXRlcml6ZWQo
KSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6UGFyYW1ldGVyaXplZDsgfQorfTsKKwor
Y2xhc3MgTmFtZWRUeXBlIGZpbmFsIDogcHVibGljIFR5cGVEZWNsIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBOYW1lZFR5cGUoU291cmNlU3BhbiBzcGFuLCBT
dHJpbmdWaWV3JiYgbmFtZSkKKyAgICAgICAgOiBUeXBlRGVjbChzcGFuKQorICAgICAgICAsIG1f
bmFtZShXVEZNb3ZlKG5hbWUpKQorICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBLaW5kOjpOYW1lZDsgfQorICAgIGNvbnN0IFN0cmluZ1ZpZXcm
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdW
aWV3IG1fbmFtZTsKK307CisKK2NsYXNzIFBhcmFtZXRlcml6ZWRUeXBlIDogcHVibGljIFR5cGVE
ZWNsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIGNs
YXNzIEJhc2UgeworICAgICAgICBWZWMyLAorICAgICAgICBWZWMzLAorICAgICAgICBWZWM0LAor
ICAgICAgICBNYXQyeDIsCisgICAgICAgIE1hdDJ4MywKKyAgICAgICAgTWF0Mng0LAorICAgICAg
ICBNYXQzeDIsCisgICAgICAgIE1hdDN4MywKKyAgICAgICAgTWF0M3g0LAorICAgICAgICBNYXQ0
eDIsCisgICAgICAgIE1hdDR4MywKKyAgICAgICAgTWF0NHg0CisgICAgfTsKKworICAgIFBhcmFt
ZXRlcml6ZWRUeXBlKFNvdXJjZVNwYW4gc3BhbiwgQmFzZSBiYXNlLCBVbmlxdWVSZWY8VHlwZURl
Y2w+JiYgZWxlbWVudFR5cGUpCisgICAgICAgIDogVHlwZURlY2woc3BhbikKKyAgICAgICAgLCBt
X2Jhc2UoYmFzZSkKKyAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdURk1vdmUoZWxlbWVudFR5cGUp
KQorICAgIHsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBLaW5kOjpQYXJhbWV0ZXJpemVkOyB9CisgICAgQmFzZSBiYXNlKCkgY29uc3QgeyByZXR1cm4g
bV9iYXNlOyB9CisgICAgVHlwZURlY2wmIGVsZW1lbnRUeXBlKCkgeyByZXR1cm4gbV9lbGVtZW50
VHlwZTsgfQorCitwcml2YXRlOgorICAgIEJhc2UgbV9iYXNlOworICAgIFVuaXF1ZVJlZjxUeXBl
RGVjbD4gbV9lbGVtZW50VHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVAorCisj
ZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0dTTF9UWVBFKFRvVmFsdWVUeXBlTmFtZSwg
cHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdHU0w6OkFTVDo6VG9W
YWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdHU0w6OkFTVDo6
VHlwZURlY2wmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX1RZUEUoTmFt
ZWRUeXBlLCBpc05hbWVkKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfVFlQRShQYXJh
bWV0ZXJpemVkVHlwZSwgaXNQYXJhbWV0ZXJpemVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dHU0wvQVNUL1ZhcmlhYmxlUXVhbGlmaWVyLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L1ZhcmlhYmxlUXVhbGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwLi4wNTZjNDBkMTZkODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wv
QVNUL1ZhcmlhYmxlUXVhbGlmaWVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorCituYW1lc3BhY2UgV0dTTDo6QVNU
IHsKKworZW51bSBjbGFzcyBTdG9yYWdlQ2xhc3MgOiB1aW50OF90IHsKKyAgICBGdW5jdGlvbiwK
KyAgICBQcml2YXRlLAorICAgIFdvcmtncm91cCwKKyAgICBVbmlmb3JtLAorICAgIFN0b3JhZ2UK
K307CisKK2VudW0gY2xhc3MgQWNjZXNzTW9kZSA6IHVpbnQ4X3QgeworICAgIFJlYWQsCisgICAg
V3JpdGUsCisgICAgUmVhZFdyaXRlCit9OworCitjbGFzcyBWYXJpYWJsZVF1YWxpZmllciBmaW5h
bCA6IHB1YmxpYyBBU1ROb2RlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBWYXJpYWJsZVF1YWxpZmllcihTb3VyY2VTcGFuIHNwYW4sIFN0b3JhZ2VDbGFzcyBz
dG9yYWdlQ2xhc3MsIEFjY2Vzc01vZGUgYWNjZXNzTW9kZSkKKyAgICAgICAgOiBBU1ROb2RlKHNw
YW4pCisgICAgICAgICwgbV9zdG9yYWdlQ2xhc3Moc3RvcmFnZUNsYXNzKQorICAgICAgICAsIG1f
YWNjZXNzTW9kZShhY2Nlc3NNb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBTdG9yYWdlQ2xhc3Mg
c3RvcmFnZUNsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQ2xhc3M7IH0KKyAgICBBY2Nl
c3NNb2RlIGFjY2Vzc01vZGUoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc01vZGU7IH0KKworcHJp
dmF0ZToKKyAgICBTdG9yYWdlQ2xhc3MgbV9zdG9yYWdlQ2xhc3M7CisgICAgQWNjZXNzTW9kZSBt
X2FjY2Vzc01vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV0dTTC9BU1ROb2RlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUTm9k
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzVkZGU5YTkyYWNi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVE5vZGUuaApAQCAtMCww
ICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTb3VyY2VT
cGFuLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIFdHU0w6OkFT
VCB7CisKK2NsYXNzIEFTVE5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIEFTVE5vZGUoU291cmNlU3BhbiBzcGFuKQorICAgICAgICA6IG1fc3BhbihzcGFu
KQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBTb3VyY2VTcGFuJiBzcGFuKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGFuOyB9CisKK3ByaXZhdGU6CisgICAgU291cmNlU3BhbiBtX3NwYW47Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dT
TC9Db21waWxhdGlvbk1lc3NhZ2UuY3BwIGIvU291cmNlL1dlYkdQVS9XR1NML0NvbXBpbGF0aW9u
TWVzc2FnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mYTNi
MzVlMTczMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQ29tcGlsYXRp
b25NZXNzYWdlLmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNvbXBpbGF0aW9uTWVzc2FnZS5oIgorCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXR1NMIHsKKwordm9pZCBDb21waWxhdGlvbk1l
c3NhZ2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9z
cGFuLm1fbGluZSwgIjoiLCBtX3NwYW4ubV9saW5lT2Zmc2V0LCAiIGxlbmd0aDoiLCBtX3NwYW4u
bV9sZW5ndGgsIG1fbWVzc2FnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdHU0wKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuaCBiL1NvdXJjZS9XZWJH
UFUvV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjcwNDNmZjNlYTM1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJH
UFUvV0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTb3VyY2VTcGFuLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdHU0wgeworCitjbGFzcyBDb21waWxhdGlvbk1lc3NhZ2UgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENvbXBpbGF0aW9uTWVzc2FnZShTdHJpbmcmJiBt
ZXNzYWdlLCBTb3VyY2VTcGFuIHNwYW4pCisgICAgICAgIDogbV9tZXNzYWdlKFdURk1vdmUobWVz
c2FnZSkpCisgICAgICAgICwgbV9zcGFuKHNwYW4pCisgICAgeworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZTsgfQorICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIo
KSBjb25zdCB7IHJldHVybiBtX3NwYW4ubV9saW5lOyB9CisgICAgdW5zaWduZWQgbGluZU9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bhbi5tX2xpbmVPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3NwYW4ubV9vZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3NwYW4ubV9sZW5ndGg7IH0KKworcHJpdmF0ZToKKyAg
ICBTdHJpbmcgbV9tZXNzYWdlOworICAgIFNvdXJjZVNwYW4gbV9zcGFuOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwIGIv
U291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwCmluZGV4IDM2ZmYxMWNlMDFmYy4uZTNhOGUyYmZi
Njg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAKKysrIGIvU291cmNl
L1dlYkdQVS9XR1NML1dHU0wuY3BwCkBAIC0yNiw4ICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldHU0wuaCIKIAotI2luY2x1ZGUgIkFTVC5oIgogI2luY2x1ZGUgIkxl
eGVyLmgiCisvLyBBbGwgb2YgdGhlc2UgYXJlIGp1c3QgdG8gY2hlY2sgdGhhdCB0aGV5IGNvbXBp
bGUsIHNpbmNlIGZvciBub3cgdGhleSBhcmUgbm90IHJlYWxseSB1c2VkLgorI2luY2x1ZGUgIkFT
VC9HbG9iYWxWYXJpYWJsZURlY2wuaCIKKyNpbmNsdWRlICJBU1QvU3RydWN0dXJlRGVjbC5oIgor
I2luY2x1ZGUgIkFTVC9GdW5jdGlvbkRlY2wuaCIKKyNpbmNsdWRlICJBU1QvU2hhZGVyTW9kdWxl
LmgiCisjaW5jbHVkZSAiQVNUL1N0YXRlbWVudHMvQXNzaWdubWVudFN0YXRlbWVudC5oIgorI2lu
Y2x1ZGUgIkFTVC9TdGF0ZW1lbnRzL1JldHVyblN0YXRlbWVudC5oIgorI2luY2x1ZGUgIkFTVC9F
eHByZXNzaW9ucy9JZGVudGlmaWVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNz
aW9ucy9UeXBlQ29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1
cmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJBU1QvRXhwcmVzc2lvbnMvTGl0ZXJhbEV4cHJlc3Npb25z
LmgiCiAKIG5hbWVzcGFjZSBXR1NMIHsKIApAQCAtNDMsMTQgKzUzLDE0IEBAIFN1Y2Nlc3NmdWxD
aGVjazo6U3VjY2Vzc2Z1bENoZWNrKFN1Y2Nlc3NmdWxDaGVjayYmKSA9IGRlZmF1bHQ7CiAKIFN1
Y2Nlc3NmdWxDaGVjazo6flN1Y2Nlc3NmdWxDaGVjaygpID0gZGVmYXVsdDsKIAotUHJlcGFyZVJl
c3VsdCBwcmVwYXJlKGNvbnN0IEFTVCYgYXN0LCBjb25zdCBIYXNoTWFwPFN0cmluZywgUGlwZWxp
bmVMYXlvdXQ+JiBwaXBlbGluZUxheW91dHMpCitQcmVwYXJlUmVzdWx0IHByZXBhcmUoY29uc3Qg
QVNUOjpTaGFkZXJNb2R1bGUmIGFzdCwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFBpcGVsaW5lTGF5
b3V0PiYgcGlwZWxpbmVMYXlvdXRzKQogewogICAgIFVOVVNFRF9QQVJBTShhc3QpOwogICAgIFVO
VVNFRF9QQVJBTShwaXBlbGluZUxheW91dHMpOwogICAgIHJldHVybiB7IFN0cmluZygpLCB7IH0g
fTsKIH0KIAotUHJlcGFyZVJlc3VsdCBwcmVwYXJlKGNvbnN0IEFTVCYgYXN0LCBjb25zdCBTdHJp
bmcmIGVudHJ5UG9pbnROYW1lLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFBpcGVsaW5lTGF5b3V0PiYg
cGlwZWxpbmVMYXlvdXRzKQorUHJlcGFyZVJlc3VsdCBwcmVwYXJlKGNvbnN0IEFTVDo6U2hhZGVy
TW9kdWxlJiBhc3QsIGNvbnN0IFN0cmluZyYgZW50cnlQb2ludE5hbWUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8UGlwZWxpbmVMYXlvdXQ+JiBwaXBlbGluZUxheW91dHMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGFzdCk7CiAgICAgVU5VU0VEX1BBUkFNKGVudHJ5UG9pbnROYW1lKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5oCmlu
ZGV4IDI0ZWYyZDkxYWQ2MS4uZWFlZGE4NGNmYjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BV
L1dHU0wvV0dTTC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmgKQEAgLTI1LDYgKzI1
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb21waWxhdGlvbk1lc3NhZ2UuaCIK
ICNpbmNsdWRlIDxjaW50dHlwZXM+CiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxtZW1v
cnk+CkBAIC00MSwyOCArNDIsMTYgQEAgbmFtZXNwYWNlIFdHU0wgewogLy8gU3RlcCAxCiAvLwog
Ci1lbnVtIGNsYXNzIENvbXBpbGF0aW9uTWVzc2FnZVR5cGUgOiB1aW50OF90IHsKLSAgICBFcnJv
ciwKLSAgICBXYXJuaW5nLAotICAgIEluZm8KLX07Ci0KLXN0cnVjdCBDb21waWxhdGlvbk1lc3Nh
Z2UgewotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIHVpbnQ2NF90IGxpbmVOdW1iZXI7Ci0gICAg
dWludDY0X3QgbGluZVBvc2l0aW9uOwotICAgIHVpbnQ2NF90IG9mZnNldDsKLSAgICB1aW50NjRf
dCBsZW5ndGg7Ci19OwotCi1jbGFzcyBBU1Q7CituYW1lc3BhY2UgQVNUIHsKK2NsYXNzIFNoYWRl
ck1vZHVsZTsKK30KIAogc3RydWN0IFN1Y2Nlc3NmdWxDaGVjayB7CiAgICAgU3VjY2Vzc2Z1bENo
ZWNrKCkgPSBkZWxldGU7CiAgICAgU3VjY2Vzc2Z1bENoZWNrKFN1Y2Nlc3NmdWxDaGVjayYmKTsK
ICAgICB+U3VjY2Vzc2Z1bENoZWNrKCk7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uTWVzc2FnZT4g
d2FybmluZ3M7Ci0gICAgVW5pcXVlUmVmPEFTVD4gYXN0OworICAgIFVuaXF1ZVJlZjxBU1Q6OlNo
YWRlck1vZHVsZT4gYXN0OwogfTsKIAogc3RydWN0IEZhaWxlZENoZWNrIHsKQEAgLTIxNCw3ICsy
MDMsNyBAQCBzdHJ1Y3QgUHJlcGFyZVJlc3VsdCB7CiAKIC8vIFRoZXNlIGFyZSBub3QgYWxsb3dl
ZCB0byBmYWlsLgogLy8gQWxsIGZhaWx1cmVzIG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4gY2F1Z2h0
IGluIGNoZWNrKCkuCi1QcmVwYXJlUmVzdWx0IHByZXBhcmUoY29uc3QgQVNUJiwgY29uc3QgSGFz
aE1hcDxTdHJpbmcsIFBpcGVsaW5lTGF5b3V0PiYpOwotUHJlcGFyZVJlc3VsdCBwcmVwYXJlKGNv
bnN0IEFTVCYsIGNvbnN0IFN0cmluZyYgZW50cnlQb2ludE5hbWUsIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8UGlwZWxpbmVMYXlvdXQ+Jik7CitQcmVwYXJlUmVzdWx0IHByZXBhcmUoY29uc3QgQVNUOjpT
aGFkZXJNb2R1bGUmLCBjb25zdCBIYXNoTWFwPFN0cmluZywgUGlwZWxpbmVMYXlvdXQ+Jik7CitQ
cmVwYXJlUmVzdWx0IHByZXBhcmUoY29uc3QgQVNUOjpTaGFkZXJNb2R1bGUmLCBjb25zdCBTdHJp
bmcmIGVudHJ5UG9pbnROYW1lLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFBpcGVsaW5lTGF5b3V0PiYp
OwogCiB9IC8vIG5hbWVzcGFjZSBXR1NMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkNjkyN2ZlMTMzMGEuLmIzMjU2NWRjZjg1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00
OSw2ICs0OSwyNyBAQAogCQkzMzhCQjJENDI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOEJCMkQzMjdCNkI2
NkMwMEUwNjZBQiAvKiBMZXhlci5oICovOyB9OwogCQkzMzhCQjJENjI3QjZCNjg3MDBFMDY2QUIg
LyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzM4QkIyRDUyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLzsgfTsKIAkJREQwNUEz
NUMyN0JGMDlDNjAwOTZFRkFCIC8qIGxpYldURi5hIGluIFByb2R1Y3QgRGVwZW5kZW5jaWVzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRUJEODI5MjcxNkNBRTcwMEE1MjU0
RCAvKiBsaWJXVEYuYSAqLzsgfTsKKwkJMzNFQTE4NUUyN0JDMTk0RjAwQTFERDUyIC8qIEFTVE5v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUEx
ODVEMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmggKi87IH07CisJCTMzRUExODYwMjdCQzE5
ODEwMEExREQ1MiAvKiBHbG9iYWxEaXJlY3RpdmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODVGMjdCQzE5ODEwMEExREQ1MiAvKiBHbG9iYWxE
aXJlY3RpdmUuaCAqLzsgfTsKKwkJMzNFQTE4NjIyN0JDMTlDMTAwQTFERDUyIC8qIEdsb2JhbERl
Y2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUEx
ODYxMjdCQzE5QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmggKi87IH07CisJCTMzRUExODY0MjdC
QzFBMUQwMEExREQ1MiAvKiBHbG9iYWxWYXJpYWJsZURlY2wuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODYzMjdCQzFBMUQwMEExREQ1MiAvKiBH
bG9iYWxWYXJpYWJsZURlY2wuaCAqLzsgfTsKKwkJMzNFQTE4NjYyN0JDMUFENTAwQTFERDUyIC8q
IENvbXBpbGF0aW9uTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzNFQTE4NjUyN0JDMUFENTAwQTFERDUyIC8qIENvbXBpbGF0aW9uTWVzc2Fn
ZS5oICovOyB9OworCQkzM0VBMTg2ODI3QkMxQjE0MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNz
YWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMz
RUExODY3MjdCQzFCMTQwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuY3BwICovOyB9Owor
CQkzM0VBMTg2QTI3QkMxQkU2MDBBMURENTIgLyogQXR0cmlidXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2OTI3QkMxQkU2MDBBMURENTIg
LyogQXR0cmlidXRlLmggKi87IH07CisJCTMzRUExODZDMjdCQzFDQkMwMEExREQ1MiAvKiBFeHBy
ZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
M0VBMTg2QjI3QkMxQ0JDMDBBMURENTIgLyogRXhwcmVzc2lvbi5oICovOyB9OworCQkzM0VBMTg2
RTI3QkMxRDRDMDBBMURENTIgLyogVHlwZURlY2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODZEMjdCQzFENEMwMEExREQ1MiAvKiBUeXBlRGVj
bC5oICovOyB9OworCQkzM0VBMTg3MDI3QkMxRThBMDBBMURENTIgLyogU2hhZGVyTW9kdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2RjI3
QkMxRThBMDBBMURENTIgLyogU2hhZGVyTW9kdWxlLmggKi87IH07CisJCTMzRUExODcyMjdCQzFG
RTEwMEExREQ1MiAvKiBWYXJpYWJsZVF1YWxpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NzEyN0JDMUZFMTAwQTFERDUyIC8qIFZhcmlh
YmxlUXVhbGlmaWVyLmggKi87IH07CisJCTMzRUExODc0MjdCQzIwNDkwMEExREQ1MiAvKiBTdHJ1
Y3R1cmVEZWNsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzM0VBMTg3MzI3QkMyMDQ5MDBBMURENTIgLyogU3RydWN0dXJlRGVjbC5oICovOyB9OworCQkz
M0VBMTg3NjI3QkMyMTZCMDBBMURENTIgLyogRnVuY3Rpb25EZWNsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg3NTI3QkMyMTZCMDBBMURENTIg
LyogRnVuY3Rpb25EZWNsLmggKi87IH07CisJCTMzRUExODc5MjdCQzIyQUEwMEExREQ1MiAvKiBT
dGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMzRUExODc4MjdCQzIyQUEwMEExREQ1MiAvKiBTdGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzNFQTE4
N0IyN0JDMjMwRTAwQTFERDUyIC8qIENvbXBvdW5kU3RhdGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg3QTI3QkMyMzBFMDBBMURENTIg
LyogQ29tcG91bmRTdGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzNFQTE4N0UyN0JDMjQ5MDAwQTFERDUy
IC8qIFJldHVyblN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzNFQTE4N0QyN0JDMjQ5MDAwQTFERDUyIC8qIFJldHVyblN0YXRlbWVudC5o
ICovOyB9OworCQkzM0VBMTg4MDI3QkMyNEUyMDBBMURENTIgLyogQXNzaWdubWVudFN0YXRlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4
N0YyN0JDMjRFMjAwQTFERDUyIC8qIEFzc2lnbm1lbnRTdGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzNF
QTE4ODIyN0JDMjVEMDAwQTFERDUyIC8qIElkZW50aWZpZXJFeHByZXNzaW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg4MTI3QkMyNUQwMDBB
MURENTIgLyogSWRlbnRpZmllckV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMzNFQTE4ODQyN0JDMjY4
NjAwQTFERDUyIC8qIFN0cnVjdHVyZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4ODMyN0JDMjY4NjAwQTFERDUyIC8qIFN0cnVjdHVy
ZUFjY2Vzcy5oICovOyB9OworCQkzM0VBMTg4NjI3QkMyNkRGMDBBMURENTIgLyogVHlwZUNvbnZl
cnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMz
RUExODg1MjdCQzI2REYwMEExREQ1MiAvKiBUeXBlQ29udmVyc2lvbi5oICovOyB9OworCQkzM0VB
MTg4ODI3QkMzNjFFMDBBMURENTIgLyogTGl0ZXJhbEV4cHJlc3Npb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg4NzI3QkMzNjFFMDBBMURE
NTIgLyogTGl0ZXJhbEV4cHJlc3Npb25zLmggKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KQEAg
LTE2Nyw3ICsxODgsNiBAQAogCQkxQ0VCRDgwMTI3MTZCOUFCMDBBNTI1NEQgLyogU0RLVmFyaWFu
dC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBTREtWYXJpYW50LnhjY29uZmlnOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXR1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUNFQkQ4MDQyNzE2QkZBQjAwQTUyNTREIC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBj
b25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUNFQkQ4MDcyNzE2QzJDMDAw
QTUyNTREIC8qIEFTVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU1QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUNFQkQ4MEEyNzE2QzM2QzAwQTUyNTREIC8qIGNvbmZpZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MEIy
NzE2QzM3OTAwQTUyNTREIC8qIEV4cG9ydE1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHBvcnRN
YWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MEQyNzE2QzNEODAw
QTUyNTREIC8qIFNoYWRlck1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkZXJNb2R1bGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MSw2ICsyMDEsMjcgQEAKIAkJMzM4QkIy
RDEyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNl
U3Bhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMzhCQjJEMzI3QjZCNjZDMDBF
MDY2QUIgLyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzM4QkIyRDUyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzNFQTE4NUQyN0JDMTk0RjAwQTFERDUyIC8qIEFTVE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQVNU
Tm9kZS5oOyBwYXRoID0gV0dTTC9BU1ROb2RlLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKKwkJMzNFQTE4NUYyN0JDMTk4MTAwQTFERDUyIC8qIEdsb2JhbERpcmVjdGl2ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHbG9iYWxEaXJlY3RpdmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzNFQTE4NjEyN0JDMTlDMTAwQTFERDUyIC8qIEdsb2JhbERlY2wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR2xvYmFsRGVjbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg2MzI3
QkMxQTFEMDBBMURENTIgLyogR2xvYmFsVmFyaWFibGVEZWNsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEds
b2JhbFZhcmlhYmxlRGVjbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg2
NTI3QkMxQUQ1MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbXBpbGF0aW9uTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VB
MTg2NzI3QkMxQjE0MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvbXBpbGF0aW9uTWVzc2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMzRUExODY5MjdCQzFCRTYwMEExREQ1MiAvKiBBdHRyaWJ1dGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQXR0cmlidXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODZC
MjdCQzFDQkMwMEExREQ1MiAvKiBFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Np
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4NkQyN0JDMUQ0QzAwQTFE
RDUyIC8qIFR5cGVEZWNsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVEZWNsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMzRUExODZGMjdCQzFFOEEwMEExREQ1MiAvKiBTaGFkZXJNb2R1
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhZGVyTW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMzRUExODcxMjdCQzFGRTEwMEExREQ1MiAvKiBWYXJpYWJsZVF1YWxpZmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBWYXJpYWJsZVF1YWxpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzM0VBMTg3MzI3QkMyMDQ5MDBBMURENTIgLyogU3RydWN0dXJlRGVjbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVEZWNsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMzRUExODc1MjdCQzIxNkIwMEExREQ1MiAvKiBGdW5jdGlvbkRlY2wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRnVuY3Rpb25EZWNsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUEx
ODc4MjdCQzIyQUEwMEExREQ1MiAvKiBTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODdBMjdCQzIzMEUwMEEx
REQ1MiAvKiBDb21wb3VuZFN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wb3VuZFN0YXRl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg3RDI3QkMyNDkwMDBB
MURENTIgLyogUmV0dXJuU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJldHVyblN0YXRlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg3RjI3QkMyNEUyMDBBMURE
NTIgLyogQXNzaWdubWVudFN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3NpZ25tZW50U3Rh
dGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRUExODgxMjdCQzI1RDAw
MEExREQ1MiAvKiBJZGVudGlmaWVyRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJZGVudGlm
aWVyRXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg4MzI3
QkMyNjg2MDBBMURENTIgLyogU3RydWN0dXJlQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVj
dHVyZUFjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0VBMTg4NTI3QkMy
NkRGMDBBMURENTIgLyogVHlwZUNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUNvbnZl
cnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNFQTE4ODcyN0JDMzYxRTAw
QTFERDUyIC8qIExpdGVyYWxFeHByZXNzaW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXRlcmFsRXhw
cmVzc2lvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVm
ZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwpAQCAtMzIzLDggKzM2NCwxMSBAQAogCQkxQ0VCRDdGNjI3MTZCMzMxMDBBNTI1NEQg
LyogV0dTTCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MUNFQkQ4MDcyNzE2QzJDMDAwQTUyNTREIC8qIEFTVC5oICovLAorCQkJCTMzRUExODVDMjdCQzE5
M0QwMEExREQ1MiAvKiBBU1QgKi8sCiAJCQkJMUNFQkQ4MDQyNzE2QkZBQjAwQTUyNTREIC8qIGNv
bmZpZy5oICovLAorCQkJCTMzRUExODY1MjdCQzFBRDUwMEExREQ1MiAvKiBDb21waWxhdGlvbk1l
c3NhZ2UuaCAqLywKKwkJCQkzM0VBMTg2NzI3QkMxQjE0MDBBMURENTIgLyogQ29tcGlsYXRpb25N
ZXNzYWdlLmNwcCAqLywKKwkJCQkzMzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCAq
LywKIAkJCQkzMzhCQjJENTI3QjZCNjg3MDBFMDY2QUIgLyogTGV4ZXIuY3BwICovLAogCQkJCTMz
OEJCMkQzMjdCNkI2NkMwMEUwNjZBQiAvKiBMZXhlci5oICovLAogCQkJCTMzOEJCMkQxMjdCNkI2
M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggKi8sCkBAIC0zNjUsNiArNDA5LDQ4IEBACiAJCQlu
YW1lID0gRnJhbWV3b3JrczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTMz
RUExODVDMjdCQzE5M0QwMEExREQ1MiAvKiBBU1QgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTMzRUExODVEMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2Rl
LmggKi8sCisJCQkJMzNFQTE4NjkyN0JDMUJFNjAwQTFERDUyIC8qIEF0dHJpYnV0ZS5oICovLAor
CQkJCTMzRUExODZCMjdCQzFDQkMwMEExREQ1MiAvKiBFeHByZXNzaW9uLmggKi8sCisJCQkJMzNF
QTE4N0MyN0JDMjQ2MDAwQTFERDUyIC8qIEV4cHJlc3Npb25zICovLAorCQkJCTMzRUExODc1MjdC
QzIxNkIwMEExREQ1MiAvKiBGdW5jdGlvbkRlY2wuaCAqLywKKwkJCQkzM0VBMTg1RjI3QkMxOTgx
MDBBMURENTIgLyogR2xvYmFsRGlyZWN0aXZlLmggKi8sCisJCQkJMzNFQTE4NjEyN0JDMTlDMTAw
QTFERDUyIC8qIEdsb2JhbERlY2wuaCAqLywKKwkJCQkzM0VBMTg2MzI3QkMxQTFEMDBBMURENTIg
LyogR2xvYmFsVmFyaWFibGVEZWNsLmggKi8sCisJCQkJMzNFQTE4NkYyN0JDMUU4QTAwQTFERDUy
IC8qIFNoYWRlck1vZHVsZS5oICovLAorCQkJCTMzRUExODc4MjdCQzIyQUEwMEExREQ1MiAvKiBT
dGF0ZW1lbnQuaCAqLywKKwkJCQkzM0VBMTg3NzI3QkMyMjlBMDBBMURENTIgLyogU3RhdGVtZW50
cyAqLywKKwkJCQkzM0VBMTg3MzI3QkMyMDQ5MDBBMURENTIgLyogU3RydWN0dXJlRGVjbC5oICov
LAorCQkJCTMzRUExODZEMjdCQzFENEMwMEExREQ1MiAvKiBUeXBlRGVjbC5oICovLAorCQkJCTMz
RUExODcxMjdCQzFGRTEwMEExREQ1MiAvKiBWYXJpYWJsZVF1YWxpZmllci5oICovLAorCQkJKTsK
KwkJCXBhdGggPSBBU1Q7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkzM0VB
MTg3NzI3QkMyMjlBMDBBMURENTIgLyogU3RhdGVtZW50cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMzNFQTE4N0YyN0JDMjRFMjAwQTFERDUyIC8qIEFz
c2lnbm1lbnRTdGF0ZW1lbnQuaCAqLywKKwkJCQkzM0VBMTg3QTI3QkMyMzBFMDBBMURENTIgLyog
Q29tcG91bmRTdGF0ZW1lbnQuaCAqLywKKwkJCQkzM0VBMTg3RDI3QkMyNDkwMDBBMURENTIgLyog
UmV0dXJuU3RhdGVtZW50LmggKi8sCisJCQkpOworCQkJcGF0aCA9IFN0YXRlbWVudHM7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkzM0VBMTg3QzI3QkMyNDYwMDBBMURENTIg
LyogRXhwcmVzc2lvbnMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTMzRUExODgxMjdCQzI1RDAwMEExREQ1MiAvKiBJZGVudGlmaWVyRXhwcmVzc2lvbi5o
ICovLAorCQkJCTMzRUExODgzMjdCQzI2ODYwMEExREQ1MiAvKiBTdHJ1Y3R1cmVBY2Nlc3MuaCAq
LywKKwkJCQkzM0VBMTg4NTI3QkMyNkRGMDBBMURENTIgLyogVHlwZUNvbnZlcnNpb24uaCAqLywK
KwkJCQkzM0VBMTg4NzI3QkMzNjFFMDBBMURENTIgLyogTGl0ZXJhbEV4cHJlc3Npb25zLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IEV4cHJlc3Npb25zOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKIC8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEhlYWRl
cnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTM4MiwxMCArNDY4LDMwIEBACiAJCQlpc2EgPSBQ
QlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJ
CQlmaWxlcyA9ICgKLQkJCQkzMzhCQjJENDI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMzRUExODc5MjdCQzIyQUEwMEExREQ1MiAvKiBTdGF0ZW1lbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTMzRUExODVFMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg4NjI3QkMyNkRGMDBBMURENTIgLyogVHlwZUNvbnZl
cnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODY0MjdCQzFBMUQwMEExREQ1MiAvKiBH
bG9iYWxWYXJpYWJsZURlY2wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODdCMjdCQzIzMEUw
MEExREQ1MiAvKiBDb21wb3VuZFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4
NzYyN0JDMjE2QjAwQTFERDUyIC8qIEZ1bmN0aW9uRGVjbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzM4QkIyRDIyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCBpbiBIZWFkZXJzICovLAor
CQkJCTMzRUExODY2MjdCQzFBRDUwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMzRUExODcwMjdCQzFFOEEwMEExREQ1MiAvKiBTaGFkZXJNb2R1bGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTMzOEJCMkQ0MjdCNkI2NkMwMEUwNjZBQiAvKiBMZXhlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4ODgyN0JDMzYxRTAwQTFERDUyIC8qIExpdGVyYWxF
eHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzM4QkIyQ0UyN0I2QjYwMjAwRTA2NkFC
IC8qIFRva2VuLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg2QzI3QkMxQ0JDMDBBMURENTIg
LyogRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNFQkQ3RjgyNzE2QjM0NDAwQTUy
NTREIC8qIFdHU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODYyMjdCQzE5QzEwMEExREQ1
MiAvKiBHbG9iYWxEZWNsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg4MDI3QkMyNEUyMDBB
MURENTIgLyogQXNzaWdubWVudFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNFQTE4
ODQyN0JDMjY4NjAwQTFERDUyIC8qIFN0cnVjdHVyZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMzNFQTE4ODIyN0JDMjVEMDAwQTFERDUyIC8qIElkZW50aWZpZXJFeHByZXNzaW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzM0VBMTg2MDI3QkMxOTgxMDBBMURENTIgLyogR2xvYmFsRGlyZWN0
aXZlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg2RTI3QkMxRDRDMDBBMURENTIgLyogVHlw
ZURlY2wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRUExODc0MjdCQzIwNDkwMEExREQ1MiAvKiBT
dHJ1Y3R1cmVEZWNsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg3RTI3QkMyNDkwMDBBMURE
NTIgLyogUmV0dXJuU3RhdGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg2QTI3QkMx
QkU2MDBBMURENTIgLyogQXR0cmlidXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0VBMTg3MjI3
QkMxRkUxMDBBMURENTIgLyogVmFyaWFibGVRdWFsaWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2hhZGVyTW9kdWxlLmggYi9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9TaGFkZXJNb2R1bGUuaAppbmRleCA3OThmMDI5NDVlNTkuLmRmNDEzNTgwNjg4
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2hhZGVyTW9kdWxlLmgKKysrIGIv
U291cmNlL1dlYkdQVS9XZWJHUFUvU2hhZGVyTW9kdWxlLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBXR1NMOjpQaXBlbGluZUxheW91dCBjb252ZXJ0UGlwZWxpbmVMYXlv
dXQoY29uc3QgUGlwZWxpbmVMYXlvdXQmKTsKICAgICBzdGF0aWMgaWQ8TVRMTGlicmFyeT4gY3Jl
YXRlTGlicmFyeShpZDxNVExEZXZpY2U+LCBjb25zdCBTdHJpbmcmIG1zbCwgTlNTdHJpbmcgKmxh
YmVsKTsKIAotICAgIGNvbnN0IFdHU0w6OkFTVCogYXN0KCkgY29uc3Q7CisgICAgY29uc3QgV0dT
TDo6QVNUOjpTaGFkZXJNb2R1bGUqIGFzdCgpIGNvbnN0OwogCiAgICAgY29uc3QgUGlwZWxpbmVM
YXlvdXQqIHBpcGVsaW5lTGF5b3V0SGludChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBjb25z
dCBXR1NMOjpSZWZsZWN0aW9uOjpFbnRyeVBvaW50SW5mb3JtYXRpb24qIGVudHJ5UG9pbnRJbmZv
cm1hdGlvbihjb25zdCBTdHJpbmcmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL1NoYWRlck1vZHVsZS5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NoYWRlck1vZHVs
ZS5tbQppbmRleCA2MjY2YzBjOWJlOTUuLjFlNTIxMjlmZTFiZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvU2hhZGVyTW9kdWxlLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L1NoYWRlck1vZHVsZS5tbQpAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBDb21waWxhdGlvbk1l
c3NhZ2VEYXRhIGNvbnZlcnRNZXNzYWdlcyhjb25zdCBNZXNzYWdlcyYgbWVzc2FnZXMxLCBjb25z
dCBzCiAKICAgICBhdXRvIHBvcHVsYXRlTWVzc2FnZXMgPSBbJl0gKGNvbnN0IE1lc3NhZ2VzJiBj
b21waWxhdGlvbk1lc3NhZ2VzKSB7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgY29tcGlsYXRp
b25NZXNzYWdlIDogY29tcGlsYXRpb25NZXNzYWdlcy5tZXNzYWdlcykKLSAgICAgICAgICAgIGZs
YXR0ZW5lZE1lc3NhZ2VzLmFwcGVuZChjb21waWxhdGlvbk1lc3NhZ2UubWVzc2FnZS51dGY4KCkp
OworICAgICAgICAgICAgZmxhdHRlbmVkTWVzc2FnZXMuYXBwZW5kKGNvbXBpbGF0aW9uTWVzc2Fn
ZS5tZXNzYWdlKCkudXRmOCgpKTsKICAgICB9OwogCiAgICAgcG9wdWxhdGVNZXNzYWdlcyhtZXNz
YWdlczEpOwpAQCAtMTY3LDEwICsxNjcsMTAgQEAgc3RhdGljIENvbXBpbGF0aW9uTWVzc2FnZURh
dGEgY29udmVydE1lc3NhZ2VzKGNvbnN0IE1lc3NhZ2VzJiBtZXNzYWdlczEsIGNvbnN0IHMKICAg
ICAgICAgICAgICAgICBudWxscHRyLAogICAgICAgICAgICAgICAgIGZsYXR0ZW5lZE1lc3NhZ2Vz
W2kgKyBiYXNlXS5kYXRhKCksCiAgICAgICAgICAgICAgICAgY29tcGlsYXRpb25NZXNzYWdlcy50
eXBlLAotICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uTWVzc2FnZS5saW5lTnVtYmVyLAotICAg
ICAgICAgICAgICAgIGNvbXBpbGF0aW9uTWVzc2FnZS5saW5lUG9zaXRpb24sCi0gICAgICAgICAg
ICAgICAgY29tcGlsYXRpb25NZXNzYWdlLm9mZnNldCwKLSAgICAgICAgICAgICAgICBjb21waWxh
dGlvbk1lc3NhZ2UubGVuZ3RoLAorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uTWVzc2FnZS5s
aW5lTnVtYmVyKCksCisgICAgICAgICAgICAgICAgY29tcGlsYXRpb25NZXNzYWdlLmxpbmVPZmZz
ZXQoKSwKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbk1lc3NhZ2Uub2Zmc2V0KCksCisgICAg
ICAgICAgICAgICAgY29tcGlsYXRpb25NZXNzYWdlLmxlbmd0aCgpLAogICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjE4LDExICsyMTgsMTEgQEAgV0dTTDo6UGlwZWxpbmVM
YXlvdXQgU2hhZGVyTW9kdWxlOjpjb252ZXJ0UGlwZWxpbmVMYXlvdXQoY29uc3QgUGlwZWxpbmVM
YXlvdXQmIHAKICAgICByZXR1cm4geyB7IH0gfTsKIH0KIAotY29uc3QgV0dTTDo6QVNUKiBTaGFk
ZXJNb2R1bGU6OmFzdCgpIGNvbnN0Citjb25zdCBXR1NMOjpBU1Q6OlNoYWRlck1vZHVsZSogU2hh
ZGVyTW9kdWxlOjphc3QoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fY2hl
Y2tSZXN1bHQsIFsmXSAoY29uc3QgV0dTTDo6U3VjY2Vzc2Z1bENoZWNrJiBzdWNjZXNzZnVsQ2hl
Y2spIC0+IGNvbnN0IFdHU0w6OkFTVCogeworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fY2hl
Y2tSZXN1bHQsIFsmXSAoY29uc3QgV0dTTDo6U3VjY2Vzc2Z1bENoZWNrJiBzdWNjZXNzZnVsQ2hl
Y2spIC0+IGNvbnN0IFdHU0w6OkFTVDo6U2hhZGVyTW9kdWxlKiB7CiAgICAgICAgIHJldHVybiBz
dWNjZXNzZnVsQ2hlY2suYXN0LnB0cigpOwotICAgIH0sIFsmXSAoY29uc3QgV0dTTDo6RmFpbGVk
Q2hlY2smKSAtPiBjb25zdCBXR1NMOjpBU1QqIHsKKyAgICB9LCBbJl0gKGNvbnN0IFdHU0w6OkZh
aWxlZENoZWNrJikgLT4gY29uc3QgV0dTTDo6QVNUOjpTaGFkZXJNb2R1bGUqIHsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfSk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>