<?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>140491</bug_id>
          
          <creation_ts>2015-01-14 23:46:16 -0800</creation_ts>
          <short_desc>Implement ES6 class syntax</short_desc>
          <delta_ts>2023-04-01 01:10:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>152597</dependson>
    
    <dependson>140752</dependson>
    
    <dependson>140754</dependson>
    
    <dependson>140760</dependson>
    
    <dependson>140761</dependson>
    
    <dependson>140908</dependson>
    
    <dependson>140918</dependson>
    
    <dependson>141019</dependson>
    
    <dependson>142200</dependson>
    
    <dependson>142388</dependson>
    
    <dependson>142527</dependson>
    
    <dependson>142563</dependson>
    
    <dependson>142566</dependson>
    
    <dependson>142567</dependson>
    
    <dependson>142591</dependson>
    
    <dependson>142600</dependson>
    
    <dependson>142689</dependson>
    
    <dependson>142690</dependson>
    
    <dependson>142774</dependson>
    
    <dependson>142840</dependson>
    
    <dependson>142842</dependson>
    
    <dependson>142862</dependson>
    
    <dependson>142882</dependson>
    
    <dependson>142883</dependson>
    
    <dependson>143037</dependson>
    
    <dependson>143038</dependson>
    
    <dependson>143170</dependson>
    
    <dependson>143180</dependson>
    
    <dependson>143181</dependson>
    
    <dependson>144238</dependson>
    
    <dependson>144243</dependson>
    
    <dependson>144244</dependson>
    
    <dependson>144252</dependson>
    
    <dependson>144254</dependson>
    
    <dependson>144258</dependson>
    
    <dependson>144278</dependson>
    
    <dependson>144280</dependson>
    
    <dependson>144281</dependson>
    
    <dependson>144282</dependson>
    
    <dependson>144283</dependson>
    
    <dependson>144284</dependson>
    
    <dependson>144285</dependson>
    
    <dependson>144514</dependson>
    
    <dependson>147064</dependson>
    
    <dependson>147150</dependson>
    
    <dependson>148057</dependson>
    
    <dependson>149001</dependson>
    
    <dependson>150089</dependson>
    
    <dependson>151113</dependson>
    
    <dependson>151160</dependson>
    
    <dependson>151365</dependson>
    
    <dependson>152108</dependson>
    
    <dependson>153864</dependson>
    
    <dependson>155545</dependson>
    
    <dependson>157136</dependson>
    
    <dependson>157461</dependson>
    
    <dependson>157972</dependson>
    
    <dependson>205848</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>annevk</cc>
    
    <cc>barraclough</cc>
    
    <cc>bjonesbe</cc>
    
    <cc>claude.pache</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1061494</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-14 23:46:16 -0800</bug_when>
    <thetext>We should support class:
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-class-definitions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061495</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-14 23:46:57 -0800</bug_when>
    <thetext>&lt;rdar://problem/19467094&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061497</commentid>
    <comment_count>2</comment_count>
      <attachid>244682</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-14 23:53:03 -0800</bug_when>
    <thetext>Created attachment 244682
Super naive WIP 1

With this patch, the following code runs successfully.  I still need to add the support for super() as well as make the object initialization check (throw ReferenceError whenever this is accessed before the initialization) work.

class A {
    someMethod() { alert(&apos;hi&apos;); }
    static someStaticMethod(o) { o.someMethod(); }
    constructor() {}
    static constructor() {}
};
class B extends A {
    constructor() { }
}
var b = new B();
A.someStaticMethod(b);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061555</commentid>
    <comment_count>3</comment_count>
      <attachid>244682</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-01-15 09:06:37 -0800</bug_when>
    <thetext>Comment on attachment 244682
Super naive WIP 1

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

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:2771
&gt; +        // FIXME: Throw TypeError if isConstructor(parentClass) is false or it&apos;s a generator function.

I&apos;m honestly leaning towards planting a private property on the type and using that to make you decision (e.g. foo.@IsConstructor or some such)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061576</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-01-15 10:37:45 -0800</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:2771
&gt; &gt; +        // FIXME: Throw TypeError if isConstructor(parentClass) is false or it&apos;s a generator function.
&gt; 
&gt; I&apos;m honestly leaning towards planting a private property on the type and
&gt; using that to make you decision (e.g. foo.@IsConstructor or some such)

Another option is to use a special JSFunction subclass for constructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062172</commentid>
    <comment_count>5</comment_count>
      <attachid>244853</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-17 21:16:05 -0800</bug_when>
    <thetext>Created attachment 244853
Added &quot;super&quot; support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062173</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-17 21:28:28 -0800</bug_when>
    <thetext>The new WIP is still missing two major pieces:

1. Throw ReferneceError when &quot;this&quot; is still in &quot;uninitialized&quot; state (i.e. before &quot;super()&quot; is called) in a derived class&apos; constructor.
2. Auto generate the constructor when it&apos;s not supplied.

I think I&apos;ll do 2 in a separate follow-up patch since JSC doesn&apos;t have a facility to generate a Miranda function.

I&apos;ve talked about 1 with Oliver and Gavin, and the approach we came up so far (if I remember correctly) is to allocate a local variable/register that stores &quot;uninitialized-ness&quot; of the &quot;this&quot; variable. Inside ThisNode or wherever else &quot;this&quot; is accessed, we&apos;ll generate a code to check this state and throw ReferenceError when it&apos;s not initialized.

Once that&apos;s implemented, we can optimize this in the parser as well as in the bytecode generator for common cases.  e.g. in cases where we can guarantee that super() is definitively called before &quot;this&quot; is used, we can omit this check.  Even if we didn&apos;t implement such an optimization, DFG might be able to optimize them away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062431</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-01-19 11:45:57 -0800</bug_when>
    <thetext>&gt; I&apos;ve talked about 1 with Oliver and Gavin, and the approach we came up so
&gt; far (if I remember correctly) is to allocate a local variable/register that
&gt; stores &quot;uninitialized-ness&quot; of the &quot;this&quot; variable.

I think you can just use undefined to mean uninitialized.

The ThisNode in the AST can emit explicit branches around access to &apos;this&apos; to check for undefined, if and only if you&apos;re compiling a constructor that extends a builtin.

The DFG will probably dead-code-eliminate those branches in simple cases. The FTL should get them in all cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062638</commentid>
    <comment_count>8</comment_count>
      <attachid>244964</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-19 21:09:30 -0800</bug_when>
    <thetext>Created attachment 244964
Added ReferenceError for this inside derived class&apos; constructor

I&apos;ve added the support for throwing ReferenceError inside a derived class&apos; constructor.  There is one ugliness here, which is having to remember whether a given constructor is for a derived class or not.  I don&apos;t think we can deduce this from prototype or constructor as far as I read the spec so I&apos;m introducing a yet another private property name to store this information on the constructor object.

Now I need to figure out how to pass an argument to eval operator so that every access to this inside an eval operator in a derived class&apos; constructor would check the extra register allocated in BytecodeGenerator for the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063006</commentid>
    <comment_count>9</comment_count>
      <attachid>245050</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-20 23:09:27 -0800</bug_when>
    <thetext>Created attachment 245050
Set this to undefined instead of throwing

Geoff, Gavin, and I had an extensive discussion on this matter and decided that we should just set &quot;this&quot; to undefined for now. I&apos;ve emailed es-discuss to change the spec accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063286</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-21 21:20:25 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created attachment 245050 [details]
&gt; Set this to undefined instead of throwing
&gt; 
&gt; Geoff, Gavin, and I had an extensive discussion on this matter and decided
&gt; that we should just set &quot;this&quot; to undefined for now. I&apos;ve emailed es-discuss
&gt; to change the spec accordingly.

I take it this is no longer true? ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063847</commentid>
    <comment_count>11</comment_count>
      <attachid>245268</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-23 18:05:35 -0800</bug_when>
    <thetext>Created attachment 245268
Updated for ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064776</commentid>
    <comment_count>12</comment_count>
      <attachid>245506</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-27 19:33:44 -0800</bug_when>
    <thetext>Created attachment 245506
Diff against my patch on 140918

I&apos;ve also made the [[Construct]] use the right structure. This involves changing how op_create_this works. At the moment, we use the &quot;callee&quot; object to find the structure for the new object but we need to be using the most derived class&apos;s constructor (called newTarget).

After discussing with Gavin &amp; Geoff, I&apos;m using Gavin&apos;s idea to use &quot;this&quot; register for this purpose. The idea is to put the newTarget into the &quot;this&quot; register and then op_create_this will obtain the structure out of that value instead of the callee object.

The alternatives invoke modifying the way arguments work in &quot;construct&quot; and that seemed much worse hack than this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072620</commentid>
    <comment_count>13</comment_count>
      <attachid>247489</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-02-26 20:19:45 -0800</bug_when>
    <thetext>Created attachment 247489
Added op_check_tdz in 64-bit LLint &amp; Baseline JIT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072621</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-02-26 20:21:08 -0800</bug_when>
    <thetext>I think I&apos;m going to just implement subclassing without TDZ first, and then add TDZ in a separate patch to keep the patch sizes small.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073300</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-02 07:34:29 -0800</bug_when>
    <thetext>Attachment 247489 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/Nodes.h:1622:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Nodes.h:1623:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:83:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:175:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:543:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 5 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1945934</commentid>
    <comment_count>16</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2023-04-01 01:10:53 -0700</bug_when>
    <thetext>This has been fixed for a while.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244682</attachid>
            <date>2015-01-14 23:53:03 -0800</date>
            <delta_ts>2015-01-17 21:16:05 -0800</delta_ts>
            <desc>Super naive WIP 1</desc>
            <filename>native-class-1.patch</filename>
            <type>text/plain</type>
            <size>45548</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzgzNzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc3OCw2ICsyNzc4LDcgQEAKIAkJOTlFNDVBMjExOEEx
QjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFbmNvZGVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTlF
NDVBMjIxOEExQjI1OTAwMjZEODhGIC8qIElucHV0Q3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElucHV0Q3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk5RTQ1QTIzMThBMUIyNTkwMDI2RDg4RiAvKiBOb25kZXRlcm1pbmlzdGljSW5wdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9uZGV0ZXJtaW5pc3RpY0lucHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCNDk1NEU4MUE2NjQwREIwMDI4MTVBNiAv
KiBQYXJzZXJGdW5jdGlvbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyRnVuY3Rpb25JbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlFNzI5NDA5MTkwRjAzMDYwMDFBOTFC
NSAvKiBCdW5kbGVQYXRoLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gQnVuZGxlUGF0aC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUU3Mjk0MEEx
OTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQnVuZGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RUE1
QzdBMDE5MEYwNUQyMDA1MDhFQkUgLyogSW5pdGlhbGl6ZUxMVk1NYWMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSW5pdGlhbGl6ZUxMVk1NYWMuY3BwOyBwYXRoID0g
bGx2bS9Jbml0aWFsaXplTExWTU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MTQxLDYgKzQxNDIsNyBAQAogCQkJCTkzMDUyQzMyMEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJz
ZXJBcmVuYS5jcHAgKi8sCiAJCQkJOTMwNTJDMzMwRkI3OTIxOTAwNDhGREMzIC8qIFBhcnNlckFy
ZW5hLmggKi8sCiAJCQkJMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVycm9yLmgg
Ki8sCisJCQkJOUI0OTU0RTgxQTY2NDBEQjAwMjgxNUE2IC8qIFBhcnNlckZ1bmN0aW9uSW5mby5o
ICovLAogCQkJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovLAog
CQkJCTY1MzAzRDYzMTQ0N0I5RTEwMEQzRjkwNCAvKiBQYXJzZXJUb2tlbnMuaCAqLywKIAkJCQk4
NjlFQkNCNjBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAko
cmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsMjIgKzI3MywyMSBAQAogCiBS
ZWdpc3RlcklEKiBPYmplY3RMaXRlcmFsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICAgaWYgKCFtX2xpc3QpIHsK
LSAgICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKLSAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld09iamVjdChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpKTsKLSAgICAgfQotICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9saXN0KTsKKyAgICBpZiAoIW1fbGlzdCkgeworICAgICAg
ICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3T2JqZWN0KGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCkpOworICAgIH0KKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3
T2JqID0gZ2VuZXJhdG9yLmVtaXROZXdPYmplY3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShuZXdPYmouZ2V0KCksIG1fbGlz
dCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eUxpc3RO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFByb3BlcnR5
TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5ld09iaiA9IGdlbmVyYXRv
ci50ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAgICAKLSAgICBnZW5lcmF0b3IuZW1pdE5ld09iamVj
dChuZXdPYmouZ2V0KCkpOwotICAgIAorICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmogPSBk
c3Q7CisKICAgICAvLyBGYXN0IGNhc2U6IHRoaXMgbG9vcCBqdXN0IGhhbmRsZXMgcmVndWxhciB2
YWx1ZSBwcm9wZXJ0aWVzLgogICAgIFByb3BlcnR5TGlzdE5vZGUqIHAgPSB0aGlzOwogICAgIGZv
ciAoOyBwICYmIHAtPm1fbm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQ7IHAg
PSBwLT5tX25leHQpIHsKQEAgLTM3NCw3ICszNzMsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0g
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbmV3T2Jq
LmdldCgpKTsKKyAgICByZXR1cm4gZHN0OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gQnJhY2tldEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpAQCAtMjc0NCw3ICsyNzQzLDUxIEBACiB7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
TmV3RnVuY3Rpb25FeHByZXNzaW9uKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHRo
aXMpOwogfQotICAgIAorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2xhc3NE
ZWNsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDbGFzc0Rl
Y2xOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQoreworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBjbGFzc0hlcml0YWdlOworICAg
IGlmIChtX3BhcmVudENsYXNzRXhwcmVzc2lvbikgeworICAgICAgICBjbGFzc0hlcml0YWdlID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2xh
c3NIZXJpdGFnZS5nZXQoKSwgbV9wYXJlbnRDbGFzc0V4cHJlc3Npb24pOworICAgIH0KKworICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBjb25zdHJ1Y3RvciA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fY29uc3RydWN0b3JEZWNsYXJhdGlvbik7CisgICAgaWYgKCFjbGFzc0hlcml0YWdlICYmICFt
X3N0YXRpY01ldGhvZHMgJiYgIW1faW5zdGFuY2VNZXRob2RzKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG90eXBlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOworICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm90b3R5cGUuZ2V0KCksIGNvbnN0cnVj
dG9yLmdldCgpLCBnZW5lcmF0b3Iudm0oKS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKKwor
ICAgIGlmIChjbGFzc0hlcml0YWdlKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90
b1BhcmVudCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPExhYmVs
PiBjbGFzc0hlcml0YWdlSXNOdWxsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJl
ZlB0cjxMYWJlbD4gcHJvdG9QYXJlbnRJc1NldCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworCisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3Bf
ZXFfbnVsbCwgcHJvdG9QYXJlbnQuZ2V0KCksIGNsYXNzSGVyaXRhZ2UuZ2V0KCkpLCBjbGFzc0hl
cml0YWdlSXNOdWxsLmdldCgpKTsKKworICAgICAgICAvLyBGSVhNRTogVGhyb3cgVHlwZUVycm9y
IGlmIGlzQ29uc3RydWN0b3IocGFyZW50Q2xhc3MpIGlzIGZhbHNlIG9yIGl0J3MgYSBnZW5lcmF0
b3IgZnVuY3Rpb24uCisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm90b1BhcmVudC5n
ZXQoKSwgY2xhc3NIZXJpdGFnZS5nZXQoKSwgZ2VuZXJhdG9yLnZtKCktPnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSk7CisgICAgICAgIC8vIEZJWE1FOiBUaHJvdyBUeXBlRXJyb3IgaWYgVHlwZShw
cm90b1BhcmVudCkgaXMgbm90IE9iamVjdCBvciBudWxsLgorCisgICAgICAgIGdlbmVyYXRvci5l
bWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRvci52bSgpLT5wcm9wZXJ0
eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8sIHByb3RvUGFyZW50LmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wKHByb3RvUGFyZW50SXNTZXQuZ2V0KCkpOworCisgICAgICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwoY2xhc3NIZXJpdGFnZUlzTnVsbC5nZXQoKSk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRvci52bSgpLT5w
cm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8sIGNsYXNzSGVyaXRhZ2UuZ2V0KCkpOworCisg
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwocHJvdG9QYXJlbnRJc1NldC5nZXQoKSk7CisgICAg
fQorCisgICAgaWYgKG1fc3RhdGljTWV0aG9kcykKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2Rl
KGNvbnN0cnVjdG9yLmdldCgpLCBtX3N0YXRpY01ldGhvZHMpOworCisgICAgaWYgKG1faW5zdGFu
Y2VNZXRob2RzKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUocHJvdG90eXBlLmdldCgpLCBt
X2luc3RhbmNlTWV0aG9kcyk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tCiBSZWdpc3Rl
cklEKiBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzMsMTEgKzI3MywxMiBAQAogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHks
IFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlcnMsIHVuc2lnbmVkIG9wZW5CcmFjZU9mZnNldCwgdW5z
aWduZWQgY2xvc2VCcmFjZU9mZnNldCwgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5RW5kTGlu
ZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0YXJ0KQor
ICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZv
LCB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFydCkKICAgICB7Ci0gICAgICAgIEZ1bmNFeHBy
Tm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24s
ICpuYW1lLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlT2Zmc2V0
LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBzdGFydENvbHVtbiksIHBhcmFtZXRl
cnMpOwotICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxv
Y2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwotICAgICAgICBi
b2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChmdW5jdGlvbktleXdvcmRTdGFydCk7CisgICAg
ICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRXhwck5v
ZGUobG9jYXRpb24sICppbmZvLm5hbWUsIGluZm8uYm9keSwKKyAgICAgICAgICAgIG1fc291cmNl
Q29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNl
T2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5w
YXJhbWV0ZXJzKTsKKyAgICAgICAgaW5mby5ib2R5LT5zZXRMb2MoaW5mby5ib2R5U3RhcnRMaW5l
LCBpbmZvLmJvZHlFbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0
YXJ0T2Zmc2V0KTsKKyAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChm
dW5jdGlvbktleXdvcmRTdGFydCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBA
IC0yOTEsMjAgKzI5MiwyMSBAQAogICAgICAgICBib2R5LT5zZXRGdW5jdGlvbk5hbWVTdGFydChm
dW5jdGlvbk5hbWVTdGFydCk7CiAgICAgfQogICAgIAotICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0
eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wsIGNvbnN0IElkZW50aWZp
ZXIqIG5hbWUsIFBhcmFtZXRlck5vZGUqIHBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwg
dW5zaWduZWQgb3BlbkJyYWNlT2Zmc2V0LCB1bnNpZ25lZCBjbG9zZUJyYWNlT2Zmc2V0LCBpbnQg
Ym9keVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lLCB1bnNpZ25lZCBib2R5U3RhcnRDb2x1bW4s
IHVuc2lnbmVkIGdldE9yU2V0U3RhcnRPZmZzZXQpCisgICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5
Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKKyAgICAgICAgY29uc3Qg
SWRlbnRpZmllciogbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBp
bmZvLCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0KQogICAgIHsKICAgICAgICAgQVNTRVJU
KG5hbWUpOwotICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUs
IGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwotICAgICAg
ICBib2R5LT5zZXRJbmZlcnJlZE5hbWUoKm5hbWUpOwotICAgICAgICBib2R5LT5zZXRGdW5jdGlv
bktleXdvcmRTdGFydChnZXRPclNldFN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpuYW1lLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1
bmNFeHByTm9kZShsb2NhdGlvbiwgbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIs
IGJvZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihvcGVuQnJhY2VPZmZzZXQsIGNsb3Nl
QnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIGJvZHlTdGFydENvbHVtbiksIHBhcmFtcyksIHR5
cGUpOworICAgICAgICBpbmZvLmJvZHktPnNldExvYyhpbmZvLmJvZHlTdGFydExpbmUsIGluZm8u
Ym9keUVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZz
ZXQpOworICAgICAgICBpbmZvLmJvZHktPnNldEluZmVycmVkTmFtZSgqbmFtZSk7CisgICAgICAg
IGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JTZXRTdGFydE9mZnNldCk7
CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZSgqbmFtZSwg
bmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3BlcnR5
TmFtZXMtPm51bGxJZGVudGlmaWVyLCBpbmZvLmJvZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVz
c2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNlT2Zmc2V0LCBpbmZvLmJv
ZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5wYXJhbWV0ZXJzKSwgdHlw
ZSk7CiAgICAgfQogICAgIAotICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdl
dHRlck9yU2V0dGVyUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBi
b29sLCBkb3VibGUgbmFtZSwgUGFyYW1ldGVyTm9kZSogcGFyYW1zLCBGdW5jdGlvbkJvZHlOb2Rl
KiBib2R5LCB1bnNpZ25lZCBvcGVuQnJhY2VPZmZzZXQsIHVuc2lnbmVkIGNsb3NlQnJhY2VPZmZz
ZXQsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUsIHVuc2lnbmVkIGJvZHlTdGFy
dENvbHVtbiwgdW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNldCkKKyAgICBORVZFUl9JTkxJTkUg
UHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2bSwgUGFyc2Vy
QXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9w
ZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwgZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0
aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNldCkK
ICAgICB7Ci0gICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5kTGluZSwg
bG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7Ci0gICAgICAg
IGJvZHktPnNldEZ1bmN0aW9uS2V5d29yZFN0YXJ0KGdldE9yU2V0U3RhcnRPZmZzZXQpOwotICAg
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUocGFyc2VyQXJlbmEu
aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKHZtLCBuYW1lKSwgbmV3ICht
X3BhcnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24sIHZtLT5wcm9wZXJ0eU5hbWVzLT5u
dWxsSWRlbnRpZmllciwgYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFj
ZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgYm9keVN0YXJ0Q29sdW1u
KSwgcGFyYW1zKSwgdHlwZSk7CisgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0
YXJ0TGluZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9u
LmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3Jk
U3RhcnQoZ2V0T3JTZXRTdGFydE9mZnNldCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFByb3BlcnR5Tm9kZShwYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVt
ZXJpY0lkZW50aWZpZXIodm0sIG5hbWUpLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9k
ZShsb2NhdGlvbiwgdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBpbmZvLmJvZHks
IG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5j
bG9zZUJyYWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1u
KSwgaW5mby5wYXJhbWV0ZXJzKSwgdHlwZSk7CiAgICAgfQogCiAgICAgQXJndW1lbnRzTm9kZSog
Y3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBcmd1bWVudHNO
b2RlKCk7IH0KQEAgLTMzNiwxNyArMzM4LDI2IEBACiAgICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0
ZUNsYXVzZUxpc3QoQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBDbGF1c2VMaXN0Tm9kZShjbGF1c2UpOyB9CiAgICAgQ2xhdXNlTGlzdE5vZGUqIGNy
ZWF0ZUNsYXVzZUxpc3QoQ2xhdXNlTGlzdE5vZGUqIHRhaWwsIENhc2VDbGF1c2VOb2RlKiBjbGF1
c2UpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ2xhdXNlTGlzdE5vZGUodGFpbCwgY2xh
dXNlKTsgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgRnVu
Y3Rpb25Cb2R5Tm9kZSogYm9keSwgUGFyYW1ldGVyTm9kZSogcGFyYW1ldGVycywgdW5zaWduZWQg
b3BlbkJyYWNlT2Zmc2V0LCB1bnNpZ25lZCBjbG9zZUJyYWNlT2Zmc2V0LCBpbnQgYm9keVN0YXJ0
TGluZSwgaW50IGJvZHlFbmRMaW5lLCB1bnNpZ25lZCBib2R5U3RhcnRDb2x1bW4sIHVuc2lnbmVk
IGZ1bmN0aW9uS2V5d29yZFN0YXJ0KQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZ1bmNEZWNs
U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IFBhcnNlckZ1
bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25LZXl3b3JkU3Rh
cnQpCiAgICAgewotICAgICAgICBGdW5jRGVjbE5vZGUqIGRlY2wgPSBuZXcgKG1fcGFyc2VyQXJl
bmEpIEZ1bmNEZWNsTm9kZShsb2NhdGlvbiwgKm5hbWUsIGJvZHksIG1fc291cmNlQ29kZS0+c3Vi
RXhwcmVzc2lvbihvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExp
bmUsIGJvZHlTdGFydENvbHVtbiksIHBhcmFtZXRlcnMpOwotICAgICAgICBpZiAoKm5hbWUgPT0g
bV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKQorICAgICAgICBGdW5jRGVjbE5vZGUqIGRl
Y2wgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNEZWNsTm9kZShsb2NhdGlvbiwgKmluZm8ubmFt
ZSwgaW5mby5ib2R5LAorICAgICAgICAgICAgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGlu
Zm8ub3BlbkJyYWNlT2Zmc2V0LCBpbmZvLmNsb3NlQnJhY2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0
TGluZSwgaW5mby5ib2R5U3RhcnRDb2x1bW4pLCBpbmZvLnBhcmFtZXRlcnMpOworICAgICAgICBp
ZiAoKmluZm8ubmFtZSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpCiAgICAgICAg
ICAgICB1c2VzQXJndW1lbnRzKCk7CiAgICAgICAgIG1fc2NvcGUubV9mdW5jRGVjbGFyYXRpb25z
LmFwcGVuZChkZWNsLT5ib2R5KCkpOwotICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0YXJ0TGlu
ZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRP
ZmZzZXQpOwotICAgICAgICBib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChmdW5jdGlvbktl
eXdvcmRTdGFydCk7CisgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGlu
ZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVT
dGFydE9mZnNldCk7CisgICAgICAgIGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQo
ZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAgICAgICByZXR1cm4gZGVjbDsKICAgICB9CiAKKyAg
ICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVDbGFzc0RlY2xTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUq
IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24sCisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBwYXJlbnRD
bGFzc0V4cHJlc3Npb24sIFByb3BlcnR5TGlzdE5vZGUqIGluc3RhbmNlTWV0aG9kcywgUHJvcGVy
dHlMaXN0Tm9kZSogc3RhdGljTWV0aG9kcywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUpCisg
ICAgeworICAgICAgICBDbGFzc0RlY2xOb2RlKiBkZWNsID0gbmV3IChtX3BhcnNlckFyZW5hKSBD
bGFzc0RlY2xOb2RlKGxvY2F0aW9uLCBuYW1lLCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uLCBwYXJl
bnRDbGFzc0V4cHJlc3Npb24sIGluc3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9kcyk7CisgICAg
ICAgIGRlY2wtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0
LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICByZXR1cm4gZGVjbDsKKyAgICB9
CisKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVCbG9ja1N0YXRlbWVudChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBKU0M6OlNvdXJjZUVsZW1lbnRzKiBlbGVtZW50cywgaW50IHN0
YXJ0TGluZSwgaW50IGVuZExpbmUpCiAgICAgewogICAgICAgICBCbG9ja05vZGUqIGJsb2NrID0g
bmV3IChtX3BhcnNlckFyZW5hKSBCbG9ja05vZGUobG9jYXRpb24sIGVsZW1lbnRzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvS2V5d29yZHMudGFibGUKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9LZXl3b3Jkcy50YWJsZQkocmV2aXNpb24g
MTc4MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9LZXl3b3Jkcy50YWJsZQko
d29ya2luZyBjb3B5KQpAQCAtMTAsOCArMTAsMTAgQEAKIGJyZWFrCQlCUkVBSwogY2FzZQkJQ0FT
RQogY2F0Y2gJCUNBVENICitjbGFzcwkJQ0xBU1NUT0tFTgogY29uc3QJCUNPTlNUVE9LRU4KIGRl
ZmF1bHQJCURFRkFVTFQKK2V4dGVuZHMJCUVYVEVORFMKIGZpbmFsbHkJCUZJTkFMTFkKIGZvcgkJ
Rk9SCiBpbnN0YW5jZW9mCUlOU1RBTkNFT0YKQEAgLTI4LDYgKzMwLDggQEAKIHdoaWxlCQlXSElM
RQogZWxzZQkJRUxTRQogaW4JCUlOVE9LRU4KK3N0YXRpYwkJU1RBVElDVE9LRU4KK3N1cGVyICAg
ICAgICAgICBTVVBFUgogc3dpdGNoCQlTV0lUQ0gKIHRocm93CQlUSFJPVwogdHJ5CQlUUlkKQEAg
LTM2LDEyICs0MCw5IEBACiBkZWJ1Z2dlcglERUJVR0dFUgogCiAjIFJlc2VydmVkIGZvciBmdXR1
cmUgdXNlLgotY2xhc3MgICAgICAgICAgIFJFU0VSVkVECiBlbnVtICAgICAgICAgICAgUkVTRVJW
RUQKIGV4cG9ydCAgICAgICAgICBSRVNFUlZFRAotZXh0ZW5kcyAgICAgICAgIFJFU0VSVkVECiBp
bXBvcnQgICAgICAgICAgUkVTRVJWRUQKLXN1cGVyICAgICAgICAgICBSRVNFUlZFRAogCiAjIFJl
c2VydmVkIGZvciBmdXR1cmUgdXNlIGluIHN0cmljdCBjb2RlLgogaW1wbGVtZW50cyAgICAgIFJF
U0VSVkVEX0lGX1NUUklDVApAQCAtNTEsNyArNTIsNiBAQAogcHJpdmF0ZSAgICAgICAgIFJFU0VS
VkVEX0lGX1NUUklDVAogcHJvdGVjdGVkICAgICAgIFJFU0VSVkVEX0lGX1NUUklDVAogcHVibGlj
ICAgICAgICAgIFJFU0VSVkVEX0lGX1NUUklDVAotc3RhdGljICAgICAgICAgIFJFU0VSVkVEX0lG
X1NUUklDVAogeWllbGQgICAgICAgICAgIFJFU0VSVkVEX0lGX1NUUklDVAogCiBAZW5kCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAko
cmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29u
c3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2OCw2ICs3NjgsMTcgQEAKICAgICAgICAg
bV9ib2R5LT5maW5pc2hQYXJzaW5nKHNvdXJjZSwgcGFyYW1ldGVyLCBpZGVudCwgRnVuY3Rpb25E
ZWNsYXJhdGlvbik7CiAgICAgfQogCisgICAgaW5saW5lIENsYXNzRGVjbE5vZGU6OkNsYXNzRGVj
bE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgRXhwcmVzc2lvbk5vZGUqIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24sCisgICAgICAgIEV4
cHJlc3Npb25Ob2RlKiBwYXJlbnRDbGFzc0V4cHJlc3Npb24sIFByb3BlcnR5TGlzdE5vZGUqIGlu
c3RhbmNlTWV0aG9kcywgUHJvcGVydHlMaXN0Tm9kZSogc3RhdGljTWV0aG9kcykKKyAgICAgICAg
OiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQorICAgICAgICAsIG1fbmFtZShuYW1lKQorICAgICAg
ICAsIG1fY29uc3RydWN0b3JEZWNsYXJhdGlvbihjb25zdHJ1Y3RvckRlY2xhcmF0aW9uKQorICAg
ICAgICAsIG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKHBhcmVudENsYXNzRXhwcmVzc2lvbikKKyAg
ICAgICAgLCBtX2luc3RhbmNlTWV0aG9kcyhpbnN0YW5jZU1ldGhvZHMpCisgICAgICAgICwgbV9z
dGF0aWNNZXRob2RzKHN0YXRpY01ldGhvZHMpCisgICAgeworICAgIH0KKwogICAgIGlubGluZSBD
YXNlQ2xhdXNlTm9kZTo6Q2FzZUNsYXVzZU5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFNvdXJj
ZUVsZW1lbnRzKiBzdGF0ZW1lbnRzKQogICAgICAgICA6IG1fZXhwcihleHByKQogICAgICAgICAs
IG1fc3RhdGVtZW50cyhzdGF0ZW1lbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIzLDYgKzE3MjMsMjIgQEAKICAgICAgICAg
RnVuY3Rpb25Cb2R5Tm9kZSogbV9ib2R5OwogICAgIH07CiAKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGluaGVyaXQgZnJvbSBUaHJvd2FibGVFeHByZXNzaW9uRGF0YS4KKyAgICBjbGFzcyBDbGFz
c0RlY2xOb2RlIGZpbmFsIDogcHVibGljIFN0YXRlbWVudE5vZGUgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgQ2xhc3NEZWNsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyJiwgRXhwcmVzc2lvbk5vZGUqIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24sCisgICAgICAgICAg
ICBFeHByZXNzaW9uTm9kZSogcGFyZW50Q2xhc3MsIFByb3BlcnR5TGlzdE5vZGUqIGluc3RhbmNl
TWV0aG9kcywgUHJvcGVydHlMaXN0Tm9kZSogc3RhdGljTWV0aG9kcyk7CisKKyAgICBwcml2YXRl
OgorICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKKworICAgICAgICBJZGVudGlmaWVyIG1fbmFtZTsK
KyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fY29uc3RydWN0b3JEZWNsYXJhdGlvbjsKKyAgICAg
ICAgRXhwcmVzc2lvbk5vZGUqIG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uOworICAgICAgICBQcm9w
ZXJ0eUxpc3ROb2RlKiBtX2luc3RhbmNlTWV0aG9kczsKKyAgICAgICAgUHJvcGVydHlMaXN0Tm9k
ZSogbV9zdGF0aWNNZXRob2RzOworICAgIH07CisKICAgICBjbGFzcyBDYXNlQ2xhdXNlTm9kZSA6
IHB1YmxpYyBQYXJzZXJBcmVuYUZyZWVhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENhc2VD
bGF1c2VOb2RlKEV4cHJlc3Npb25Ob2RlKiwgU291cmNlRWxlbWVudHMqID0gMCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAxNzgzNzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNTAsNiArMTE1MCwxMCBAQAogICAgIGNhc2UgQ09OU1RUT0tFTjoKICAgICAgICAgcmVz
dWx0ID0gcGFyc2VDb25zdERlY2xhcmF0aW9uKGNvbnRleHQpOwogICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENMQVNTVE9LRU46CisgICAgICAgIGZhaWxJZkZhbHNlKG1fc3RhdGVtZW50RGVwdGgg
PT0gMSwgIkNsYXNzIGRlY2xhcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIGEgbGV4aWNhbGx5IG5l
c3RlZCBzdGF0ZW1lbnQiKTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VDbGFzc0RlY2xhcmF0aW9u
KGNvbnRleHQpOworICAgICAgICBicmVhazsKICAgICBjYXNlIEZVTkNUSU9OOgogICAgICAgICBm
YWlsSWZGYWxzZUlmU3RyaWN0KG1fc3RhdGVtZW50RGVwdGggPT0gMSwgIlN0cmljdCBtb2RlIGRv
ZXMgbm90IGFsbG93IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGxleGljYWxseSBuZXN0ZWQg
c3RhdGVtZW50Iik7CiAgICAgICAgIHJlc3VsdCA9IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihj
b250ZXh0KTsKQEAgLTEyNjcsMTMgKzEyNzEsMTUgQEAKICAgICAgICAgcmV0dXJuICJzZXR0ZXIi
OwogICAgIGNhc2UgRnVuY3Rpb25Nb2RlOgogICAgICAgICByZXR1cm4gImZ1bmN0aW9uIjsKKyAg
ICBjYXNlIE1ldGhvZE1vZGU6CisgICAgICAgIHJldHVybiAibWV0aG9kIjsKICAgICB9CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXIm
IGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJz
ZU1vZGUgbW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgY29uc3QgSWRlbnRpZmll
ciomIG5hbWUsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJzLCBUcmVlRnVuY3Rp
b25Cb2R5JiBib2R5LCB1bnNpZ25lZCYgb3BlbkJyYWNlT2Zmc2V0LCB1bnNpZ25lZCYgY2xvc2VC
cmFjZU9mZnNldCwgaW50JiBib2R5U3RhcnRMaW5lLCB1bnNpZ25lZCYgYm9keVN0YXJ0Q29sdW1u
KQordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYgY29udGV4dCwgRnVuY3Rpb25SZXF1aXJlbWVu
dHMgcmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSBtb2RlLCBib29sIG5hbWVJc0luQ29u
dGFpbmluZ1Njb3BlLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+JiBpbmZvKQogewog
ICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKICAg
ICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CkBAIC0xMjgxLDE0ICsxMjg3LDE0IEBA
CiAgICAgY29uc3QgSWRlbnRpZmllciogbGFzdEZ1bmN0aW9uTmFtZSA9IG1fbGFzdEZ1bmN0aW9u
TmFtZTsKICAgICBtX2xhc3RGdW5jdGlvbk5hbWUgPSBudWxscHRyOwogICAgIGlmIChtYXRjaChJ
REVOVCkpIHsKLSAgICAgICAgbmFtZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAgICBt
X2xhc3RGdW5jdGlvbk5hbWUgPSBuYW1lOworICAgICAgICBpbmZvLm5hbWUgPSBtX3Rva2VuLm1f
ZGF0YS5pZGVudDsKKyAgICAgICAgbV9sYXN0RnVuY3Rpb25OYW1lID0gaW5mby5uYW1lOwogICAg
ICAgICBuZXh0KCk7CiAgICAgICAgIGlmICghbmFtZUlzSW5Db250YWluaW5nU2NvcGUpCi0gICAg
ICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0KGZ1bmN0aW9uU2NvcGUtPmRlY2xhcmVWYXJpYWJs
ZShuYW1lKSwgIiciLCBuYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkICIsIHN0cmluZ0Zv
ckZ1bmN0aW9uTW9kZShtb2RlKSwgIiBuYW1lIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgICAg
ICBmYWlsSWZGYWxzZUlmU3RyaWN0KGZ1bmN0aW9uU2NvcGUtPmRlY2xhcmVWYXJpYWJsZShpbmZv
Lm5hbWUpLCAiJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCAiLCBzdHJp
bmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIgbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwogICAgIH0g
ZWxzZSBpZiAocmVxdWlyZW1lbnRzID09IEZ1bmN0aW9uTmVlZHNOYW1lKSB7CiAgICAgICAgIGlm
IChtYXRjaChPUEVOUEFSRU4pICYmIG1vZGUgPT0gRnVuY3Rpb25Nb2RlKQotICAgICAgICAgICAg
c2VtYW50aWNGYWlsKCJGdW5jdGlvbiBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKKyAg
ICAgICAgICAgIHNlbWFudGljRmFpbChzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIgbXVz
dCBoYXZlIGEgbmFtZSIpOwogICAgICAgICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tleXdvcmQoc3Ry
aW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpLCAiIG5hbWUiKTsKICAgICAgICAgZmFpbER1ZVRvVW5l
eHBlY3RlZFRva2VuKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOTgsMTkgKzEzMDQs
MTkgQEAKICAgICAgICAgZmFpbFdpdGhNZXNzYWdlKCJFeHBlY3RlZCBhbiBvcGVuaW5nICcoJyBi
ZWZvcmUgYSAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIncyBwYXJhbWV0ZXIgbGlz
dCIpOwogICAgIH0KICAgICBpZiAoIW1hdGNoKENMT1NFUEFSRU4pKSB7Ci0gICAgICAgIHBhcmFt
ZXRlcnMgPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCk7Ci0gICAgICAgIGZhaWxJZkZh
bHNlKHBhcmFtZXRlcnMsICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVycyBmb3IgdGhpcyAiLCBzdHJp
bmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOworICAgICAgICBpbmZvLnBhcmFtZXRlcnMgPSBwYXJz
ZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNlKGluZm8ucGFy
YW1ldGVycywgIkNhbm5vdCBwYXJzZSBwYXJhbWV0ZXJzIGZvciB0aGlzICIsIHN0cmluZ0ZvckZ1
bmN0aW9uTW9kZShtb2RlKSk7CiAgICAgfQogICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTiwg
IkV4cGVjdGVkIGEgJyknIG9yIGEgJywnIGFmdGVyIGEgcGFyYW1ldGVyIGRlY2xhcmF0aW9uIik7
CiAgICAgbWF0Y2hPckZhaWwoT1BFTkJSQUNFLCAiRXhwZWN0ZWQgYW4gb3BlbmluZyAneycgYXQg
dGhlIHN0YXJ0IG9mIGEgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpLCAiIGJvZHkiKTsK
ICAgICAKLSAgICBvcGVuQnJhY2VPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5vZmZzZXQ7Ci0gICAg
Ym9keVN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGJvZHlTdGFydENvbHVtbiA9IG1fdG9r
ZW4ubV9kYXRhLm9mZnNldCAtIG1fdG9rZW4ubV9kYXRhLmxpbmVTdGFydE9mZnNldDsKKyAgICBp
bmZvLm9wZW5CcmFjZU9mZnNldCA9IG1fdG9rZW4ubV9kYXRhLm9mZnNldDsKKyAgICBpbmZvLmJv
ZHlTdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBpbmZvLmJvZHlTdGFydENvbHVtbiA9IG1f
dG9rZW4ubV9kYXRhLm9mZnNldCAtIG1fdG9rZW4ubV9kYXRhLmxpbmVTdGFydE9mZnNldDsKICAg
ICBKU1Rva2VuTG9jYXRpb24gc3RhcnRMb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIAog
ICAgIC8vIElmIHdlIGtub3cgYWJvdXQgdGhpcyBmdW5jdGlvbiBhbHJlYWR5LCB3ZSBjYW4gdXNl
IHRoZSBjYWNoZWQgaW5mbyBhbmQgc2tpcCB0aGUgcGFyc2VyIHRvIHRoZSBlbmQgb2YgdGhlIGZ1
bmN0aW9uLgotICAgIGlmIChjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogY2FjaGVkSW5m
byA9IFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hlID8gZmluZENhY2hlZEZ1bmN0aW9u
SW5mbyhvcGVuQnJhY2VPZmZzZXQpIDogMCkgeworICAgIGlmIChjb25zdCBTb3VyY2VQcm92aWRl
ckNhY2hlSXRlbSogY2FjaGVkSW5mbyA9IFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hl
ID8gZmluZENhY2hlZEZ1bmN0aW9uSW5mbyhpbmZvLm9wZW5CcmFjZU9mZnNldCkgOiAwKSB7CiAg
ICAgICAgIC8vIElmIHdlJ3JlIGluIGEgc3RyaWN0IGNvbnRleHQsIHRoZSBjYWNoZWQgZnVuY3Rp
b24gaW5mbyBtdXN0IHNheSBpdCB3YXMgc3RyaWN0IHRvby4KICAgICAgICAgQVNTRVJUKCFzdHJp
Y3RNb2RlKCkgfHwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CiAgICAgICAgIEpTVG9rZW5Mb2Nh
dGlvbiBlbmRMb2NhdGlvbjsKQEAgLTEzMTksMjEgKzEzMjUsMjEgQEAKICAgICAgICAgZW5kTG9j
YXRpb24uc3RhcnRPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlT2Zmc2V0OwogICAgICAg
ICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlTGlu
ZVN0YXJ0T2Zmc2V0OwogCi0gICAgICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA9IChl
bmRMb2NhdGlvbi5saW5lID09IGJvZHlTdGFydExpbmUpOworICAgICAgICBib29sIGVuZENvbHVt
bklzT25TdGFydExpbmUgPSAoZW5kTG9jYXRpb24ubGluZSA9PSBpbmZvLmJvZHlTdGFydExpbmUp
OwogICAgICAgICBBU1NFUlQoZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPj0gZW5kTG9jYXRpb24u
bGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgdW5zaWduZWQgYm9keUVuZENvbHVtbiA9IGVuZENv
bHVtbklzT25TdGFydExpbmUgPwogICAgICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQg
LSBtX3Rva2VuLm1fZGF0YS5saW5lU3RhcnRPZmZzZXQgOgogICAgICAgICAgICAgZW5kTG9jYXRp
b24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0
YXJ0T2Zmc2V0OwogCi0gICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShz
dGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgYm9keVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1u
LCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgaW5mby5ib2R5ID0gY29udGV4dC5j
cmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluZm8uYm9keVN0
YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKICAgICAg
ICAgCiAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnJlc3RvcmVGcm9tU291cmNlUHJvdmlkZXJDYWNo
ZShjYWNoZWRJbmZvKTsKICAgICAgICAgZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29w
ZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbyksICJQYXJzZXIgZXJyb3IiKTsK
ICAgICAgICAgCi0gICAgICAgIGNsb3NlQnJhY2VPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJy
YWNlT2Zmc2V0OworICAgICAgICBpbmZvLmNsb3NlQnJhY2VPZmZzZXQgPSBjYWNoZWRJbmZvLT5j
bG9zZUJyYWNlT2Zmc2V0OwogCi0gICAgICAgIGNvbnRleHQuc2V0RnVuY3Rpb25OYW1lU3RhcnQo
Ym9keSwgZnVuY3Rpb25OYW1lU3RhcnQpOworICAgICAgICBjb250ZXh0LnNldEZ1bmN0aW9uTmFt
ZVN0YXJ0KGluZm8uYm9keSwgZnVuY3Rpb25OYW1lU3RhcnQpOwogICAgICAgICBtX3Rva2VuID0g
Y2FjaGVkSW5mby0+Y2xvc2VCcmFjZVRva2VuKCk7CiAgICAgICAgIGlmIChlbmRDb2x1bW5Jc09u
U3RhcnRMaW5lKQogICAgICAgICAgICAgbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNl
dCA9IGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQ7CkBAIC0xMzQxLDIzICsxMzQ3LDI0IEBACiAgICAg
ICAgIG1fbGV4ZXItPnNldE9mZnNldChtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0LCBtX3Rv
a2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgbV9sZXhlci0+c2V0TGlu
ZU51bWJlcihtX3Rva2VuLm1fbG9jYXRpb24ubGluZSk7CiAKLSAgICAgICAgY29udGV4dC5zZXRF
bmRPZmZzZXQoYm9keSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpKTsKKyAgICAgICAgY29udGV4
dC5zZXRFbmRPZmZzZXQoaW5mby5ib2R5LCBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCkpOwogICAg
ICAgICAKICAgICAgICAgbmV4dCgpOworICAgICAgICBpbmZvLmJvZHlFbmRMaW5lID0gbV9sYXN0
VG9rZW5FbmRQb3NpdGlvbi5saW5lOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
bV9sYXN0RnVuY3Rpb25OYW1lID0gbGFzdEZ1bmN0aW9uTmFtZTsKICAgICBQYXJzZXJTdGF0ZSBv
bGRTdGF0ZSA9IHNhdmVTdGF0ZSgpOwotICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250
ZXh0KTsKKyAgICBpbmZvLmJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsKICAgICBy
ZXN0b3JlU3RhdGUob2xkU3RhdGUpOwotICAgIGZhaWxJZkZhbHNlKGJvZHksICJDYW5ub3QgcGFy
c2UgdGhlIGJvZHkgb2YgdGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOwotICAg
IGNvbnRleHQuc2V0RW5kT2Zmc2V0KGJvZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7Ci0g
ICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1vZGUoKSAmJiBuYW1lKSB7CisgICAgZmFpbElm
RmFsc2UoaW5mby5ib2R5LCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5n
Rm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsKKyAgICBjb250ZXh0LnNldEVuZE9mZnNldChpbmZvLmJv
ZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7CisgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0
cmljdE1vZGUoKSAmJiBpbmZvLm5hbWUpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobW9kZSA9
PSBGdW5jdGlvbk1vZGUpOwotICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS0+cHJvcGVy
dHlOYW1lcy0+YXJndW1lbnRzID09ICpuYW1lLCAiJyIsIG5hbWUtPmltcGwoKSwgIicgaXMgbm90
IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICBzZW1hbnRp
Y0ZhaWxJZlRydWUobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbmFtZSwgIiciLCBuYW1l
LT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUi
KTsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3Vt
ZW50cyA9PSAqaW5mby5uYW1lLCAiJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2
YWxpZCBmdW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgIHNlbWFudGljRmFp
bElmVHJ1ZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppbmZvLm5hbWUsICInIiwgaW5m
by5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0
IG1vZGUiKTsKICAgICB9Ci0gICAgY2xvc2VCcmFjZU9mZnNldCA9IG1fdG9rZW4ubV9kYXRhLm9m
ZnNldDsKKyAgICBpbmZvLmNsb3NlQnJhY2VPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5vZmZzZXQ7
CiAgICAgdW5zaWduZWQgY2xvc2VCcmFjZUxpbmUgPSBtX3Rva2VuLm1fZGF0YS5saW5lOwogICAg
IHVuc2lnbmVkIGNsb3NlQnJhY2VMaW5lU3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5saW5l
U3RhcnRPZmZzZXQ7CiAgICAgCkBAIC0xMzY1LDI2ICsxMzcyLDI3IEBACiAgICAgLy8gQW55IGZ1
dHVyZSByZXBhcnNpbmcgY2FuIHRoZW4gc2tpcCB0aGUgZnVuY3Rpb24uCiAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5pbXVtRnVuY3Rpb25MZW5ndGhUb0NhY2hlID0gMTY7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtPiBuZXdJbmZvOwotICAgIGludCBmdW5jdGlv
bkxlbmd0aCA9IGNsb3NlQnJhY2VPZmZzZXQgLSBvcGVuQnJhY2VPZmZzZXQ7CisgICAgaW50IGZ1
bmN0aW9uTGVuZ3RoID0gaW5mby5jbG9zZUJyYWNlT2Zmc2V0IC0gaW5mby5vcGVuQnJhY2VPZmZz
ZXQ7CiAgICAgaWYgKFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hlICYmIG1fZnVuY3Rp
b25DYWNoZSAmJiBmdW5jdGlvbkxlbmd0aCA+IG1pbmltdW1GdW5jdGlvbkxlbmd0aFRvQ2FjaGUp
IHsKICAgICAgICAgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1DcmVhdGlvblBhcmFtZXRlcnMgcGFy
YW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5mdW5jdGlvbk5hbWVTdGFydCA9IGZ1bmN0aW9u
TmFtZVN0YXJ0OwogICAgICAgICBwYXJhbWV0ZXJzLmNsb3NlQnJhY2VMaW5lID0gY2xvc2VCcmFj
ZUxpbmU7Ci0gICAgICAgIHBhcmFtZXRlcnMuY2xvc2VCcmFjZU9mZnNldCA9IGNsb3NlQnJhY2VP
ZmZzZXQ7CisgICAgICAgIHBhcmFtZXRlcnMuY2xvc2VCcmFjZU9mZnNldCA9IGluZm8uY2xvc2VC
cmFjZU9mZnNldDsKICAgICAgICAgcGFyYW1ldGVycy5jbG9zZUJyYWNlTGluZVN0YXJ0T2Zmc2V0
ID0gY2xvc2VCcmFjZUxpbmVTdGFydE9mZnNldDsKICAgICAgICAgZnVuY3Rpb25TY29wZS0+Zmls
bFBhcmFtZXRlcnNGb3JTb3VyY2VQcm92aWRlckNhY2hlKHBhcmFtZXRlcnMpOwogICAgICAgICBu
ZXdJbmZvID0gU291cmNlUHJvdmlkZXJDYWNoZUl0ZW06OmNyZWF0ZShwYXJhbWV0ZXJzKTsKIAog
ICAgIH0KLSAgICBjb250ZXh0LnNldEZ1bmN0aW9uTmFtZVN0YXJ0KGJvZHksIGZ1bmN0aW9uTmFt
ZVN0YXJ0KTsKKyAgICBjb250ZXh0LnNldEZ1bmN0aW9uTmFtZVN0YXJ0KGluZm8uYm9keSwgZnVu
Y3Rpb25OYW1lU3RhcnQpOwogICAgIAogICAgIGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9u
U2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pLCAiUGFyc2VyIGVycm9y
Iik7CiAgICAgbWF0Y2hPckZhaWwoQ0xPU0VCUkFDRSwgIkV4cGVjdGVkIGEgY2xvc2luZyAnfScg
YWZ0ZXIgYSAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIgYm9keSIpOwogICAgIAog
ICAgIGlmIChuZXdJbmZvKQotICAgICAgICBtX2Z1bmN0aW9uQ2FjaGUtPmFkZChvcGVuQnJhY2VP
ZmZzZXQsIFdURjo6bW92ZShuZXdJbmZvKSk7CisgICAgICAgIG1fZnVuY3Rpb25DYWNoZS0+YWRk
KGluZm8ub3BlbkJyYWNlT2Zmc2V0LCBXVEY6Om1vdmUobmV3SW5mbykpOwogICAgIAogICAgIG5l
eHQoKTsKKyAgICBpbmZvLmJvZHlFbmRMaW5lID0gbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5l
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzk1LDE5ICsxNDAzLDExOCBAQAogICAgIEpT
VG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIHVuc2lnbmVkIGZ1
bmN0aW9uS2V5d29yZFN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgIG5leHQoKTsKKyAgICBQYXJz
ZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CisgICAgZmFpbElmRmFsc2UoKHBhcnNl
RnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBGdW5jdGlvbk1vZGUsIHRy
dWUsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7CisgICAgZmFpbElmRmFs
c2UoaW5mby5uYW1lLCAiRnVuY3Rpb24gc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBuYW1lIik7Cisg
ICAgZmFpbElmRmFsc2VJZlN0cmljdChkZWNsYXJlVmFyaWFibGUoaW5mby5uYW1lKSwgIkNhbm5v
dCBkZWNsYXJlIGEgZnVuY3Rpb24gbmFtZWQgJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpbiBz
dHJpY3QgbW9kZSIpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50
KGxvY2F0aW9uLCBpbmZvLCBmdW5jdGlvbktleXdvcmRTdGFydCk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0
ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NEZWNsYXJhdGlvbihUcmVlQnVpbGRl
ciYgY29udGV4dCkKK3sKKyAgICBBU1NFUlQobWF0Y2goQ0xBU1NUT0tFTikpOworICAgIEpTVG9r
ZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOworICAgIEpTVGV4dFBvc2l0aW9u
IGNsYXNzU3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICB1bnNpZ25lZCBjbGFzc1N0
YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIHVuc2lnbmVkIGNsYXNzRW5kTGluZSA9IDA7Cisg
ICAgbmV4dCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIG5hbWUgPSAwOwotICAgIFRyZWVGb3Jt
YWxQYXJhbWV0ZXJMaXN0IHBhcmFtZXRlcnMgPSAwOwotICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9k
eSA9IDA7Ci0gICAgdW5zaWduZWQgb3BlbkJyYWNlT2Zmc2V0ID0gMDsKLSAgICB1bnNpZ25lZCBj
bG9zZUJyYWNlT2Zmc2V0ID0gMDsKLSAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7Ci0gICAgdW5z
aWduZWQgYm9keVN0YXJ0Q29sdW1uID0gMDsKLSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlv
bkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwgdHJ1ZSwgbmFt
ZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBi
b2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0
aW9uIik7Ci0gICAgZmFpbElmRmFsc2UobmFtZSwgIkZ1bmN0aW9uIHN0YXRlbWVudHMgbXVzdCBo
YXZlIGEgbmFtZSIpOwotICAgIGZhaWxJZkZhbHNlSWZTdHJpY3QoZGVjbGFyZVZhcmlhYmxlKG5h
bWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlvbiBuYW1lZCAnIiwgbmFtZS0+aW1wbCgpLCAi
JyBpbiBzdHJpY3QgbW9kZSIpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3Rh
dGVtZW50KGxvY2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VPZmZzZXQs
IGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24u
bGluZSwgYm9keVN0YXJ0Q29sdW1uLCBmdW5jdGlvbktleXdvcmRTdGFydCk7CisgICAgVHJlZUV4
cHJlc3Npb24gcGFyZW50Q2xhc3MgPSAwOworICAgIFRyZWVFeHByZXNzaW9uIGNvbnN0cnVjdG9y
ID0gMDsKKyAgICBUcmVlUHJvcGVydHlMaXN0IGluc3RhbmNlTWV0aG9kcyA9IDA7CisgICAgVHJl
ZVByb3BlcnR5TGlzdCBzdGF0aWNNZXRob2RzID0gMDsKKy8vICAgIFRyZWVGb3JtYWxQYXJhbWV0
ZXJMaXN0IGNvbnN0cnVjdG9yUGFyYW1ldGVycyA9IDA7CisgICAgZmFpbElmRmFsc2UoKHBhcnNl
Q2xhc3NJbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBuYW1lLCBwYXJlbnRDbGFzcywg
Y29uc3RydWN0b3IsIGluc3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9kcykpLCAiQ2Fubm90IHBh
cnNlIHRoaXMgY2xhc3MiKTsKKyAgICBmYWlsSWZGYWxzZShuYW1lLCAiQ2xhc3Mgc3RhdGVtZW50
cyBtdXN0IGhhdmUgYSBuYW1lIik7CisgICAgZmFpbElmRmFsc2UoZGVjbGFyZVZhcmlhYmxlKG5h
bWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBjbGFzcyBuYW1lZCAnIiwgbmFtZS0+aW1wbCgpLCAiJyIp
OworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjcmVhdGUgYSBNaXJhbmRhIGZ1bmN0aW9uIGhl
cmUuCisgICAgZmFpbElmRmFsc2UoY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSBhIGNsYXNz
IHdpdGhvdXQgY29uc3RydWN0b3IiKTsKKworICAgIEpTVGV4dFBvc2l0aW9uIGNsYXNzRW5kID0g
bGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKworICAgIFRyZWVFeHByZXNzaW9uIGNsYXNzRGVjbHJh
dGlvbiA9IGNvbnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwgKm5hbWUsIGNvbnN0
cnVjdG9yLCBjbGFzc1N0YXJ0LCBjbGFzc1N0YXJ0ICsgMSwgY2xhc3NFbmQpOworICAgIHJldHVy
biBjb250ZXh0LmNyZWF0ZUNsYXNzRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgKm5hbWUsIGNsYXNz
RGVjbHJhdGlvbiwgcGFyZW50Q2xhc3MsIGluc3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9kcywg
Y2xhc3NTdGFydExpbmUsIGNsYXNzRW5kTGluZSk7CisKKy8vICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGxvY2F0aW9uLCBuYW1lLCBjb25zdHJ1Y3RvciwgY29uc3Ry
dWN0b3JQYXJhbWV0ZXJzLCAwLCAwLCAwLCAwLCAwLCAwKTsKKy8vICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZUVtcHR5U3RhdGVtZW50KGxvY2F0aW9uKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1l
IExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VDbGFzc0luZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVx
dWlyZW1lbnRzIHJlcXVpcmVtZW50cywgY29uc3QgSWRlbnRpZmllciomIG5hbWUsCisgICAgVHJl
ZUV4cHJlc3Npb24mIHBhcmVudENsYXNzLCBUcmVlRXhwcmVzc2lvbiYgY29uc3RydWN0b3IsIFRy
ZWVQcm9wZXJ0eUxpc3QmIGluc3RhbmNlTWV0aG9kcywgVHJlZVByb3BlcnR5TGlzdCYgc3RhdGlj
TWV0aG9kcykKK3sKKyAgICBBdXRvUG9wU2NvcGVSZWYgY2xhc3NTY29wZSh0aGlzLCBwdXNoU2Nv
cGUoKSk7CisgICAgY2xhc3NTY29wZS0+c2V0U3RyaWN0TW9kZSgpOworCisgICAgaWYgKG1hdGNo
KElERU5UKSkgeworICAgICAgICBuYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAgICAg
IG5leHQoKTsKKyAgICAgICAgZmFpbElmRmFsc2UoY2xhc3NTY29wZS0+ZGVjbGFyZVZhcmlhYmxl
KG5hbWUpLCAiJyIsIG5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgY2xhc3MgbmFtZSIp
OworICAgIH0gZWxzZSBpZiAocmVxdWlyZW1lbnRzID09IEZ1bmN0aW9uTmVlZHNOYW1lKSB7Cisv
KiAgICAgICAgaWYgKG1hdGNoKE9QRU5CUkFDS0VUKSB8fCBtYXRjaChFWFRFTkRTKSkKKyAgICAg
ICAgICAgIHNlbWFudGljRmFpbCgiY2xhc3Mgc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBuYW1lIik7
Ki8KKyAgICAgICAgc2VtYW50aWNGYWlsdXJlRHVlVG9LZXl3b3JkKCJjbGFzcyBuYW1lIik7Cisg
ICAgICAgIGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKGNvbnN1bWUoRVhURU5EUykpIHsKKyAgICAgICAgcGFyZW50Q2xh
c3MgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxz
ZShwYXJlbnRDbGFzcywgIkNhbm5vdCBwYXJzZSB0aGUgcGFyZW50IGNsYXNzIG5hbWUiKTsKKyAg
ICB9CisKKyAgICBjb25zdW1lT3JGYWlsKE9QRU5CUkFDRSwgIkV4cGVjdGVkIGFuIG9wZW5pbmcg
J3snIGF0IHRoZSBzdGFydCBvZiBhIGNsYXNzIGJvZHkiKTsKKworICAgIFRyZWVQcm9wZXJ0eUxp
c3QgaW5zdGFuY2VNZXRob2RzVGFpbCA9IDA7CisgICAgVHJlZVByb3BlcnR5TGlzdCBzdGF0aWNN
ZXRob2RzVGFpbCA9IDA7CisgICAgd2hpbGUgKCFtYXRjaChDTE9TRUJSQUNFKSkgeworICAgICAg
ICBib29sIGlzU3RhdGljTWV0aG9kID0gbWF0Y2goU1RBVElDVE9LRU4pOworICAgICAgICBpZiAo
aXNTdGF0aWNNZXRob2QpCisgICAgICAgICAgICBuZXh0KCk7CisKKyAgICAgICAgaWYgKCFtYXRj
aChJREVOVCkpIHsKKyAgICAgICAgICAgIGZhaWxXaXRoTWVzc2FnZSgiRXhwZWN0ZWQgYW4gaW5k
ZW50aWZpZXIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgSlNU
b2tlbkxvY2F0aW9uIG1ldGhvZExvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CisgICAgICAgIHVu
c2lnbmVkIG1ldGhvZFN0YXJ0ID0gdG9rZW5TdGFydCgpOworICAgICAgICBQYXJzZXJGdW5jdGlv
bkluZm88VHJlZUJ1aWxkZXI+IGluZm87CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0
aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCBmYWxzZSwg
aW5mbykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CisgICAgICAgIGZhaWxJZkZhbHNl
KGluZm8ubmFtZSwgIm1ldGhvZCBtdXN0IGhhdmUgYSBuYW1lIik7CisgICAgICAgIGZhaWxJZkZh
bHNlKGRlY2xhcmVWYXJpYWJsZShpbmZvLm5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBtZXRob2Qg
bmFtZWQgJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyIpOworCisgICAgICAgIGJvb2wgaXNDb25z
dHJ1Y3RvciA9ICFpc1N0YXRpY01ldGhvZCAmJiAqaW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5
TmFtZXMtPmNvbnN0cnVjdG9yOworICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcikKKyAgICAgICAg
ICAgIGluZm8ubmFtZSA9IG5hbWU7IC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/PworCisgICAg
ICAgIFRyZWVFeHByZXNzaW9uIG1ldGhvZCA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKG1l
dGhvZExvY2F0aW9uLCBpbmZvLCBtZXRob2RTdGFydCk7CisgICAgICAgIGlmIChpc0NvbnN0cnVj
dG9yKSB7CisgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoY29uc3RydWN0b3IsICJDYW5u
b3QgZGVjbHJhdGUgbXVsdGlwbGUgY29uc3RydWN0b3JzIGluIGEgc2luZ2xlIGNsYXNzIik7Cisg
ICAgICAgICAgICBjb25zdHJ1Y3RvciA9IG1ldGhvZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgIkNhbm5vdCBkZWNscmF0ZSBhIHN0YXRpYyBtZXRob2QgbmFtZWQgJyIs
IGluZm8ubmFtZS0+aW1wbCgpLCAiJyIpOworICAgICAgICAgICAgVHJlZVByb3BlcnR5IHByb3Bl
cnR5ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShpbmZvLm5hbWUsIG1ldGhvZCwgUHJvcGVydHlO
b2RlOjpDb25zdGFudCwgLyogY29tcGxldGUgKi8gZmFsc2UpOworCisgICAgICAgICAgICBUcmVl
UHJvcGVydHlMaXN0JiBoZWFkID0gaXNTdGF0aWNNZXRob2QgPyBzdGF0aWNNZXRob2RzIDogaW5z
dGFuY2VNZXRob2RzOworICAgICAgICAgICAgVHJlZVByb3BlcnR5TGlzdCYgdGFpbCA9IGlzU3Rh
dGljTWV0aG9kID8gc3RhdGljTWV0aG9kc1RhaWwgOiBpbnN0YW5jZU1ldGhvZHNUYWlsOworCisg
ICAgICAgICAgICBpZiAodGFpbCkKKyAgICAgICAgICAgICAgICB0YWlsID0gY29udGV4dC5jcmVh
dGVQcm9wZXJ0eUxpc3QobWV0aG9kTG9jYXRpb24sIHByb3BlcnR5LCB0YWlsKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGhlYWQgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5
TGlzdChtZXRob2RMb2NhdGlvbiwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgIHRhaWwgPSBo
ZWFkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY29uc3VtZU9yRmFp
bChDTE9TRUJSQUNFLCAiRXhwZWN0ZWQgYSBjbG9zaW5nICd9JyBhZnRlciBhIGNsYXNzIGJvZHki
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBzdHJ1Y3QgTGFiZWxJbmZvIHsKICAgICBMYWJl
bEluZm8oY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICA6IG1faWRlbnQoaWRlbnQpCkBAIC0x
Nzk5LDEzICsxOTA2LDYgQEAKICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVByb3Bl
cnR5KGlkZW50LCBub2RlLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBjb21wbGV0ZSk7CiAgICAg
ICAgIH0KICAgICAgICAgZmFpbElmRmFsc2Uod2FzSWRlbnQsICJFeHBlY3RlZCBhbiBpZGVudGlm
aWVyIGFzIHByb3BlcnR5IG5hbWUiKTsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogYWNjZXNz
b3JOYW1lID0gMDsKLSAgICAgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyA9
IDA7Ci0gICAgICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9IDA7Ci0gICAgICAgIHVuc2lnbmVk
IG9wZW5CcmFjZU9mZnNldCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VPZmZzZXQg
PSAwOwotICAgICAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGJv
ZHlTdGFydENvbHVtbiA9IDA7CiAgICAgICAgIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlOwogICAg
ICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmdldCkKICAgICAgICAgICAg
IHR5cGUgPSBQcm9wZXJ0eU5vZGU6OkdldHRlcjsKQEAgLTE4MjMsMTYgKzE5MjMsMTcgQEAKICAg
ICAgICAgICAgIGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICBKU1Rva2VuTG9j
YXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAgICAgbmV4dCgpOworICAgICAg
ICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CiAgICAgICAgIGlmICh0eXBl
ID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyKSB7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShtYXRj
aChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3IgZ2V0dGVyIGRlZmlu
aXRpb24iKTsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250
ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBHZXR0ZXJNb2RlLCBmYWxzZSwgYWNjZXNzb3JO
YW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQs
IGJvZHlTdGFydExpbmUsIGJvZHlTdGFydENvbHVtbikpLCAiQ2Fubm90IHBhcnNlIGdldHRlciBk
ZWZpbml0aW9uIik7CisgICAgICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8o
Y29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgR2V0dGVyTW9kZSwgZmFsc2UsIGluZm8p
KSwgIkNhbm5vdCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2goT1BFTlBBUkVOKSwgIkV4cGVjdGVkIGEgcGFy
YW1ldGVyIGxpc3QgZm9yIHNldHRlciBkZWZpbml0aW9uIik7Ci0gICAgICAgICAgICBmYWlsSWZG
YWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywg
U2V0dGVyTW9kZSwgZmFsc2UsIGFjY2Vzc29yTmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJy
YWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1
bW4pKSwgIkNhbm5vdCBwYXJzZSBzZXR0ZXIgZGVmaW5pdGlvbiIpOworICAgICAgICAgICAgZmFp
bElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVu
dHMsIFNldHRlck1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmlu
aXRpb24iKTsKICAgICAgICAgfQogICAgICAgICBpZiAoc3RyaW5nUHJvcGVydHlOYW1lKQotICAg
ICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShsb2Nh
dGlvbiwgdHlwZSwgY29tcGxldGUsIHN0cmluZ1Byb3BlcnR5TmFtZSwgcGFyYW1ldGVycywgYm9k
eSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xh
c3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIGJvZHlTdGFydENvbHVtbiwgZ2V0dGVyT3JTZXR0ZXJT
dGFydE9mZnNldCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVy
UHJvcGVydHkoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBsb2NhdGlvbiwg
dHlwZSwgY29tcGxldGUsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9w
ZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0VG9r
ZW5FbmRQb3NpdGlvbi5saW5lLCBib2R5U3RhcnRDb2x1bW4sIGdldHRlck9yU2V0dGVyU3RhcnRP
ZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0ZXJQ
cm9wZXJ0eShsb2NhdGlvbiwgdHlwZSwgY29tcGxldGUsIHN0cmluZ1Byb3BlcnR5TmFtZSwgaW5m
bywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX3BhcnNl
ckFyZW5hLCBsb2NhdGlvbiwgdHlwZSwgY29tcGxldGUsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIGlu
Zm8sIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOwogICAgIH0KICAgICBjYXNlIE5VTUJFUjog
ewogICAgICAgICBkb3VibGUgcHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2RhdGEuZG91YmxlVmFs
dWU7CkBAIC0yMTc0LDE4ICsyMjc1LDEzIEBACiAgICAgfQogICAgIAogICAgIGlmIChtYXRjaChG
VU5DVElPTikpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9ICZtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKLSAgICAgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxp
c3QgcGFyYW1ldGVycyA9IDA7Ci0gICAgICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9IDA7Ci0g
ICAgICAgIHVuc2lnbmVkIG9wZW5CcmFjZU9mZnNldCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNs
b3NlQnJhY2VPZmZzZXQgPSAwOwotICAgICAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7Ci0gICAg
ICAgIHVuc2lnbmVkIGJvZHlTdGFydENvbHVtbiA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0
aW9uS2V5d29yZFN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgICAgICBsb2NhdGlvbiA9IHRva2Vu
TG9jYXRpb24oKTsKICAgICAgICAgbmV4dCgpOwotICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VG
dW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25Nb2Rl
LCBmYWxzZSwgbmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJy
YWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4pKSwgIkNhbm5vdCBwYXJz
ZSBmdW5jdGlvbiBleHByZXNzaW9uIik7Ci0gICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUZ1
bmN0aW9uRXhwcihsb2NhdGlvbiwgbmFtZSwgYm9keSwgcGFyYW1ldGVycywgb3BlbkJyYWNlT2Zm
c2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xhc3RUb2tlbkVuZFBvc2l0
aW9uLmxpbmUsIGJvZHlTdGFydENvbHVtbiwgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOworICAgICAg
ICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CisgICAgICAgIGluZm8ubmFt
ZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICAgICAgZmFpbElm
RmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMs
IEZ1bmN0aW9uTW9kZSwgZmFsc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBleHBy
ZXNzaW9uIik7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2Nh
dGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAgIH0gZWxzZQogICAgICAgICBi
YXNlID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKICNp
bmNsdWRlICJQYXJzZXJFcnJvci5oIgorI2luY2x1ZGUgIlBhcnNlckZ1bmN0aW9uSW5mby5oIgog
I2luY2x1ZGUgIlBhcnNlclRva2Vucy5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCiAj
aW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgpAQCAtNzcsNyArNzgsNyBAQAogCiBlbnVt
IFNvdXJjZUVsZW1lbnRzTW9kZSB7IENoZWNrRm9yU3RyaWN0TW9kZSwgRG9udENoZWNrRm9yU3Ry
aWN0TW9kZSB9OwogZW51bSBGdW5jdGlvblJlcXVpcmVtZW50cyB7IEZ1bmN0aW9uTm9SZXF1aXJl
bWVudHMsIEZ1bmN0aW9uTmVlZHNOYW1lIH07Ci1lbnVtIEZ1bmN0aW9uUGFyc2VNb2RlIHsgRnVu
Y3Rpb25Nb2RlLCBHZXR0ZXJNb2RlLCBTZXR0ZXJNb2RlIH07CitlbnVtIEZ1bmN0aW9uUGFyc2VN
b2RlIHsgRnVuY3Rpb25Nb2RlLCBHZXR0ZXJNb2RlLCBTZXR0ZXJNb2RlLCBNZXRob2RNb2RlIH07
CiBlbnVtIERlY29uc3RydWN0aW9uS2luZCB7CiAgICAgRGVjb25zdHJ1Y3RUb1ZhcmlhYmxlcywK
ICAgICBEZWNvbnN0cnVjdFRvUGFyYW1ldGVycywKQEAgLTY5Miw2ICs2OTMsNyBAQAogICAgIAog
ICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNl
U291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImLCBTb3VyY2VFbGVtZW50c01vZGUpOwogICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZVN0YXRlbWVudChU
cmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3RpdmUsIHVuc2lnbmVkKiBkaXJl
Y3RpdmVMaXRlcmFsTGVuZ3RoID0gMCk7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZW50IHBhcnNlQ2xhc3NEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOwogICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUZ1bmN0aW9u
RGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VWYXJEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOwogICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUNvbnN0RGVj
bGFyYXRpb24oVHJlZUJ1aWxkZXImKTsKQEAgLTczMyw3ICs3MzUsMTAgQEAKICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0
ZXJuIGNyZWF0ZUJpbmRpbmdQYXR0ZXJuKFRyZWVCdWlsZGVyJiwgRGVjb25zdHJ1Y3Rpb25LaW5k
LCBjb25zdCBJZGVudGlmaWVyJiwgaW50IGRlcHRoLCBKU1Rva2VuKTsKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJu
IHBhcnNlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuKFRyZWVCdWlsZGVyJiwgRGVjb25zdHJ1Y3Rpb25L
aW5kLCBpbnQgZGVwdGggPSAwKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5F
VkVSX0lOTElORSBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIHRyeVBhcnNlRGVjb25zdHJ1Y3Rp
b25QYXR0ZXJuRXhwcmVzc2lvbihUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxk
ZXImLCBGdW5jdGlvblJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUsIGJvb2wgbmFtZUlz
SW5Db250YWluaW5nU2NvcGUsIGNvbnN0IElkZW50aWZpZXIqJiwgVHJlZUZvcm1hbFBhcmFtZXRl
ckxpc3QmLCBUcmVlRnVuY3Rpb25Cb2R5JiwgdW5zaWduZWQmIG9wZW5CcmFjZU9mZnNldCwgdW5z
aWduZWQmIGNsb3NlQnJhY2VPZmZzZXQsIGludCYgYm9keVN0YXJ0TGluZSwgdW5zaWduZWQmIGJv
ZHlTdGFydENvbHVtbik7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVS
X0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgRnVuY3Rpb25SZXF1
aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3Bl
LCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CisgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUNsYXNzSW5mbyhUcmVlQnVpbGRl
ciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBjb25zdCBJZGVudGlmaWVyKiYsCisgICAgICAgIFRy
ZWVFeHByZXNzaW9uJiBwYXJlbnRDbGFzcywgVHJlZUV4cHJlc3Npb24mIGNvbnN0cnVjdG9yLCBU
cmVlUHJvcGVydHlMaXN0JiBpbnN0YW5jZU1ldGhvZHMsIFRyZWVQcm9wZXJ0eUxpc3QmIHN0YXRp
Y01ldGhvZHMpOwogICAgIEFMV0FZU19JTkxJTkUgaW50IGlzQmluYXJ5T3BlcmF0b3IoSlNUb2tl
blR5cGUpOwogICAgIGJvb2wgYWxsb3dBdXRvbWF0aWNTZW1pY29sb24oKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyRnVuY3Rpb25JbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJGdW5jdGlvbkluZm8u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyRnVu
Y3Rpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgUGFyc2VyRnVuY3Rpb25JbmZvX2gKKyNkZWZpbmUgUGFyc2VyRnVuY3Rpb25JbmZv
X2gKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4KK3N0
cnVjdCBQYXJzZXJGdW5jdGlvbkluZm8geworICAgIGNvbnN0IElkZW50aWZpZXIqIG5hbWUgPSAw
OworICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcmFtZXRl
cnMgPSAwOworICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpGdW5jdGlvbkJvZHkgYm9keSA9IDA7
CisgICAgdW5zaWduZWQgb3BlbkJyYWNlT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBjbG9zZUJy
YWNlT2Zmc2V0ID0gMDsKKyAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7CisgICAgaW50IGJvZHlF
bmRMaW5lID0gMDsKKyAgICB1bnNpZ25lZCBib2R5U3RhcnRDb2x1bW4gPSAwOworfTsKKworfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tl
bnMuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJUb2tlbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsMTAgQEAKICAgICBGSU5B
TExZLAogICAgIERFQlVHR0VSLAogICAgIEVMU0UsCisgICAgQ0xBU1NUT0tFTiwKKyAgICBFWFRF
TkRTLAorICAgIFNUQVRJQ1RPS0VOLAorICAgIFNVUEVSLAogICAgIE9QRU5CUkFDRSA9IDAsCiAg
ICAgQ0xPU0VCUkFDRSwKICAgICBPUEVOUEFSRU4sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDExICsyNiwxMiBAQAogI2lmbmRlZiBTeW50YXhDaGVja2VyX2gKICNkZWZpbmUgU3ludGF4
Q2hlY2tlcl9oCiAKKyNpbmNsdWRlICJQYXJzZXJGdW5jdGlvbkluZm8uaCIKICNpbmNsdWRlICJM
ZXhlci5oIgogI2luY2x1ZGUgIllhcnJTeW50YXhDaGVja2VyLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewotICAgIAorCiBjbGFzcyBTeW50YXhDaGVja2VyIHsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgQmlu
YXJ5RXhwckNvbnRleHQgewpAQCAtMTU5LDcgKzE2MCw3IEBACiAgICAgRXhwcmVzc2lvblR5cGUg
Y3JlYXRlQ29uZGl0aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25U
eXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFs
RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiBBc3NpZ25tZW50RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZUVtcHR5VmFyRXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVu
dGlmaWVyJikgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBj
cmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmll
ciosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBGdW5j
dGlvbkV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+
JiwgaW50KSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KICAgICBpbnQgY3JlYXRlRnVuY3Rpb25C
b2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBib29sKSB7IHJldHVybiBGdW5jdGlvbkJvZHlSZXN1bHQ7IH0KICAgICB2b2lkIHNldEZ1
bmN0aW9uTmFtZVN0YXJ0KGludCwgaW50KSB7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKCkg
eyByZXR1cm4gQXJndW1lbnRzUmVzdWx0OyB9CkBAIC0xOTMsNyArMTk0LDggQEAKICAgICBpbnQg
Y3JlYXRlQ2xhdXNlKGludCwgaW50KSB7IHJldHVybiBDbGF1c2VSZXN1bHQ7IH0KICAgICBpbnQg
Y3JlYXRlQ2xhdXNlTGlzdChpbnQpIHsgcmV0dXJuIENsYXVzZUxpc3RSZXN1bHQ7IH0KICAgICBp
bnQgY3JlYXRlQ2xhdXNlTGlzdChpbnQsIGludCkgeyByZXR1cm4gQ2xhdXNlTGlzdFJlc3VsdDsg
fQotICAgIGludCBjcmVhdGVGdW5jRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQorICAgIGludCBjcmVhdGVGdW5jRGVjbFN0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88
U3ludGF4Q2hlY2tlcj4mLCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQorICAgIGlu
dCBjcmVhdGVDbGFzc0RlY2xTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgUHJvcGVydHlMaXN0
LCBQcm9wZXJ0eUxpc3QsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAg
ICBpbnQgY3JlYXRlQmxvY2tTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBp
bnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUV4cHJT
dGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4g
U3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUlmU3RhdGVtZW50KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0
OyB9CkBAIC0yMTgsMTQgKzIyMCwxNCBAQAogICAgIGludCBjcmVhdGVEZWJ1Z2dlcihjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAg
ICAgaW50IGNyZWF0ZUNvbnN0U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBhcHBlbmRDb25z
dERlY2woY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50
KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KLSAgICBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJP
clNldHRlclByb3BlcnR5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9kZTo6VHlw
ZSB0eXBlLCBib29sIHN0cmljdCwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpCisgICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JT
ZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZSwgYm9vbCBzdHJpY3QsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGNvbnN0IFBhcnNlckZ1
bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIHVuc2lnbmVkKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG5hbWUpOwogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAgICAgICAgIHJldHVybiBQcm9w
ZXJ0eSh0eXBlKTsKICAgICAgICAgcmV0dXJuIFByb3BlcnR5KG5hbWUsIHR5cGUpOwogICAgIH0K
LSAgICBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2bSwgUGFyc2Vy
QXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6
OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1lLCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIGludCkKKyAgICBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclBy
b3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1l
LCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCkKICAg
ICB7CiAgICAgICAgIGlmICghc3RyaWN0KQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5
cGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244853</attachid>
            <date>2015-01-17 21:16:05 -0800</date>
            <delta_ts>2015-01-19 21:09:30 -0800</delta_ts>
            <desc>Added &quot;super&quot; support</desc>
            <filename>native-class-2.patch</filename>
            <type>text/plain</type>
            <size>67037</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTdkNDIzMS4uNWQ5NmM5NWM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc3OCw2ICsyNzc4LDcgQEAKIAkJOTlFNDVB
MjExOEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFbmNvZGVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTlFNDVBMjIxOEExQjI1OTAwMjZEODhGIC8qIElucHV0Q3Vyc29yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Q3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk5RTQ1QTIzMThBMUIyNTkwMDI2RDg4RiAvKiBOb25kZXRlcm1pbmlzdGljSW5w
dXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9uZGV0ZXJtaW5pc3RpY0lu
cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCNDk1NEU4MUE2NjQwREIwMDI4
MTVBNiAvKiBQYXJzZXJGdW5jdGlvbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyRnVuY3Rp
b25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlFNzI5NDA5MTkwRjAzMDYw
MDFBOTFCNSAvKiBCdW5kbGVQYXRoLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gQnVuZGxlUGF0aC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUU3
Mjk0MEExOTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnVuZGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5RUE1QzdBMDE5MEYwNUQyMDA1MDhFQkUgLyogSW5pdGlhbGl6ZUxMVk1NYWMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSW5pdGlhbGl6ZUxMVk1NYWMuY3BwOyBw
YXRoID0gbGx2bS9Jbml0aWFsaXplTExWTU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00MTQxLDYgKzQxNDIsNyBAQAogCQkJCTkzMDUyQzMyMEZCNzkyMTkwMDQ4RkRDMyAv
KiBQYXJzZXJBcmVuYS5jcHAgKi8sCiAJCQkJOTMwNTJDMzMwRkI3OTIxOTAwNDhGREMzIC8qIFBh
cnNlckFyZW5hLmggKi8sCiAJCQkJMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVy
cm9yLmggKi8sCisJCQkJOUI0OTU0RTgxQTY2NDBEQjAwMjgxNUE2IC8qIFBhcnNlckZ1bmN0aW9u
SW5mby5oICovLAogCQkJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5o
ICovLAogCQkJCTY1MzAzRDYzMTQ0N0I5RTEwMEQzRjkwNCAvKiBQYXJzZXJUb2tlbnMuaCAqLywK
IAkJCQk4NjlFQkNCNjBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmlu
ZGV4IDkzZmIxOTEuLmNjMmU2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTE0Nyw2ICsxNDcsNjIgQEAgUmVnaXN0
ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gU3VwZXJOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCogU3VwZXJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIGlmIChkc3Qg
PT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBS
ZWdpc3RlcklEIGNhbGxlZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsK
KworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBob21lT2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgJmNhbGxlZSwgZ2VuZXJhdG9yLnByb3BlcnR5
TmFtZXMoKS5ob21lT2JqZWN0UHJpdmF0ZU5hbWUpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBw
cm90b1BhcmVudCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIGhvbWVPYmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29y
ZVByb3RvKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIHByb3RvUGFyZW50LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlO
YW1lcygpLmNvbnN0cnVjdG9yKTsKK30KKworc3RhdGljIFJlZ2lzdGVySUQqIGVtaXRTdXBlckJh
c2VGb3JDYWxsZWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKK3sKKyAgICBSZWdpc3Rl
cklEIGNhbGxlZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBob21lT2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgJmNhbGxlZSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMo
KS5ob21lT2JqZWN0UHJpdmF0ZU5hbWUpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5
SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBob21lT2JqZWN0LmdldCgpLCBnZW5lcmF0b3Iu
cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90byk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBTdXBlckJyYWNrZXRBY2Nlc3Nv
ck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKG1fc3Vic2NyaXB0KTsKKyAgICBpZiAoZHN0
ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UmVnaXN0ZXJJRCBjYWxsZWU7CisgICAgY2FsbGVlLnNldEluZGV4KEpTU3RhY2s6OkNhbGxlZSk7
CisKKyAgICAKKworICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChkc3QsICZjYWxsZWUgLyogZ2VuZXJhdG9yLnNjb3BlUmVnaXN0ZXIoKSAqLyk7Cit9CisKKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdXBlckRvdEFjY2Vzc29yTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIFN1cGVyRG90
QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQoreworICAgIFVOVVNFRF9QQVJBTShtX2lkZW50KTsKKyAgICBpZiAo
ZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgUmVnaXN0ZXJJRCBjYWxsZWU7CisgICAgY2FsbGVlLnNldEluZGV4KEpTU3RhY2s6OkNhbGxl
ZSk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaG9tZU9iamVjdCA9IGdlbmVyYXRvci5lbWl0
R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksICZjYWxsZWUsIGdlbmVyYXRvci5wcm9w
ZXJ0eU5hbWVzKCkuaG9tZU9iamVjdFByaXZhdGVOYW1lKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZVZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgaG9tZU9iamVjdC5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNj
b3JlUHJvdG8pOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlVmFsdWUuZ2V0KCksIG1faWRlbnQpOworfQorCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIFJlc29sdmVOb2RlOjppc1B1cmUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvcikgY29uc3QKQEAgLTI3MywzMiArMzI5LDI1IEBAIEFyZ3VtZW50
TGlzdE5vZGUqIEFycmF5Tm9kZTo6dG9Bcmd1bWVudExpc3QoUGFyc2VyQXJlbmEmIHBhcnNlckFy
ZW5hLCBpbnQgbGluZU51CiAKIFJlZ2lzdGVySUQqIE9iamVjdExpdGVyYWxOb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewot
ICAgICBpZiAoIW1fbGlzdCkgewotICAgICAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3Jl
ZFJlc3VsdCgpKQotICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0TmV3T2JqZWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCkpOwotICAg
ICB9Ci0gICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2xpc3QpOworICAgIGlm
ICghbV9saXN0KSB7CisgICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQo
KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRO
ZXdPYmplY3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSk7CisgICAgfQorICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBuZXdPYmogPSBnZW5lcmF0b3IuZW1pdE5ld09iamVjdChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2Rl
KG5ld09iai5nZXQoKSwgbV9saXN0KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFByb3BlcnR5TGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
UmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gbmV3T2JqID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIAotICAgIGdl
bmVyYXRvci5lbWl0TmV3T2JqZWN0KG5ld09iai5nZXQoKSk7Ci0gICAgCisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG5ld09iaiA9IGRzdDsKKwogICAgIC8vIEZhc3QgY2FzZTogdGhpcyBsb29wIGp1
c3QgaGFuZGxlcyByZWd1bGFyIHZhbHVlIHByb3BlcnRpZXMuCiAgICAgUHJvcGVydHlMaXN0Tm9k
ZSogcCA9IHRoaXM7Ci0gICAgZm9yICg7IHAgJiYgcC0+bV9ub2RlLT5tX3R5cGUgPT0gUHJvcGVy
dHlOb2RlOjpDb25zdGFudDsgcCA9IHAtPm1fbmV4dCkgewotICAgICAgICBpZiAocC0+bV9ub2Rl
LT5tX25hbWUpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChuZXdP
YmouZ2V0KCksICpwLT5tX25vZGUtPm5hbWUoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKHAtPm1fbm9k
ZS0+bV9hc3NpZ24pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUocC0+
bV9ub2RlLT5tX2V4cHJlc3Npb24pOwotICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5
VmFsKG5ld09iai5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmF0b3IuZW1pdE5vZGUo
cC0+bV9ub2RlLT5tX2Fzc2lnbikpOwotICAgIH0KKyAgICBmb3IgKDsgcCAmJiBwLT5tX25vZGUt
Pm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50OyBwID0gcC0+bV9uZXh0KQorICAgICAg
ICBlbWl0Q29uc3RhbnRQcm9wZXJ0eShnZW5lcmF0b3IsIG5ld09iai5nZXQoKSwgcC0+bV9ub2Rl
KTsKIAogICAgIC8vIFdlcmUgdGhlcmUgYW55IGdldC9zZXQgcHJvcGVydGllcz8KICAgICBpZiAo
cCkgewpAQCAtMzI0LDEyICszNzMsNyBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogCiAgICAg
ICAgICAgICAvLyBIYW5kbGUgcmVndWxhciB2YWx1ZXMuCiAgICAgICAgICAgICBpZiAobm9kZS0+
bV90eXBlID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+bmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0
UHV0QnlJZChuZXdPYmouZ2V0KCksICpub2RlLT5uYW1lKCksIGdlbmVyYXRvci5lbWl0Tm9kZShu
b2RlLT5tX2Fzc2lnbikpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFt
ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShwLT5tX25vZGUtPm1fZXhwcmVzc2lvbik7Ci0gICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeVZhbChuZXdPYmouZ2V0KCksIHByb3Bl
cnR5TmFtZS5nZXQoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKHAtPm1fbm9kZS0+bV9hc3NpZ24pKTsK
KyAgICAgICAgICAgICAgICBlbWl0Q29uc3RhbnRQcm9wZXJ0eShnZW5lcmF0b3IsIG5ld09iai5n
ZXQoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTM3MCwxNyArNDE0LDQ4IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvLyBGSVhN
RTogU2V0IHN1cGVyIG9uIGdldHRlciAmIHNldHRlci4KKwogICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQdXRHZXR0ZXJTZXR0ZXIobmV3T2JqLmdldCgpLCAqbm9kZS0+bmFtZSgpLCBnZXR0ZXJS
ZWcuZ2V0KCksIHNldHRlclJlZy5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBuZXdPYmouZ2V0KCkp
OworICAgIHJldHVybiBkc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRQdXRIb21lT2JqZWN0KEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGZ1bmN0aW9uLCBSZWdpc3Rl
cklEKiBob21lT2JqZWN0KQoreworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChmdW5jdGlvbiwg
Z2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ob21lT2JqZWN0UHJpdmF0ZU5hbWUsIGhvbWVPYmpl
Y3QpOworfQorCit2b2lkIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRDb25zdGFudFByb3BlcnR5KEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIG5ld09iaiwgUHJvcGVydHlO
b2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5uYW1lKCkpIHsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUtPm1fYXNzaWduKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKG5ld09iaiwgKm5vZGUtPm5hbWUoKSwg
dmFsdWUuZ2V0KCkpOworICAgICAgICAvLyBGSVhNRTogRVM2IHNwZWMgc2F5cyB3ZSBzaG91bGQg
b25seSBzdG9yZSBob21lT2JqZWN0IHdoZW4gdGhlIGZ1bmN0aW9uIGhhcyAic3VwZXIiCisgICAg
ICAgIC8vIGJ1dCB3ZSBjYW4ndCBlYXNpbHkgZGV0ZXJtaW5lIGl0IGhlcmUgc2luY2Ugd2UgbGF6
aWx5IGV2YWx1YXRlIHRoZSBmdW5jdGlvbiBib2R5LgorICAgICAgICBpZiAobV9pc01ldGhvZExp
c3QpCisgICAgICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIHZhbHVlLmdldCgp
LCBuZXdPYmopOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCghbV9pc01ldGhv
ZExpc3QpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobm9kZS0+bV9leHByZXNzaW9uKTsKKyAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1
dEJ5VmFsKG5ld09iaiwgcHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmF0b3IuZW1pdE5vZGUobm9k
ZS0+bV9hc3NpZ24pKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJy
YWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVn
aXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBpZiAobV9iYXNlLT5pc1N1
cGVyTm9kZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgZ2VuZXJhdGUgdGhlIHBy
b2ZpbGVyIGluZm8/CisgICAgICAgIGlmIChtX3N1YnNjcmlwdC0+aXNTdHJpbmcoKSkgeworICAg
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWQgPSBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4o
bV9zdWJzY3JpcHQpLT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
R2V0QnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBlbWl0U3VwZXJCYXNlRm9y
Q2FsbGVlKGdlbmVyYXRvciksIGlkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBlbWl0U3Vw
ZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvciksIGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlw
dCkpOworICAgIH0KICAgICBpZiAobV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkgCiAgICAgICAgICYm
IGdlbmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRzKHN0YXRpY19jYXN0PFJlc29sdmVOb2Rl
Kj4obV9iYXNlKS0+aWRlbnRpZmllcigpKQogICAgICAgICAmJiAhZ2VuZXJhdG9yLnN5bWJvbFRh
YmxlKCkuc2xvd0FyZ3VtZW50cygpKSB7CkBAIC00MjUsNyArNTAwLDcgQEAgUmVnaXN0ZXJJRCog
RG90QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXIKICAgICB9CiAKIG5vbkFyZ3VtZW50c1BhdGg6Ci0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gYmFzZSA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKSA/IGVtaXRTdXBlckJhc2VGb3JD
YWxsZWUoZ2VuZXJhdG9yKSA6IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICBSZWdpc3RlcklEKiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5h
bERlc3QsIGJhc2UuZ2V0KCksIG1faWRlbnQpOwpAQCAtNTEyLDcgKzU4NywxMCBAQCBSZWdpc3Rl
cklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0g
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAgICBDYWxsQXJn
dW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgIGdlbmVyYXRvci5l
bWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKKyAg
ICBpZiAobV9leHByLT5pc1N1cGVyTm9kZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQo
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsK
KyAgICBlbHNlCisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0
b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNv
ZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKQEAgLTU2MywxMyArNjQxLDE3IEBAIFJl
Z2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9iYXNlKTsKKyAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgp
OworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gYmFzZUlzU3VwZXIgPyBlbWl0U3VwZXJC
YXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJz
Y3JpcHQpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRp
dm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1l
bnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKLSAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7CisgICAgaWYgKGJhc2VJc1N1cGVyKQor
ICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
Z2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsKKyAgICBlbHNlCisgICAgICAgIGdlbmVyYXRvci5l
bWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1
bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBl
UHJvZmlsZXIoKSkgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZh
bHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0
cik7CkBAIC01ODUsOSArNjY3LDE0IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpCiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFy
Z3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7Ci0gICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7CisgICAgYm9vbCBiYXNlSXNTdXBlciA9
IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgIGdl
bmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBnZW5lcmF0b3Iu
dGhpc1JlZ2lzdGVyKCkpOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7CisKICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQo
KSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rp
b24uZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOworICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgYmFzZUlzU3VwZXIgPyBlbWl0U3Vw
ZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCBtX2lkZW50KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0
dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxB
cmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdl
bmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2RlRG9lc05vdEhh
dmVHbG9iYWxJRCwgbnVsbHB0cik7CkBAIC05MjksNiArMTAxNiw4IEBAIFJlZ2lzdGVySUQqIERl
bGV0ZUJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fc3Vic2NyaXB0KTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9k
ZSgpKQorICAgICAgICByZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAi
Q2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5Iik7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0RGVsZXRlQnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCks
IHIxLmdldCgpKTsKIH0KIApAQCAtOTM5LDYgKzEwMjgsOCBAQCBSZWdpc3RlcklEKiBEZWxldGVE
b3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jh
c2UpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOworICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCisgICAg
ICAgIHJldHVybiBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVs
ZXRlIGEgc3VwZXIgcHJvcGVydHkiKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVC
eUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBtX2lkZW50KTsK
IH0KIApAQCAtMjc0NCw3ICsyODM1LDUyIEBAIFJlZ2lzdGVySUQqIEZ1bmNFeHByTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqCiB7CiAg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIHRoaXMpOwogfQotICAgIAorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gQ2xhc3NEZWNsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKwordm9pZCBDbGFzc0RlY2xOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBjbGFzc0hlcml0YWdlOworICAgIGlmIChtX3BhcmVudENsYXNzRXhwcmVzc2lvbikgewor
ICAgICAgICBjbGFzc0hlcml0YWdlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGUoY2xhc3NIZXJpdGFnZS5nZXQoKSwgbV9wYXJlbnRDbGFzc0V4
cHJlc3Npb24pOworICAgIH0KKworICAgIC8vIEZJWE1FOiBXaGVuIGJhc2UgY2xhc3MnIGNvbnN0
dXJjdG9yIGlzIG5ldmVyIGNhbGxlZCwgd2UgbmVlZCB0byByZXR1cm4gYW4gInVuaW5pdGlhbGl6
ZWQiIG9iamVjdC4KKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gY29uc3RydWN0b3IgPSBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX2NvbnN0cnVjdG9yRGVjbGFyYXRpb24pOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBwcm90b3R5cGUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCBjb25zdHJ1Y3Rvci5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMo
KS5wcm90b3R5cGUpOworICAgIC8vIEVTNiBkcmFmdCBkb2Vzbid0IHN0b3JlIGhvbWVPYmplY3Qg
b24gdGhlIGNvbnN0cnVjdG9yIGJ1dCB0aGlzIHdvdWxkIG1ha2Ugc3VwcG9ydGluZyAibmV3IHN1
cGVyIiBpbiBjb25zdHJ1Y3RvciBjdW1iZXJzb21lLgorICAgIGVtaXRQdXRIb21lT2JqZWN0KGdl
bmVyYXRvciwgY29uc3RydWN0b3IuZ2V0KCksIHByb3RvdHlwZS5nZXQoKSk7CisgICAgaWYgKCFj
bGFzc0hlcml0YWdlICYmICFtX3N0YXRpY01ldGhvZHMgJiYgIW1faW5zdGFuY2VNZXRob2RzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2xhc3NIZXJpdGFnZSkgeworICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcHJvdG9QYXJlbnQgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Cisg
ICAgICAgIFJlZlB0cjxMYWJlbD4gY2xhc3NIZXJpdGFnZUlzTnVsbCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOworICAgICAgICBSZWZQdHI8TGFiZWw+IHByb3RvUGFyZW50SXNTZXQgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJh
dG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIHByb3RvUGFyZW50LmdldCgpLCBjbGFzc0hlcml0
YWdlLmdldCgpKSwgY2xhc3NIZXJpdGFnZUlzTnVsbC5nZXQoKSk7CisKKyAgICAgICAgLy8gRklY
TUU6IFRocm93IFR5cGVFcnJvciBpZiBpc0NvbnN0cnVjdG9yKHBhcmVudENsYXNzKSBpcyBmYWxz
ZSBvciBpdCdzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLgorICAgICAgICBnZW5lcmF0b3IuZW1pdEdl
dEJ5SWQocHJvdG9QYXJlbnQuZ2V0KCksIGNsYXNzSGVyaXRhZ2UuZ2V0KCksIGdlbmVyYXRvci52
bSgpLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOworICAgICAgICAvLyBGSVhNRTogVGhyb3cg
VHlwZUVycm9yIGlmIFR5cGUocHJvdG9QYXJlbnQpIGlzIG5vdCBPYmplY3Qgb3IgbnVsbC4KKwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQocHJvdG90eXBlLmdldCgpLCBnZW5l
cmF0b3IucHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9QYXJlbnQuZ2V0KCkp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAocHJvdG9QYXJlbnRJc1NldC5nZXQoKSk7CisK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChjbGFzc0hlcml0YWdlSXNOdWxsLmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKHByb3RvdHlwZS5nZXQoKSwgZ2Vu
ZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIGNsYXNzSGVyaXRhZ2UuZ2V0
KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwocHJvdG9QYXJlbnRJc1NldC5nZXQo
KSk7CisgICAgfQorCisgICAgaWYgKG1fc3RhdGljTWV0aG9kcykKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKGNvbnN0cnVjdG9yLmdldCgpLCBtX3N0YXRpY01ldGhvZHMpOworCisgICAgaWYg
KG1faW5zdGFuY2VNZXRob2RzKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUocHJvdG90eXBl
LmdldCgpLCBtX2luc3RhbmNlTWV0aG9kcyk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0t
CiBSZWdpc3RlcklEKiBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCA5NGIzMDYzLi4yYTJiYjUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaApAQCAtMTY2LDYg
KzE2NiwzNCBAQCBwdWJsaWM6CiAgICAgICAgIHVzZXNUaGlzKCk7CiAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIFRoaXNOb2RlKGxvY2F0aW9uKTsKICAgICB9CisgICAgRXhwcmVz
c2lvbk5vZGUqIHN1cGVyRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhbmQgY2FsbCB1c2VzU3VwZXIoKTsKKyAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgU3VwZXJOb2RlKGxvY2F0aW9uKTsKKyAgICB9Cisg
ICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVN1cGVyQ2FsbChjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZW5kKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50cyk7CisgICAgICAg
IFVOVVNFRF9QQVJBTShzdGFydCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkaXZvdCk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShlbmQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
KSBTdXBlck5vZGUobG9jYXRpb24pOworICAgIH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRl
U3VwZXJCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBwcm9wZXJ0eSwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCisgICAgewor
ICAgICAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOworICAgICAgICBVTlVTRURfUEFSQU0oc3Rh
cnQpOworICAgICAgICBVTlVTRURfUEFSQU0oZGl2b3QpOworICAgICAgICBVTlVTRURfUEFSQU0o
ZW5kKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgU3VwZXJCcmFja2V0QWNj
ZXNzb3JOb2RlKGxvY2F0aW9uLCBwcm9wZXJ0eSk7CisgICAgfQorICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVTdXBlckRvdEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBj
b25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eSwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCisg
ICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3RhcnQpOworICAgICAgICBVTlVTRURfUEFSQU0o
ZGl2b3QpOworICAgICAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgU3VwZXJEb3RBY2Nlc3Nvck5vZGUobG9jYXRpb24sICpwcm9wZXJ0eSk7
CisgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgc3RhcnQpCiAgICAgewogICAgICAgICBpZiAobV92bS0+cHJvcGVydHlOYW1lcy0+
YXJndW1lbnRzID09ICppZGVudCkKQEAgLTI3MywxMSArMzAxLDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUZ1bmN0
aW9uRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
KiBuYW1lLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJz
LCB1bnNpZ25lZCBvcGVuQnJhY2VPZmZzZXQsIHVuc2lnbmVkIGNsb3NlQnJhY2VPZmZzZXQsIGlu
dCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFydCkKKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRl
RnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IFBhcnNl
ckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25LZXl3b3Jk
U3RhcnQpCiAgICAgewotICAgICAgICBGdW5jRXhwck5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJz
ZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCAqbmFtZSwgYm9keSwgbV9zb3VyY2VDb2Rl
LT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0
YXJ0TGluZSwgc3RhcnRDb2x1bW4pLCBwYXJhbWV0ZXJzKTsKLSAgICAgICAgYm9keS0+c2V0TG9j
KGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRp
b24ubGluZVN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3Rh
cnQoZnVuY3Rpb25LZXl3b3JkU3RhcnQpOworICAgICAgICBGdW5jRXhwck5vZGUqIHJlc3VsdCA9
IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCAqaW5mby5uYW1lLCBp
bmZvLmJvZHksCisgICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5v
cGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5l
LCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyk7CisgICAgICAgIGluZm8u
Ym9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRp
b24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIGluZm8u
Ym9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjkxLDIwICszMjAsMjEgQEAgcHVibGlj
OgogICAgICAgICBib2R5LT5zZXRGdW5jdGlvbk5hbWVTdGFydChmdW5jdGlvbk5hbWVTdGFydCk7
CiAgICAgfQogICAgIAotICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRl
ck9yU2V0dGVyUHJvcGVydHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVy
dHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIFBhcmFtZXRl
ck5vZGUqIHBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgdW5zaWduZWQgb3BlbkJyYWNl
T2Zmc2V0LCB1bnNpZ25lZCBjbG9zZUJyYWNlT2Zmc2V0LCBpbnQgYm9keVN0YXJ0TGluZSwgaW50
IGJvZHlFbmRMaW5lLCB1bnNpZ25lZCBib2R5U3RhcnRDb2x1bW4sIHVuc2lnbmVkIGdldE9yU2V0
U3RhcnRPZmZzZXQpCisgICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVy
T3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0
eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSwg
Y29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBnZXRP
clNldFN0YXJ0T2Zmc2V0KQogICAgIHsKICAgICAgICAgQVNTRVJUKG5hbWUpOwotICAgICAgICBi
b2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zm
c2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwotICAgICAgICBib2R5LT5zZXRJbmZlcnJl
ZE5hbWUoKm5hbWUpOwotICAgICAgICBib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChnZXRP
clNldFN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJv
cGVydHlOb2RlKCpuYW1lLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlv
biwgbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGJvZHksIG1fc291cmNlQ29k
ZS0+c3ViRXhwcmVzc2lvbihvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlT
dGFydExpbmUsIGJvZHlTdGFydENvbHVtbiksIHBhcmFtcyksIHR5cGUpOworICAgICAgICBpbmZv
LmJvZHktPnNldExvYyhpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keUVuZExpbmUsIGxvY2F0
aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBpbmZv
LmJvZHktPnNldEluZmVycmVkTmFtZSgqbmFtZSk7CisgICAgICAgIGluZm8uYm9keS0+c2V0RnVu
Y3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JTZXRTdGFydE9mZnNldCk7CisgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZSgqbmFtZSwgbmV3IChtX3BhcnNlckFyZW5h
KSBGdW5jRXhwck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlm
aWVyLCBpbmZvLmJvZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFj
ZU9mZnNldCwgaW5mby5jbG9zZUJyYWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8u
Ym9keVN0YXJ0Q29sdW1uKSwgaW5mby5wYXJhbWV0ZXJzKSwgdHlwZSk7CiAgICAgfQogICAgIAot
ICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVy
dHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLCBkb3VibGUgbmFtZSwg
UGFyYW1ldGVyTm9kZSogcGFyYW1zLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCB1bnNpZ25lZCBv
cGVuQnJhY2VPZmZzZXQsIHVuc2lnbmVkIGNsb3NlQnJhY2VPZmZzZXQsIGludCBib2R5U3RhcnRM
aW5lLCBpbnQgYm9keUVuZExpbmUsIHVuc2lnbmVkIGJvZHlTdGFydENvbHVtbiwgdW5zaWduZWQg
Z2V0T3JTZXRTdGFydE9mZnNldCkKKyAgICBORVZFUl9JTkxJTkUgUHJvcGVydHlOb2RlKiBjcmVh
dGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5h
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlw
ZSwgYm9vbCwgZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVy
PiYgaW5mbywgdW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNldCkKICAgICB7Ci0gICAgICAgIGJv
ZHktPnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZz
ZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7Ci0gICAgICAgIGJvZHktPnNldEZ1bmN0aW9u
S2V5d29yZFN0YXJ0KGdldE9yU2V0U3RhcnRPZmZzZXQpOwotICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUocGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCku
bWFrZU51bWVyaWNJZGVudGlmaWVyKHZtLCBuYW1lKSwgbmV3IChtX3BhcnNlckFyZW5hKSBGdW5j
RXhwck5vZGUobG9jYXRpb24sIHZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgYm9k
eSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFj
ZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgYm9keVN0YXJ0Q29sdW1uKSwgcGFyYW1zKSwgdHlwZSk7
CisgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5
RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7
CisgICAgICAgIGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JTZXRTdGFy
dE9mZnNldCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9k
ZShwYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIodm0s
IG5hbWUpLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgdm0tPnBy
b3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBpbmZvLmJvZHksIG1fc291cmNlQ29kZS0+c3Vi
RXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNlT2Zmc2V0LCBp
bmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5wYXJhbWV0ZXJz
KSwgdHlwZSk7CiAgICAgfQogCiAgICAgQXJndW1lbnRzTm9kZSogY3JlYXRlQXJndW1lbnRzKCkg
eyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBcmd1bWVudHNOb2RlKCk7IH0KQEAgLTMzNiwx
NCArMzY2LDIzIEBAIHB1YmxpYzoKICAgICBDbGF1c2VMaXN0Tm9kZSogY3JlYXRlQ2xhdXNlTGlz
dChDYXNlQ2xhdXNlTm9kZSogY2xhdXNlKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIENs
YXVzZUxpc3ROb2RlKGNsYXVzZSk7IH0KICAgICBDbGF1c2VMaXN0Tm9kZSogY3JlYXRlQ2xhdXNl
TGlzdChDbGF1c2VMaXN0Tm9kZSogdGFpbCwgQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkgeyByZXR1
cm4gbmV3IChtX3BhcnNlckFyZW5hKSBDbGF1c2VMaXN0Tm9kZSh0YWlsLCBjbGF1c2UpOyB9CiAK
LSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGdW5jRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBGdW5jdGlvbkJvZHlO
b2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJzLCB1bnNpZ25lZCBvcGVuQnJhY2VP
ZmZzZXQsIHVuc2lnbmVkIGNsb3NlQnJhY2VPZmZzZXQsIGludCBib2R5U3RhcnRMaW5lLCBpbnQg
Ym9keUVuZExpbmUsIHVuc2lnbmVkIGJvZHlTdGFydENvbHVtbiwgdW5zaWduZWQgZnVuY3Rpb25L
ZXl3b3JkU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZv
PEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFydCkKICAgICB7
Ci0gICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0Rl
Y2xOb2RlKGxvY2F0aW9uLCAqbmFtZSwgYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9u
KG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgYm9keVN0
YXJ0Q29sdW1uKSwgcGFyYW1ldGVycyk7Ci0gICAgICAgIGlmICgqbmFtZSA9PSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5hcmd1bWVudHMpCisgICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAo
bV9wYXJzZXJBcmVuYSkgRnVuY0RlY2xOb2RlKGxvY2F0aW9uLCAqaW5mby5uYW1lLCBpbmZvLmJv
ZHksCisgICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJh
Y2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZv
LmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyk7CisgICAgICAgIGlmICgqaW5mby5u
YW1lID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKICAgICAgICAgICAgIHVzZXNB
cmd1bWVudHMoKTsKICAgICAgICAgbV9zY29wZS5tX2Z1bmNEZWNsYXJhdGlvbnMuYXBwZW5kKGRl
Y2wtPmJvZHkoKSk7Ci0gICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5k
TGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7Ci0g
ICAgICAgIGJvZHktPnNldEZ1bmN0aW9uS2V5d29yZFN0YXJ0KGZ1bmN0aW9uS2V5d29yZFN0YXJ0
KTsKKyAgICAgICAgaW5mby5ib2R5LT5zZXRMb2MoaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJv
ZHlFbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0
KTsKKyAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChmdW5jdGlvbktl
eXdvcmRTdGFydCk7CisgICAgICAgIHJldHVybiBkZWNsOworICAgIH0KKworICAgIFN0YXRlbWVu
dE5vZGUqIGNyZWF0ZUNsYXNzRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9uTm9kZSogY29uc3RydWN0
b3JEZWNsYXJhdGlvbiwKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHBhcmVudENsYXNzRXhwcmVz
c2lvbiwgUHJvcGVydHlMaXN0Tm9kZSogaW5zdGFuY2VNZXRob2RzLCBQcm9wZXJ0eUxpc3ROb2Rl
KiBzdGF0aWNNZXRob2RzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKKyAgICB7CisgICAg
ICAgIENsYXNzRGVjbE5vZGUqIGRlY2wgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIENsYXNzRGVjbE5v
ZGUobG9jYXRpb24sIG5hbWUsIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24sIHBhcmVudENsYXNzRXhw
cmVzc2lvbiwgaW5zdGFuY2VNZXRob2RzLCBzdGF0aWNNZXRob2RzKTsKKyAgICAgICAgZGVjbC0+
c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9u
LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiBkZWNsOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9LZXl3b3Jkcy50YWJsZSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvS2V5d29yZHMudGFibGUKaW5kZXggNTI3ZWFkYS4uNWNi
NThhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9LZXl3b3Jkcy50
YWJsZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0tleXdvcmRzLnRhYmxlCkBA
IC0xMCw4ICsxMCwxMCBAQCBmYWxzZQkJRkFMU0VUT0tFTgogYnJlYWsJCUJSRUFLCiBjYXNlCQlD
QVNFCiBjYXRjaAkJQ0FUQ0gKK2NsYXNzCQlDTEFTU1RPS0VOCiBjb25zdAkJQ09OU1RUT0tFTgog
ZGVmYXVsdAkJREVGQVVMVAorZXh0ZW5kcwkJRVhURU5EUwogZmluYWxseQkJRklOQUxMWQogZm9y
CQlGT1IKIGluc3RhbmNlb2YJSU5TVEFOQ0VPRgpAQCAtMjgsNiArMzAsOCBAQCBkbwkJRE8KIHdo
aWxlCQlXSElMRQogZWxzZQkJRUxTRQogaW4JCUlOVE9LRU4KK3N0YXRpYwkJU1RBVElDVE9LRU4K
K3N1cGVyICAgICAgICAgICBTVVBFUgogc3dpdGNoCQlTV0lUQ0gKIHRocm93CQlUSFJPVwogdHJ5
CQlUUlkKQEAgLTM2LDEyICs0MCw5IEBAIHdpdGgJCVdJVEgKIGRlYnVnZ2VyCURFQlVHR0VSCiAK
ICMgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCi1jbGFzcyAgICAgICAgICAgUkVTRVJWRUQKIGVu
dW0gICAgICAgICAgICBSRVNFUlZFRAogZXhwb3J0ICAgICAgICAgIFJFU0VSVkVECi1leHRlbmRz
ICAgICAgICAgUkVTRVJWRUQKIGltcG9ydCAgICAgICAgICBSRVNFUlZFRAotc3VwZXIgICAgICAg
ICAgIFJFU0VSVkVECiAKICMgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgaW4gc3RyaWN0IGNvZGUu
CiBpbXBsZW1lbnRzICAgICAgUkVTRVJWRURfSUZfU1RSSUNUCkBAIC01MSw3ICs1Miw2IEBAIHBh
Y2thZ2UgICAgICAgICBSRVNFUlZFRF9JRl9TVFJJQ1QKIHByaXZhdGUgICAgICAgICBSRVNFUlZF
RF9JRl9TVFJJQ1QKIHByb3RlY3RlZCAgICAgICBSRVNFUlZFRF9JRl9TVFJJQ1QKIHB1YmxpYyAg
ICAgICAgICBSRVNFUlZFRF9JRl9TVFJJQ1QKLXN0YXRpYyAgICAgICAgICBSRVNFUlZFRF9JRl9T
VFJJQ1QKIHlpZWxkICAgICAgICAgICBSRVNFUlZFRF9JRl9TVFJJQ1QKIAogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAppbmRleCBkNDlk
NDFmLi4zMDU2NjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVD
b25zdHJ1Y3RvcnMuaApAQCAtMTAyLDYgKzEwMiwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7
CiAgICAgfQogCisgICAgaW5saW5lIFN1cGVyTm9kZTo6U3VwZXJOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24pCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCisg
ICAgeworICAgIH0KKworICAgIGlubGluZSBTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGU6OlN1cGVy
QnJhY2tldEFjY2Vzc29yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogc3Vic2NyaXB0KQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9u
KQorICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkKKyAgICB7CisgICAgfQorCisgICAg
aW5saW5lIFN1cGVyRG90QWNjZXNzb3JOb2RlOjpTdXBlckRvdEFjY2Vzc29yTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKKyAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKKyAgICAgICAgLCBtX2lkZW50KGlkZW50KQor
ICAgIHsKKyAgICB9CisKIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBzdGFydCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikK
ICAgICAgICAgLCBtX2lkZW50KGlkZW50KQpAQCAtMTY4LDYgKzE4NSw3IEBAIGlubGluZSBSZXNv
bHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29u
c3QgSWRlbnRpZmllCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAg
ICwgbV9ub2RlKG5vZGUpCiAgICAgICAgICwgbV9uZXh0KDApCisgICAgICAgICwgbV9pc01ldGhv
ZExpc3QoZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtMTc1LDYgKzE5Myw3IEBAIGlubGluZSBS
ZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAg
ICAgICwgbV9ub2RlKG5vZGUpCiAgICAgICAgICwgbV9uZXh0KDApCisgICAgICAgICwgbV9pc01l
dGhvZExpc3QoZmFsc2UpCiAgICAgewogICAgICAgICBsaXN0LT5tX25leHQgPSB0aGlzOwogICAg
IH0KQEAgLTc2OCw2ICs3ODcsMTkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWUKICAgICAgICAg
bV9ib2R5LT5maW5pc2hQYXJzaW5nKHNvdXJjZSwgcGFyYW1ldGVyLCBpZGVudCwgRnVuY3Rpb25E
ZWNsYXJhdGlvbik7CiAgICAgfQogCisgICAgaW5saW5lIENsYXNzRGVjbE5vZGU6OkNsYXNzRGVj
bE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgRXhwcmVzc2lvbk5vZGUqIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24sCisgICAgICAgIEV4
cHJlc3Npb25Ob2RlKiBwYXJlbnRDbGFzc0V4cHJlc3Npb24sIFByb3BlcnR5TGlzdE5vZGUqIGlu
c3RhbmNlTWV0aG9kcywgUHJvcGVydHlMaXN0Tm9kZSogc3RhdGljTWV0aG9kcykKKyAgICAgICAg
OiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQorICAgICAgICAsIG1fbmFtZShuYW1lKQorICAgICAg
ICAsIG1fY29uc3RydWN0b3JEZWNsYXJhdGlvbihjb25zdHJ1Y3RvckRlY2xhcmF0aW9uKQorICAg
ICAgICAsIG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKHBhcmVudENsYXNzRXhwcmVzc2lvbikKKyAg
ICAgICAgLCBtX2luc3RhbmNlTWV0aG9kcyhpbnN0YW5jZU1ldGhvZHMpCisgICAgICAgICwgbV9z
dGF0aWNNZXRob2RzKHN0YXRpY01ldGhvZHMpCisgICAgeworICAgICAgICBpZiAoaW5zdGFuY2VN
ZXRob2RzKQorICAgICAgICAgICAgaW5zdGFuY2VNZXRob2RzLT5zZXRJc01ldGhvZExpc3QoKTsK
KyAgICB9CisKICAgICBpbmxpbmUgQ2FzZUNsYXVzZU5vZGU6OkNhc2VDbGF1c2VOb2RlKEV4cHJl
c3Npb25Ob2RlKiBleHByLCBTb3VyY2VFbGVtZW50cyogc3RhdGVtZW50cykKICAgICAgICAgOiBt
X2V4cHIoZXhwcikKICAgICAgICAgLCBtX3N0YXRlbWVudHMoc3RhdGVtZW50cykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCA2ZjU1YjQyLi4wMDgzZTc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0xNjMsNiArMTYzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1YnRyYWN0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzQm9vbGVhbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NwcmVhZEV4cHJlc3Npb24oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBlck5vZGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGVJ
bkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBMYWJlbCosIExhYmVsKiwgRmFs
bFRocm91Z2hNb2RlKTsKIApAQCAtNDI4LDYgKzQyOSwzNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwogICAgIH07CiAKKyAgICBjbGFzcyBTdXBlck5v
ZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
U3VwZXJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpOworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdmlydHVhbCBib29sIGlzU3VwZXJOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisgICAgfTsKKworICAgIGNsYXNz
IFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CisgICAgcHVibGljOgorICAgICAgICBTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCk7CisKKyAgICBwcml2YXRl
OgorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisKKyAgICAgICAgRXhwcmVzc2lvbk5v
ZGUqIG1fc3Vic2NyaXB0OworICAgIH07CisKKyAgICBjbGFzcyBTdXBlckRvdEFjY2Vzc29yTm9k
ZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBT
dXBlckRvdEFjY2Vzc29yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisK
KyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbV9pZGVudDsKKyAgICB9OworCiAgICAgY2xhc3Mg
UmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAg
ICAgUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCk7CkBAIC01MDQsMTEgKzUzNCwxNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgUHJvcGVydHlMaXN0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBQcm9wZXJ0eU5vZGUqKTsKICAgICAgICAgUHJvcGVydHlMaXN0Tm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGUqLCBQcm9wZXJ0eUxpc3ROb2RlKik7CiAKKyAgICAg
ICAgdm9pZCBzZXRJc01ldGhvZExpc3QoKSB7IG1faXNNZXRob2RMaXN0ID0gdHJ1ZTsgfQorCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIHZv
aWQgZW1pdENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiwg
UHJvcGVydHlOb2RlKik7CisKICAgICAgICAgUHJvcGVydHlOb2RlKiBtX25vZGU7CiAgICAgICAg
IFByb3BlcnR5TGlzdE5vZGUqIG1fbmV4dDsKKyAgICAgICAgYm9vbCBtX2lzTWV0aG9kTGlzdDsK
ICAgICB9OwogCiAgICAgY2xhc3MgT2JqZWN0TGl0ZXJhbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUgewpAQCAtMTcyMyw2ICsxNzU4LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBG
dW5jdGlvbkJvZHlOb2RlKiBtX2JvZHk7CiAgICAgfTsKIAorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgaW5oZXJpdCBmcm9tIFRocm93YWJsZUV4cHJlc3Npb25EYXRhLgorICAgIGNsYXNzIENsYXNz
RGVjbE5vZGUgZmluYWwgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CisgICAgcHVibGljOgorICAg
ICAgICBDbGFzc0RlY2xOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZp
ZXImLCBFeHByZXNzaW9uTm9kZSogY29uc3RydWN0b3JEZWNsYXJhdGlvbiwKKyAgICAgICAgICAg
IEV4cHJlc3Npb25Ob2RlKiBwYXJlbnRDbGFzcywgUHJvcGVydHlMaXN0Tm9kZSogaW5zdGFuY2VN
ZXRob2RzLCBQcm9wZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOworCisgICAgICAgIElkZW50aWZpZXIgbV9uYW1lOwor
ICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9jb25zdHJ1Y3RvckRlY2xhcmF0aW9uOworICAgICAg
ICBFeHByZXNzaW9uTm9kZSogbV9wYXJlbnRDbGFzc0V4cHJlc3Npb247CisgICAgICAgIFByb3Bl
cnR5TGlzdE5vZGUqIG1faW5zdGFuY2VNZXRob2RzOworICAgICAgICBQcm9wZXJ0eUxpc3ROb2Rl
KiBtX3N0YXRpY01ldGhvZHM7CisgICAgfTsKKwogICAgIGNsYXNzIENhc2VDbGF1c2VOb2RlIDog
cHVibGljIFBhcnNlckFyZW5hRnJlZWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgQ2FzZUNs
YXVzZU5vZGUoRXhwcmVzc2lvbk5vZGUqLCBTb3VyY2VFbGVtZW50cyogPSAwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBjMjVmMjFhLi4wMGQ3MWU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0xMTUwLDYgKzExNTAsMTAg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZVN0YXRlbWVudChUcmUKICAgICBjYXNlIENPTlNUVE9LRU46CiAgICAgICAg
IHJlc3VsdCA9IHBhcnNlQ29uc3REZWNsYXJhdGlvbihjb250ZXh0KTsKICAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDTEFTU1RPS0VOOgorICAgICAgICBmYWlsSWZGYWxzZShtX3N0YXRlbWVudERl
cHRoID09IDEsICJDbGFzcyBkZWNsYXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiBhIGxleGljYWxs
eSBuZXN0ZWQgc3RhdGVtZW50Iik7CisgICAgICAgIHJlc3VsdCA9IHBhcnNlQ2xhc3NEZWNsYXJh
dGlvbihjb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGVU5DVElPTjoKICAgICAg
ICAgZmFpbElmRmFsc2VJZlN0cmljdChtX3N0YXRlbWVudERlcHRoID09IDEsICJTdHJpY3QgbW9k
ZSBkb2VzIG5vdCBhbGxvdyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gYSBsZXhpY2FsbHkgbmVz
dGVkIHN0YXRlbWVudCIpOwogICAgICAgICByZXN1bHQgPSBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRp
b24oY29udGV4dCk7CkBAIC0xMjY3LDEzICsxMjcxLDE1IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBz
dHJpbmdGb3JGdW5jdGlvbk1vZGUoRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSkKICAgICAgICAgcmV0
dXJuICJzZXR0ZXIiOwogICAgIGNhc2UgRnVuY3Rpb25Nb2RlOgogICAgICAgICByZXR1cm4gImZ1
bmN0aW9uIjsKKyAgICBjYXNlIE1ldGhvZE1vZGU6CisgICAgICAgIHJldHVybiAibWV0aG9kIjsK
ICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8o
VHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywg
RnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgY29u
c3QgSWRlbnRpZmllciomIG5hbWUsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJz
LCBUcmVlRnVuY3Rpb25Cb2R5JiBib2R5LCB1bnNpZ25lZCYgb3BlbkJyYWNlT2Zmc2V0LCB1bnNp
Z25lZCYgY2xvc2VCcmFjZU9mZnNldCwgaW50JiBib2R5U3RhcnRMaW5lLCB1bnNpZ25lZCYgYm9k
eVN0YXJ0Q29sdW1uKQordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYgY29udGV4dCwgRnVuY3Rp
b25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSBtb2RlLCBib29s
IG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+
JiBpbmZvKQogewogICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hT
Y29wZSgpKTsKICAgICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CkBAIC0xMjgxLDE0
ICsxMjg3LDE0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAgICAgY29uc3QgSWRlbnRpZmll
ciogbGFzdEZ1bmN0aW9uTmFtZSA9IG1fbGFzdEZ1bmN0aW9uTmFtZTsKICAgICBtX2xhc3RGdW5j
dGlvbk5hbWUgPSBudWxscHRyOwogICAgIGlmIChtYXRjaChJREVOVCkpIHsKLSAgICAgICAgbmFt
ZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAgICBtX2xhc3RGdW5jdGlvbk5hbWUgPSBu
YW1lOworICAgICAgICBpbmZvLm5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICAgICAg
bV9sYXN0RnVuY3Rpb25OYW1lID0gaW5mby5uYW1lOwogICAgICAgICBuZXh0KCk7CiAgICAgICAg
IGlmICghbmFtZUlzSW5Db250YWluaW5nU2NvcGUpCi0gICAgICAgICAgICBmYWlsSWZGYWxzZUlm
U3RyaWN0KGZ1bmN0aW9uU2NvcGUtPmRlY2xhcmVWYXJpYWJsZShuYW1lKSwgIiciLCBuYW1lLT5p
bXBsKCksICInIGlzIG5vdCBhIHZhbGlkICIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShtb2RlKSwg
IiBuYW1lIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0
KGZ1bmN0aW9uU2NvcGUtPmRlY2xhcmVWYXJpYWJsZShpbmZvLm5hbWUpLCAiJyIsIGluZm8ubmFt
ZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9k
ZSksICIgbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwogICAgIH0gZWxzZSBpZiAocmVxdWlyZW1lbnRz
ID09IEZ1bmN0aW9uTmVlZHNOYW1lKSB7CiAgICAgICAgIGlmIChtYXRjaChPUEVOUEFSRU4pICYm
IG1vZGUgPT0gRnVuY3Rpb25Nb2RlKQotICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJGdW5jdGlv
biBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKKyAgICAgICAgICAgIHNlbWFudGljRmFp
bChzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAg
ICAgICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tleXdvcmQoc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1v
ZGUpLCAiIG5hbWUiKTsKICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2VuKCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOTgsMTkgKzEzMDQsMTkgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhU
cmVlQnVpbGQKICAgICAgICAgZmFpbFdpdGhNZXNzYWdlKCJFeHBlY3RlZCBhbiBvcGVuaW5nICco
JyBiZWZvcmUgYSAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIncyBwYXJhbWV0ZXIg
bGlzdCIpOwogICAgIH0KICAgICBpZiAoIW1hdGNoKENMT1NFUEFSRU4pKSB7Ci0gICAgICAgIHBh
cmFtZXRlcnMgPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCk7Ci0gICAgICAgIGZhaWxJ
ZkZhbHNlKHBhcmFtZXRlcnMsICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVycyBmb3IgdGhpcyAiLCBz
dHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOworICAgICAgICBpbmZvLnBhcmFtZXRlcnMgPSBw
YXJzZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNlKGluZm8u
cGFyYW1ldGVycywgIkNhbm5vdCBwYXJzZSBwYXJhbWV0ZXJzIGZvciB0aGlzICIsIHN0cmluZ0Zv
ckZ1bmN0aW9uTW9kZShtb2RlKSk7CiAgICAgfQogICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJF
TiwgIkV4cGVjdGVkIGEgJyknIG9yIGEgJywnIGFmdGVyIGEgcGFyYW1ldGVyIGRlY2xhcmF0aW9u
Iik7CiAgICAgbWF0Y2hPckZhaWwoT1BFTkJSQUNFLCAiRXhwZWN0ZWQgYW4gb3BlbmluZyAneycg
YXQgdGhlIHN0YXJ0IG9mIGEgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpLCAiIGJvZHki
KTsKICAgICAKLSAgICBvcGVuQnJhY2VPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5vZmZzZXQ7Ci0g
ICAgYm9keVN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGJvZHlTdGFydENvbHVtbiA9IG1f
dG9rZW4ubV9kYXRhLm9mZnNldCAtIG1fdG9rZW4ubV9kYXRhLmxpbmVTdGFydE9mZnNldDsKKyAg
ICBpbmZvLm9wZW5CcmFjZU9mZnNldCA9IG1fdG9rZW4ubV9kYXRhLm9mZnNldDsKKyAgICBpbmZv
LmJvZHlTdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBpbmZvLmJvZHlTdGFydENvbHVtbiA9
IG1fdG9rZW4ubV9kYXRhLm9mZnNldCAtIG1fdG9rZW4ubV9kYXRhLmxpbmVTdGFydE9mZnNldDsK
ICAgICBKU1Rva2VuTG9jYXRpb24gc3RhcnRMb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAg
IAogICAgIC8vIElmIHdlIGtub3cgYWJvdXQgdGhpcyBmdW5jdGlvbiBhbHJlYWR5LCB3ZSBjYW4g
dXNlIHRoZSBjYWNoZWQgaW5mbyBhbmQgc2tpcCB0aGUgcGFyc2VyIHRvIHRoZSBlbmQgb2YgdGhl
IGZ1bmN0aW9uLgotICAgIGlmIChjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogY2FjaGVk
SW5mbyA9IFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hlID8gZmluZENhY2hlZEZ1bmN0
aW9uSW5mbyhvcGVuQnJhY2VPZmZzZXQpIDogMCkgeworICAgIGlmIChjb25zdCBTb3VyY2VQcm92
aWRlckNhY2hlSXRlbSogY2FjaGVkSW5mbyA9IFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNh
Y2hlID8gZmluZENhY2hlZEZ1bmN0aW9uSW5mbyhpbmZvLm9wZW5CcmFjZU9mZnNldCkgOiAwKSB7
CiAgICAgICAgIC8vIElmIHdlJ3JlIGluIGEgc3RyaWN0IGNvbnRleHQsIHRoZSBjYWNoZWQgZnVu
Y3Rpb24gaW5mbyBtdXN0IHNheSBpdCB3YXMgc3RyaWN0IHRvby4KICAgICAgICAgQVNTRVJUKCFz
dHJpY3RNb2RlKCkgfHwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CiAgICAgICAgIEpTVG9rZW5M
b2NhdGlvbiBlbmRMb2NhdGlvbjsKQEAgLTEzMTksMjEgKzEzMjUsMjEgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5m
byhUcmVlQnVpbGQKICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPSBjYWNoZWRJbmZv
LT5jbG9zZUJyYWNlT2Zmc2V0OwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQg
PSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlTGluZVN0YXJ0T2Zmc2V0OwogCi0gICAgICAgIGJvb2wg
ZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA9IChlbmRMb2NhdGlvbi5saW5lID09IGJvZHlTdGFydExp
bmUpOworICAgICAgICBib29sIGVuZENvbHVtbklzT25TdGFydExpbmUgPSAoZW5kTG9jYXRpb24u
bGluZSA9PSBpbmZvLmJvZHlTdGFydExpbmUpOwogICAgICAgICBBU1NFUlQoZW5kTG9jYXRpb24u
c3RhcnRPZmZzZXQgPj0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgdW5z
aWduZWQgYm9keUVuZENvbHVtbiA9IGVuZENvbHVtbklzT25TdGFydExpbmUgPwogICAgICAgICAg
ICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBtX3Rva2VuLm1fZGF0YS5saW5lU3RhcnRPZmZz
ZXQgOgogICAgICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlvbi5s
aW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQg
PSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogCi0gICAgICAgIGJvZHkgPSBj
b250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgYm9k
eVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAg
ICAgICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlv
biwgZW5kTG9jYXRpb24sIGluZm8uYm9keVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNo
ZWRJbmZvLT5zdHJpY3RNb2RlKTsKICAgICAgICAgCiAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnJl
c3RvcmVGcm9tU291cmNlUHJvdmlkZXJDYWNoZShjYWNoZWRJbmZvKTsKICAgICAgICAgZmFpbElm
RmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlh
YmxlSW5mbyksICJQYXJzZXIgZXJyb3IiKTsKICAgICAgICAgCi0gICAgICAgIGNsb3NlQnJhY2VP
ZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlT2Zmc2V0OworICAgICAgICBpbmZvLmNsb3Nl
QnJhY2VPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlT2Zmc2V0OwogCi0gICAgICAgIGNv
bnRleHQuc2V0RnVuY3Rpb25OYW1lU3RhcnQoYm9keSwgZnVuY3Rpb25OYW1lU3RhcnQpOworICAg
ICAgICBjb250ZXh0LnNldEZ1bmN0aW9uTmFtZVN0YXJ0KGluZm8uYm9keSwgZnVuY3Rpb25OYW1l
U3RhcnQpOwogICAgICAgICBtX3Rva2VuID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZVRva2VuKCk7
CiAgICAgICAgIGlmIChlbmRDb2x1bW5Jc09uU3RhcnRMaW5lKQogICAgICAgICAgICAgbV90b2tl
bi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNldCA9IGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQ7CkBA
IC0xMzQxLDIzICsxMzQ3LDI0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAgICAgICAgIG1f
bGV4ZXItPnNldE9mZnNldChtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0LCBtX3Rva2VuLm1f
bG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgbV9sZXhlci0+c2V0TGluZU51bWJl
cihtX3Rva2VuLm1fbG9jYXRpb24ubGluZSk7CiAKLSAgICAgICAgY29udGV4dC5zZXRFbmRPZmZz
ZXQoYm9keSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpKTsKKyAgICAgICAgY29udGV4dC5zZXRF
bmRPZmZzZXQoaW5mby5ib2R5LCBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCkpOwogICAgICAgICAK
ICAgICAgICAgbmV4dCgpOworICAgICAgICBpbmZvLmJvZHlFbmRMaW5lID0gbV9sYXN0VG9rZW5F
bmRQb3NpdGlvbi5saW5lOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgbV9sYXN0
RnVuY3Rpb25OYW1lID0gbGFzdEZ1bmN0aW9uTmFtZTsKICAgICBQYXJzZXJTdGF0ZSBvbGRTdGF0
ZSA9IHNhdmVTdGF0ZSgpOwotICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsK
KyAgICBpbmZvLmJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsKICAgICByZXN0b3Jl
U3RhdGUob2xkU3RhdGUpOwotICAgIGZhaWxJZkZhbHNlKGJvZHksICJDYW5ub3QgcGFyc2UgdGhl
IGJvZHkgb2YgdGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOwotICAgIGNvbnRl
eHQuc2V0RW5kT2Zmc2V0KGJvZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7Ci0gICAgaWYg
KGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1vZGUoKSAmJiBuYW1lKSB7CisgICAgZmFpbElmRmFsc2Uo
aW5mby5ib2R5LCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVu
Y3Rpb25Nb2RlKG1vZGUpKTsKKyAgICBjb250ZXh0LnNldEVuZE9mZnNldChpbmZvLmJvZHksIG1f
bGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7CisgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1v
ZGUoKSAmJiBpbmZvLm5hbWUpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobW9kZSA9PSBGdW5j
dGlvbk1vZGUpOwotICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS0+cHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzID09ICpuYW1lLCAiJyIsIG5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFs
aWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICBzZW1hbnRpY0ZhaWxJ
ZlRydWUobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbmFtZSwgIiciLCBuYW1lLT5pbXBs
KCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUiKTsKKyAg
ICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9
PSAqaW5mby5uYW1lLCAiJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBm
dW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1
ZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppbmZvLm5hbWUsICInIiwgaW5mby5uYW1l
LT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUi
KTsKICAgICB9Ci0gICAgY2xvc2VCcmFjZU9mZnNldCA9IG1fdG9rZW4ubV9kYXRhLm9mZnNldDsK
KyAgICBpbmZvLmNsb3NlQnJhY2VPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5vZmZzZXQ7CiAgICAg
dW5zaWduZWQgY2xvc2VCcmFjZUxpbmUgPSBtX3Rva2VuLm1fZGF0YS5saW5lOwogICAgIHVuc2ln
bmVkIGNsb3NlQnJhY2VMaW5lU3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5saW5lU3RhcnRP
ZmZzZXQ7CiAgICAgCkBAIC0xMzY1LDI2ICsxMzcyLDI3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1
aWxkCiAgICAgLy8gQW55IGZ1dHVyZSByZXBhcnNpbmcgY2FuIHRoZW4gc2tpcCB0aGUgZnVuY3Rp
b24uCiAgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtRnVuY3Rpb25MZW5ndGhUb0NhY2hlID0g
MTY7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtPiBuZXdJbmZv
OwotICAgIGludCBmdW5jdGlvbkxlbmd0aCA9IGNsb3NlQnJhY2VPZmZzZXQgLSBvcGVuQnJhY2VP
ZmZzZXQ7CisgICAgaW50IGZ1bmN0aW9uTGVuZ3RoID0gaW5mby5jbG9zZUJyYWNlT2Zmc2V0IC0g
aW5mby5vcGVuQnJhY2VPZmZzZXQ7CiAgICAgaWYgKFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlv
bkNhY2hlICYmIG1fZnVuY3Rpb25DYWNoZSAmJiBmdW5jdGlvbkxlbmd0aCA+IG1pbmltdW1GdW5j
dGlvbkxlbmd0aFRvQ2FjaGUpIHsKICAgICAgICAgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW1DcmVh
dGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVycy5mdW5jdGlvbk5h
bWVTdGFydCA9IGZ1bmN0aW9uTmFtZVN0YXJ0OwogICAgICAgICBwYXJhbWV0ZXJzLmNsb3NlQnJh
Y2VMaW5lID0gY2xvc2VCcmFjZUxpbmU7Ci0gICAgICAgIHBhcmFtZXRlcnMuY2xvc2VCcmFjZU9m
ZnNldCA9IGNsb3NlQnJhY2VPZmZzZXQ7CisgICAgICAgIHBhcmFtZXRlcnMuY2xvc2VCcmFjZU9m
ZnNldCA9IGluZm8uY2xvc2VCcmFjZU9mZnNldDsKICAgICAgICAgcGFyYW1ldGVycy5jbG9zZUJy
YWNlTGluZVN0YXJ0T2Zmc2V0ID0gY2xvc2VCcmFjZUxpbmVTdGFydE9mZnNldDsKICAgICAgICAg
ZnVuY3Rpb25TY29wZS0+ZmlsbFBhcmFtZXRlcnNGb3JTb3VyY2VQcm92aWRlckNhY2hlKHBhcmFt
ZXRlcnMpOwogICAgICAgICBuZXdJbmZvID0gU291cmNlUHJvdmlkZXJDYWNoZUl0ZW06OmNyZWF0
ZShwYXJhbWV0ZXJzKTsKIAogICAgIH0KLSAgICBjb250ZXh0LnNldEZ1bmN0aW9uTmFtZVN0YXJ0
KGJvZHksIGZ1bmN0aW9uTmFtZVN0YXJ0KTsKKyAgICBjb250ZXh0LnNldEZ1bmN0aW9uTmFtZVN0
YXJ0KGluZm8uYm9keSwgZnVuY3Rpb25OYW1lU3RhcnQpOwogICAgIAogICAgIGZhaWxJZkZhbHNl
KHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUlu
Zm8pLCAiUGFyc2VyIGVycm9yIik7CiAgICAgbWF0Y2hPckZhaWwoQ0xPU0VCUkFDRSwgIkV4cGVj
dGVkIGEgY2xvc2luZyAnfScgYWZ0ZXIgYSAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSks
ICIgYm9keSIpOwogICAgIAogICAgIGlmIChuZXdJbmZvKQotICAgICAgICBtX2Z1bmN0aW9uQ2Fj
aGUtPmFkZChvcGVuQnJhY2VPZmZzZXQsIFdURjo6bW92ZShuZXdJbmZvKSk7CisgICAgICAgIG1f
ZnVuY3Rpb25DYWNoZS0+YWRkKGluZm8ub3BlbkJyYWNlT2Zmc2V0LCBXVEY6Om1vdmUobmV3SW5m
bykpOwogICAgIAogICAgIG5leHQoKTsKKyAgICBpbmZvLmJvZHlFbmRMaW5lID0gbV9sYXN0VG9r
ZW5FbmRQb3NpdGlvbi5saW5lOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzk1LDE3ICsx
NDAzLDEyMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYQogICAgIEpTVG9rZW5Mb2NhdGlvbiBs
b2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0
YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgIG5leHQoKTsKKyAgICBQYXJzZXJGdW5jdGlvbkluZm88
VHJlZUJ1aWxkZXI+IGluZm87CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBGdW5jdGlvbk1vZGUsIHRydWUsIGluZm8pKSwgIkNh
bm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7CisgICAgZmFpbElmRmFsc2UoaW5mby5uYW1lLCAi
RnVuY3Rpb24gc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBuYW1lIik7CisgICAgZmFpbElmRmFsc2VJ
ZlN0cmljdChkZWNsYXJlVmFyaWFibGUoaW5mby5uYW1lKSwgIkNhbm5vdCBkZWNsYXJlIGEgZnVu
Y3Rpb24gbmFtZWQgJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOwor
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGxvY2F0aW9uLCBpbmZv
LCBmdW5jdGlvbktleXdvcmRTdGFydCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5
cGU+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlQ2xhc3NEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYgY29udGV4dCkKK3sK
KyAgICBBU1NFUlQobWF0Y2goQ0xBU1NUT0tFTikpOworICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2Nh
dGlvbih0b2tlbkxvY2F0aW9uKCkpOworICAgIEpTVGV4dFBvc2l0aW9uIGNsYXNzU3RhcnQgPSB0
b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICB1bnNpZ25lZCBjbGFzc1N0YXJ0TGluZSA9IHRva2Vu
TGluZSgpOworICAgIHVuc2lnbmVkIGNsYXNzRW5kTGluZSA9IDA7CisgICAgbmV4dCgpOwogICAg
IGNvbnN0IElkZW50aWZpZXIqIG5hbWUgPSAwOwotICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0
IHBhcmFtZXRlcnMgPSAwOwotICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9IDA7Ci0gICAgdW5z
aWduZWQgb3BlbkJyYWNlT2Zmc2V0ID0gMDsKLSAgICB1bnNpZ25lZCBjbG9zZUJyYWNlT2Zmc2V0
ID0gMDsKLSAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7Ci0gICAgdW5zaWduZWQgYm9keVN0YXJ0
Q29sdW1uID0gMDsKLSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwg
RnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwgdHJ1ZSwgbmFtZSwgcGFyYW1ldGVycywg
Ym9keSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBi
b2R5U3RhcnRDb2x1bW4pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7Ci0gICAgZmFp
bElmRmFsc2UobmFtZSwgIkZ1bmN0aW9uIHN0YXRlbWVudHMgbXVzdCBoYXZlIGEgbmFtZSIpOwot
ICAgIGZhaWxJZkZhbHNlSWZTdHJpY3QoZGVjbGFyZVZhcmlhYmxlKG5hbWUpLCAiQ2Fubm90IGRl
Y2xhcmUgYSBmdW5jdGlvbiBuYW1lZCAnIiwgbmFtZS0+aW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9k
ZSIpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGxvY2F0aW9u
LCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZz
ZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgYm9keVN0YXJ0
Q29sdW1uLCBmdW5jdGlvbktleXdvcmRTdGFydCk7CisgICAgVHJlZUV4cHJlc3Npb24gcGFyZW50
Q2xhc3MgPSAwOworICAgIFRyZWVFeHByZXNzaW9uIGNvbnN0cnVjdG9yID0gMDsKKyAgICBUcmVl
UHJvcGVydHlMaXN0IGluc3RhbmNlTWV0aG9kcyA9IDA7CisgICAgVHJlZVByb3BlcnR5TGlzdCBz
dGF0aWNNZXRob2RzID0gMDsKKy8vICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IGNvbnN0cnVj
dG9yUGFyYW1ldGVycyA9IDA7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlQ2xhc3NJbmZvKGNvbnRl
eHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBuYW1lLCBwYXJlbnRDbGFzcywgY29uc3RydWN0b3IsIGlu
c3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9kcykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgY2xhc3Mi
KTsKKyAgICBmYWlsSWZGYWxzZShuYW1lLCAiQ2xhc3Mgc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBu
YW1lIik7CisgICAgZmFpbElmRmFsc2UoZGVjbGFyZVZhcmlhYmxlKG5hbWUpLCAiQ2Fubm90IGRl
Y2xhcmUgYSBjbGFzcyBuYW1lZCAnIiwgbmFtZS0+aW1wbCgpLCAiJyIpOworCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBjcmVhdGUgYSBNaXJhbmRhIGZ1bmN0aW9uIGhlcmUuCisgICAgZmFpbElm
RmFsc2UoY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSBhIGNsYXNzIHdpdGhvdXQgY29uc3Ry
dWN0b3IiKTsKKworICAgIEpTVGV4dFBvc2l0aW9uIGNsYXNzRW5kID0gbGFzdFRva2VuRW5kUG9z
aXRpb24oKTsKKworICAgIFRyZWVFeHByZXNzaW9uIGNsYXNzRGVjbHJhdGlvbiA9IGNvbnRleHQu
Y3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwgKm5hbWUsIGNvbnN0cnVjdG9yLCBjbGFzc1N0
YXJ0LCBjbGFzc1N0YXJ0ICsgMSwgY2xhc3NFbmQpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZUNsYXNzRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgKm5hbWUsIGNsYXNzRGVjbHJhdGlvbiwgcGFy
ZW50Q2xhc3MsIGluc3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9kcywgY2xhc3NTdGFydExpbmUs
IGNsYXNzRW5kTGluZSk7CisKKy8vICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3Rh
dGVtZW50KGxvY2F0aW9uLCBuYW1lLCBjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JQYXJhbWV0ZXJz
LCAwLCAwLCAwLCAwLCAwLCAwKTsKKy8vICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUVtcHR5U3Rh
dGVtZW50KGxvY2F0aW9uKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3Rl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VD
bGFzc0luZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVp
cmVtZW50cywgY29uc3QgSWRlbnRpZmllciomIG5hbWUsCisgICAgVHJlZUV4cHJlc3Npb24mIHBh
cmVudENsYXNzLCBUcmVlRXhwcmVzc2lvbiYgY29uc3RydWN0b3IsIFRyZWVQcm9wZXJ0eUxpc3Qm
IGluc3RhbmNlTWV0aG9kcywgVHJlZVByb3BlcnR5TGlzdCYgc3RhdGljTWV0aG9kcykKK3sKKyAg
ICBBdXRvUG9wU2NvcGVSZWYgY2xhc3NTY29wZSh0aGlzLCBwdXNoU2NvcGUoKSk7CisgICAgY2xh
c3NTY29wZS0+c2V0U3RyaWN0TW9kZSgpOworCisgICAgaWYgKG1hdGNoKElERU5UKSkgeworICAg
ICAgICBuYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAgICAgIG5leHQoKTsKKyAgICAg
ICAgZmFpbElmRmFsc2UoY2xhc3NTY29wZS0+ZGVjbGFyZVZhcmlhYmxlKG5hbWUpLCAiJyIsIG5h
bWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgY2xhc3MgbmFtZSIpOworICAgIH0gZWxzZSBp
ZiAocmVxdWlyZW1lbnRzID09IEZ1bmN0aW9uTmVlZHNOYW1lKSB7CisvKiAgICAgICAgaWYgKG1h
dGNoKE9QRU5CUkFDS0VUKSB8fCBtYXRjaChFWFRFTkRTKSkKKyAgICAgICAgICAgIHNlbWFudGlj
RmFpbCgiY2xhc3Mgc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBuYW1lIik7Ki8KKyAgICAgICAgc2Vt
YW50aWNGYWlsdXJlRHVlVG9LZXl3b3JkKCJjbGFzcyBuYW1lIik7CisgICAgICAgIGZhaWxEdWVU
b1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKGNvbnN1bWUoRVhURU5EUykpIHsKKyAgICAgICAgcGFyZW50Q2xhc3MgPSBwYXJzZVByaW1h
cnlFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxzZShwYXJlbnRDbGFzcywg
IkNhbm5vdCBwYXJzZSB0aGUgcGFyZW50IGNsYXNzIG5hbWUiKTsKKyAgICB9CisKKyAgICBjb25z
dW1lT3JGYWlsKE9QRU5CUkFDRSwgIkV4cGVjdGVkIGFuIG9wZW5pbmcgJ3snIGF0IHRoZSBzdGFy
dCBvZiBhIGNsYXNzIGJvZHkiKTsKKworICAgIFRyZWVQcm9wZXJ0eUxpc3QgaW5zdGFuY2VNZXRo
b2RzVGFpbCA9IDA7CisgICAgVHJlZVByb3BlcnR5TGlzdCBzdGF0aWNNZXRob2RzVGFpbCA9IDA7
CisgICAgd2hpbGUgKCFtYXRjaChDTE9TRUJSQUNFKSkgeworICAgICAgICBpZiAobWF0Y2goU0VN
SUNPTE9OKSkKKyAgICAgICAgICAgIG5leHQoKTsKKworICAgICAgICBib29sIGlzU3RhdGljTWV0
aG9kID0gbWF0Y2goU1RBVElDVE9LRU4pOworICAgICAgICBpZiAoaXNTdGF0aWNNZXRob2QpCisg
ICAgICAgICAgICBuZXh0KCk7CisKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBhIGJpbmRp
bmcgaWRlbnRpZmllci4KKyAgICAgICAgaWYgKCFtYXRjaChJREVOVCkpIHsKKyAgICAgICAgICAg
IGZhaWxXaXRoTWVzc2FnZSgiRXhwZWN0ZWQgYW4gaW5kZW50aWZpZXIiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgSlNUb2tlbkxvY2F0aW9uIG1ldGhvZExvY2F0
aW9uKHRva2VuTG9jYXRpb24oKSk7CisgICAgICAgIHVuc2lnbmVkIG1ldGhvZFN0YXJ0ID0gdG9r
ZW5TdGFydCgpOworICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87
CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlv
bk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIHRo
aXMgbWV0aG9kIik7CisgICAgICAgIGZhaWxJZkZhbHNlKGluZm8ubmFtZSwgIm1ldGhvZCBtdXN0
IGhhdmUgYSBuYW1lIik7CisgICAgICAgIGZhaWxJZkZhbHNlKGRlY2xhcmVWYXJpYWJsZShpbmZv
Lm5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBtZXRob2QgbmFtZWQgJyIsIGluZm8ubmFtZS0+aW1w
bCgpLCAiJyIpOworCisgICAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvciA9ICFpc1N0YXRpY01ldGhv
ZCAmJiAqaW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yOworICAg
ICAgICBpZiAoaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgIGluZm8ubmFtZSA9IG5hbWU7IC8v
IEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/PworCisgICAgICAgIFRyZWVFeHByZXNzaW9uIG1ldGhv
ZCA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKG1ldGhvZExvY2F0aW9uLCBpbmZvLCBtZXRo
b2RTdGFydCk7CisgICAgICAgIGlmIChpc0NvbnN0cnVjdG9yKSB7CisgICAgICAgICAgICBzZW1h
bnRpY0ZhaWxJZlRydWUoY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbHJhdGUgbXVsdGlwbGUgY29u
c3RydWN0b3JzIGluIGEgc2luZ2xlIGNsYXNzIik7CisgICAgICAgICAgICBjb25zdHJ1Y3RvciA9
IG1ldGhvZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTeW50YXgg
ZXJyb3Igd2hlbiBzdXBlcigpIGlzIGNhbGxlZAorICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZU
cnVlKCppbmZvLm5hbWUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAiQ2Fubm90
IGRlY2xyYXRlIGEgc3RhdGljIG1ldGhvZCBuYW1lZCAnIiwgaW5mby5uYW1lLT5pbXBsKCksICIn
Iik7CisgICAgICAgICAgICBUcmVlUHJvcGVydHkgcHJvcGVydHkgPSBjb250ZXh0LmNyZWF0ZVBy
b3BlcnR5KGluZm8ubmFtZSwgbWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCAvKiBjb21w
bGV0ZSAqLyBmYWxzZSk7CisKKyAgICAgICAgICAgIFRyZWVQcm9wZXJ0eUxpc3QmIGhlYWQgPSBp
c1N0YXRpY01ldGhvZCA/IHN0YXRpY01ldGhvZHMgOiBpbnN0YW5jZU1ldGhvZHM7CisgICAgICAg
ICAgICBUcmVlUHJvcGVydHlMaXN0JiB0YWlsID0gaXNTdGF0aWNNZXRob2QgPyBzdGF0aWNNZXRo
b2RzVGFpbCA6IGluc3RhbmNlTWV0aG9kc1RhaWw7CisKKyAgICAgICAgICAgIGlmICh0YWlsKQor
ICAgICAgICAgICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5TGlzdChtZXRob2RM
b2NhdGlvbiwgcHJvcGVydHksIHRhaWwpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgaGVhZCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KG1ldGhvZExvY2F0aW9uLCBw
cm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgdGFpbCA9IGhlYWQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJBQ0UsICJFeHBlY3Rl
ZCBhIGNsb3NpbmcgJ30nIGFmdGVyIGEgY2xhc3MgYm9keSIpOworCisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHN0cnVjdCBMYWJlbEluZm8gewpAQCAtMTc5OSwxMyArMTkxMSw2IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZVByb3BlcnR5KFRyZWVCCiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQcm9wZXJ0
eShpZGVudCwgbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgY29tcGxldGUpOwogICAgICAg
ICB9CiAgICAgICAgIGZhaWxJZkZhbHNlKHdhc0lkZW50LCAiRXhwZWN0ZWQgYW4gaWRlbnRpZmll
ciBhcyBwcm9wZXJ0eSBuYW1lIik7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGFjY2Vzc29y
TmFtZSA9IDA7Ci0gICAgICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcmFtZXRlcnMgPSAw
OwotICAgICAgICBUcmVlRnVuY3Rpb25Cb2R5IGJvZHkgPSAwOwotICAgICAgICB1bnNpZ25lZCBv
cGVuQnJhY2VPZmZzZXQgPSAwOwotICAgICAgICB1bnNpZ25lZCBjbG9zZUJyYWNlT2Zmc2V0ID0g
MDsKLSAgICAgICAgaW50IGJvZHlTdGFydExpbmUgPSAwOwotICAgICAgICB1bnNpZ25lZCBib2R5
U3RhcnRDb2x1bW4gPSAwOwogICAgICAgICBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZTsKICAgICAg
ICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZXQpCiAgICAgICAgICAgICB0
eXBlID0gUHJvcGVydHlOb2RlOjpHZXR0ZXI7CkBAIC0xODIzLDE2ICsxOTI4LDE3IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZVByb3BlcnR5KFRyZWVCCiAgICAgICAgICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9rZW4o
KTsKICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAg
ICAgICAgIG5leHQoKTsKKyAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBp
bmZvOwogICAgICAgICBpZiAodHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlcikgewogICAgICAg
ICAgICAgZmFpbElmRmFsc2UobWF0Y2goT1BFTlBBUkVOKSwgIkV4cGVjdGVkIGEgcGFyYW1ldGVy
IGxpc3QgZm9yIGdldHRlciBkZWZpbml0aW9uIik7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZSgo
cGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgR2V0dGVy
TW9kZSwgZmFsc2UsIGFjY2Vzc29yTmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zm
c2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4pKSwg
IkNhbm5vdCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOworICAgICAgICAgICAgZmFpbElmRmFs
c2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEdl
dHRlck1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRlZmluaXRpb24i
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoKE9QRU5Q
QVJFTiksICJFeHBlY3RlZCBhIHBhcmFtZXRlciBsaXN0IGZvciBzZXR0ZXIgZGVmaW5pdGlvbiIp
OwotICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1
bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBhY2Nlc3Nvck5hbWUsIHBh
cmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0
YXJ0TGluZSwgYm9keVN0YXJ0Q29sdW1uKSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRp
b24iKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0
LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBTZXR0ZXJNb2RlLCBmYWxzZSwgaW5mbykpLCAiQ2Fu
bm90IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN0
cmluZ1Byb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdldHRl
ck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUsIGNvbXBsZXRlLCBzdHJpbmdQcm9wZXJ0
eU5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNl
dCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lLCBib2R5U3RhcnRD
b2x1bW4sIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOwotICAgICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9w
YXJzZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUsIGNvbXBsZXRlLCBudW1lcmljUHJvcGVydHlOYW1l
LCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJv
ZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgYm9keVN0YXJ0Q29sdW1u
LCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUsIGNvbXBsZXRlLCBz
dHJpbmdQcm9wZXJ0eU5hbWUsIGluZm8sIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOworICAg
ICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0X2Nh
c3Q8Vk0qPihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUsIGNvbXBsZXRlLCBu
dW1lcmljUHJvcGVydHlOYW1lLCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKICAg
ICB9CiAgICAgY2FzZSBOVU1CRVI6IHsKICAgICAgICAgZG91YmxlIHByb3BlcnR5TmFtZSA9IG1f
dG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlOwpAQCAtMjE3MiwyMCArMjI3OCwyMCBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZU1lbWJlckV4cHJlcwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIG5ld0NvdW50Kys7CiAg
ICAgfQotICAgIAorCisgICAgYm9vbCBiYXNlSXNTdXBlciA9IGZhbHNlOwogICAgIGlmIChtYXRj
aChGVU5DVElPTikpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9ICZtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKLSAgICAgICAgVHJlZUZvcm1hbFBhcmFtZXRl
ckxpc3QgcGFyYW1ldGVycyA9IDA7Ci0gICAgICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9IDA7
Ci0gICAgICAgIHVuc2lnbmVkIG9wZW5CcmFjZU9mZnNldCA9IDA7Ci0gICAgICAgIHVuc2lnbmVk
IGNsb3NlQnJhY2VPZmZzZXQgPSAwOwotICAgICAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7Ci0g
ICAgICAgIHVuc2lnbmVkIGJvZHlTdGFydENvbHVtbiA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGZ1
bmN0aW9uS2V5d29yZFN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgICAgICBsb2NhdGlvbiA9IHRv
a2VuTG9jYXRpb24oKTsKICAgICAgICAgbmV4dCgpOwotICAgICAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25N
b2RlLCBmYWxzZSwgbmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9z
ZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4pKSwgIkNhbm5vdCBw
YXJzZSBmdW5jdGlvbiBleHByZXNzaW9uIik7Ci0gICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0
ZUZ1bmN0aW9uRXhwcihsb2NhdGlvbiwgbmFtZSwgYm9keSwgcGFyYW1ldGVycywgb3BlbkJyYWNl
T2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xhc3RUb2tlbkVuZFBv
c2l0aW9uLmxpbmUsIGJvZHlTdGFydENvbHVtbiwgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOworICAg
ICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CisgICAgICAgIGluZm8u
bmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICAgICAgZmFp
bElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVu
dHMsIEZ1bmN0aW9uTW9kZSwgZmFsc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBl
eHByZXNzaW9uIik7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihs
b2NhdGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOworICAgIH0gZWxzZSBpZiAobWF0
Y2goU1VQRVIpKSB7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LnN1cGVyRXhwcihsb2NhdGlvbik7
CisgICAgICAgIGJhc2VJc1N1cGVyID0gdHJ1ZTsKKyAgICAgICAgbmV4dCgpOwogICAgIH0gZWxz
ZQogICAgICAgICBiYXNlID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAK
QEAgLTIyMDEsNiArMjMwNyw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4
cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzCiAgICAgICAgICAg
ICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9hc3NpZ25tZW50Q291bnQ7CiAgICAgICAgICAg
ICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKICAg
ICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHN1YnNjcmlwdCBl
eHByZXNzaW9uIik7CisgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgICAgICAg
ICAgZmFpbElmVHJ1ZShpbml0aWFsQXNzaWdubWVudHMgfHwgbV9hc3NpZ25tZW50Q291bnQsICJD
YW5ub3QgYXNzaWduIGEgdmFsdWUgdG8gc3VwZXIiKTsKICAgICAgICAgICAgIGJhc2UgPSBjb250
ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3MobG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBpbml0aWFs
QXNzaWdubWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVz
c2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIGhhbmRsZVByb2R1Y3Rp
b25PckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIsICJlbmQiLCAic3Vic2NyaXB0IGV4cHJlc3Npb24i
KTsKICAgICAgICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKQEAgLTIyMTksNiAr
MjMyNyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzCiAgICAgICAgICAgICAgICAgSlNUZXh0
UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAg
ICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0
LCBBbGxvd1NwcmVhZCk7CiAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRzLCAi
Q2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IGlmIGJhc2VJc1N1cGVyOiBmYWlsSWZGYWxzZShpc0NvbnN0cnVjdG9yLCAiQ2Fubm90IGNhbGwg
c3VwZXIoKSBpbiB0aGlzIGZ1bmN0aW9uIikuCiAgICAgICAgICAgICAgICAgYmFzZSA9IGNvbnRl
eHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVz
c2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKQEAgLTIy
MzYsOCArMjM0NSwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
aW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlcwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgZ290byBlbmRNZW1iZXJFeHByZXNzaW9uOwogICAgICAgICB9CisgICAg
ICAgIGJhc2VJc1N1cGVyID0gZmFsc2U7CiAgICAgfQogZW5kTWVtYmVyRXhwcmVzc2lvbjoKKy8v
ICAgIGZhaWxJZlRydWUoYmFzZUlzU3VwZXIgJiYgIW5ld0NvdW50LCAiQ2Fubm90IHJlZmVyZW5j
ZSBzdXBlciIpOwogICAgIHdoaWxlIChuZXdDb3VudC0tKQogICAgICAgICBiYXNlID0gY29udGV4
dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBleHByZXNzaW9uU3RhcnQsIGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCkpOwogICAgIHJldHVybiBiYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmgKaW5kZXggNzY0ZTNkMy4uNzc2ODg4NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTm9kZXMuaCIKICNp
bmNsdWRlICJQYXJzZXJBcmVuYS5oIgogI2luY2x1ZGUgIlBhcnNlckVycm9yLmgiCisjaW5jbHVk
ZSAiUGFyc2VyRnVuY3Rpb25JbmZvLmgiCiAjaW5jbHVkZSAiUGFyc2VyVG9rZW5zLmgiCiAjaW5j
bHVkZSAiU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlckNhY2hlLmgi
CkBAIC03Nyw3ICs3OCw3IEBAIENPTVBJTEVfQVNTRVJUKExhc3RVbnRhZ2dlZFRva2VuIDwgNjQs
IExlc3NUaGFuNjRVbnRhZ2dlZFRva2Vucyk7CiAKIGVudW0gU291cmNlRWxlbWVudHNNb2RlIHsg
Q2hlY2tGb3JTdHJpY3RNb2RlLCBEb250Q2hlY2tGb3JTdHJpY3RNb2RlIH07CiBlbnVtIEZ1bmN0
aW9uUmVxdWlyZW1lbnRzIHsgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25OZWVkc05h
bWUgfTsKLWVudW0gRnVuY3Rpb25QYXJzZU1vZGUgeyBGdW5jdGlvbk1vZGUsIEdldHRlck1vZGUs
IFNldHRlck1vZGUgfTsKK2VudW0gRnVuY3Rpb25QYXJzZU1vZGUgeyBGdW5jdGlvbk1vZGUsIEdl
dHRlck1vZGUsIFNldHRlck1vZGUsIE1ldGhvZE1vZGUgfTsKIGVudW0gRGVjb25zdHJ1Y3Rpb25L
aW5kIHsKICAgICBEZWNvbnN0cnVjdFRvVmFyaWFibGVzLAogICAgIERlY29uc3RydWN0VG9QYXJh
bWV0ZXJzLApAQCAtNjkyLDYgKzY5Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgcGFyc2VTb3VyY2VFbGVtZW50
cyhUcmVlQnVpbGRlciYsIFNvdXJjZUVsZW1lbnRzTW9kZSk7CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiwg
Y29uc3QgSWRlbnRpZmllciomIGRpcmVjdGl2ZSwgdW5zaWduZWQqIGRpcmVjdGl2ZUxpdGVyYWxM
ZW5ndGggPSAwKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
bnQgcGFyc2VDbGFzc0RlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJik7CiAgICAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihU
cmVlQnVpbGRlciYpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRl
bWVudCBwYXJzZVZhckRlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJik7CiAgICAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlQ29uc3REZWNsYXJhdGlvbihUcmVl
QnVpbGRlciYpOwpAQCAtNzMzLDcgKzczNSwxMCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4g
Y3JlYXRlQmluZGluZ1BhdHRlcm4oVHJlZUJ1aWxkZXImLCBEZWNvbnN0cnVjdGlvbktpbmQsIGNv
bnN0IElkZW50aWZpZXImLCBpbnQgZGVwdGgsIEpTVG9rZW4pOwogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGFy
c2VEZWNvbnN0cnVjdGlvblBhdHRlcm4oVHJlZUJ1aWxkZXImLCBEZWNvbnN0cnVjdGlvbktpbmQs
IGludCBkZXB0aCA9IDApOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJf
SU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gdHJ5UGFyc2VEZWNvbnN0cnVjdGlvblBh
dHRlcm5FeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYs
IEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSwgYm9vbCBuYW1lSXNJbkNv
bnRhaW5pbmdTY29wZSwgY29uc3QgSWRlbnRpZmllciomLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlz
dCYsIFRyZWVGdW5jdGlvbkJvZHkmLCB1bnNpZ25lZCYgb3BlbkJyYWNlT2Zmc2V0LCB1bnNpZ25l
ZCYgY2xvc2VCcmFjZU9mZnNldCwgaW50JiBib2R5U3RhcnRMaW5lLCB1bnNpZ25lZCYgYm9keVN0
YXJ0Q29sdW1uKTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5M
SU5FIGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImLCBGdW5jdGlvblJlcXVpcmVt
ZW50cywgRnVuY3Rpb25QYXJzZU1vZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIFBh
cnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBhcnNlQ2xhc3NJbmZvKFRyZWVCdWlsZGVyJiwg
RnVuY3Rpb25SZXF1aXJlbWVudHMsIGNvbnN0IElkZW50aWZpZXIqJiwKKyAgICAgICAgVHJlZUV4
cHJlc3Npb24mIHBhcmVudENsYXNzLCBUcmVlRXhwcmVzc2lvbiYgY29uc3RydWN0b3IsIFRyZWVQ
cm9wZXJ0eUxpc3QmIGluc3RhbmNlTWV0aG9kcywgVHJlZVByb3BlcnR5TGlzdCYgc3RhdGljTWV0
aG9kcyk7CiAgICAgQUxXQVlTX0lOTElORSBpbnQgaXNCaW5hcnlPcGVyYXRvcihKU1Rva2VuVHlw
ZSk7CiAgICAgYm9vbCBhbGxvd0F1dG9tYXRpY1NlbWljb2xvbigpOwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJGdW5jdGlvbkluZm8uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyRnVuY3Rpb25JbmZvLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwODI0NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyRnVuY3Rpb25JbmZvLmgKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFyc2VyRnVuY3Rpb25JbmZvX2gKKyNkZWZp
bmUgUGFyc2VyRnVuY3Rpb25JbmZvX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4KK3N0cnVjdCBQYXJzZXJGdW5jdGlvbkluZm8geworICAgIGNvbnN0
IElkZW50aWZpZXIqIG5hbWUgPSAwOworICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpGb3JtYWxQ
YXJhbWV0ZXJMaXN0IHBhcmFtZXRlcnMgPSAwOworICAgIHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpG
dW5jdGlvbkJvZHkgYm9keSA9IDA7CisgICAgdW5zaWduZWQgb3BlbkJyYWNlT2Zmc2V0ID0gMDsK
KyAgICB1bnNpZ25lZCBjbG9zZUJyYWNlT2Zmc2V0ID0gMDsKKyAgICBpbnQgYm9keVN0YXJ0TGlu
ZSA9IDA7CisgICAgaW50IGJvZHlFbmRMaW5lID0gMDsKKyAgICB1bnNpZ25lZCBib2R5U3RhcnRD
b2x1bW4gPSAwOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlclRva2Vucy5oCmluZGV4IGE2NzU4ZDAuLjRkOGM5NjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaApAQCAtNzUsNiArNzUsMTAgQEAgZW51
bSBKU1Rva2VuVHlwZSB7CiAgICAgRklOQUxMWSwKICAgICBERUJVR0dFUiwKICAgICBFTFNFLAor
ICAgIENMQVNTVE9LRU4sCisgICAgRVhURU5EUywKKyAgICBTVEFUSUNUT0tFTiwKKyAgICBTVVBF
UiwKICAgICBPUEVOQlJBQ0UgPSAwLAogICAgIENMT1NFQlJBQ0UsCiAgICAgT1BFTlBBUkVOLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAppbmRleCBmZDE0
NTIxLi4zOTNmNmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5
bnRheENoZWNrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENo
ZWNrZXIuaApAQCAtMjYsMTEgKzI2LDEyIEBACiAjaWZuZGVmIFN5bnRheENoZWNrZXJfaAogI2Rl
ZmluZSBTeW50YXhDaGVja2VyX2gKIAorI2luY2x1ZGUgIlBhcnNlckZ1bmN0aW9uSW5mby5oIgog
I2luY2x1ZGUgIkxleGVyLmgiCiAjaW5jbHVkZSAiWWFyclN5bnRheENoZWNrZXIuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7Ci0gICAgCisKIGNsYXNzIFN5bnRheENoZWNrZXIgewogcHVibGljOgogICAg
IHN0cnVjdCBCaW5hcnlFeHByQ29udGV4dCB7CkBAIC03MSw3ICs3Miw3IEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIFN5bnRheENoZWNrZXIgRnVuY3Rpb25Cb2R5QnVpbGRlcjsKICAgICBlbnVtIHsg
Tm9uZUV4cHIgPSAwLAogICAgICAgICBSZXNvbHZlRXZhbEV4cHIsIFJlc29sdmVFeHByLCBOdW1i
ZXJFeHByLCBTdHJpbmdFeHByLAotICAgICAgICBUaGlzRXhwciwgTnVsbEV4cHIsIEJvb2xFeHBy
LCBSZWdFeHBFeHByLCBPYmplY3RMaXRlcmFsRXhwciwKKyAgICAgICAgVGhpc0V4cHIsIFN1cGVy
RXhwciwgTnVsbEV4cHIsIEJvb2xFeHByLCBSZWdFeHBFeHByLCBPYmplY3RMaXRlcmFsRXhwciwK
ICAgICAgICAgRnVuY3Rpb25FeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIsCiAg
ICAgICAgIE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIs
CiAgICAgICAgIENvbmRpdGlvbmFsRXhwciwgQXNzaWdubWVudEV4cHIsIFR5cGVvZkV4cHIsCkBA
IC0xNDIsNiArMTQzLDEwIEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVVbmFy
eVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVu
YXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVZvaWQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJl
c3Npb25UeXBlIHRoaXNFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIFRoaXNF
eHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgc3VwZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYpIHsgcmV0dXJuIFRoaXNFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlU3VwZXJD
YWxsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mKSB7
IHJldHVybiBTdXBlckV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVTdXBlckJyYWNr
ZXRBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlv
biYpIHsgcmV0dXJuIFN1cGVyRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVN1cGVy
RG90QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9z
aXRpb24mKSB7IHJldHVybiBTdXBlckV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVS
ZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQpIHsg
cmV0dXJuIFJlc29sdmVFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0
ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsg
fQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgaW50KSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQpAQCAtMTU5LDcgKzE2
NCw3IEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVDb25kaXRpb25hbEV4cHIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBF
eHByZXNzaW9uVHlwZSkgeyByZXR1cm4gQ29uZGl0aW9uYWxFeHByOyB9CiAgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlQXNzaWduUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJ
ZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2ln
bm1lbnRFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRW1wdHlWYXJFeHByZXNzaW9u
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKSB7IHJldHVybiBBc3Np
Z25tZW50RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQorICAgIEV4cHJl
c3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCBpbnQpIHsgcmV0dXJuIEZ1bmN0
aW9uRXhwcjsgfQogICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGJvb2wpIHsgcmV0dXJuIEZ1
bmN0aW9uQm9keVJlc3VsdDsgfQogICAgIHZvaWQgc2V0RnVuY3Rpb25OYW1lU3RhcnQoaW50LCBp
bnQpIHsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHMoKSB7IHJldHVybiBBcmd1bWVudHNSZXN1
bHQ7IH0KQEAgLTE5Myw3ICsxOTgsOCBAQCBwdWJsaWM6CiAgICAgaW50IGNyZWF0ZUNsYXVzZShp
bnQsIGludCkgeyByZXR1cm4gQ2xhdXNlUmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUNsYXVzZUxp
c3QoaW50KSB7IHJldHVybiBDbGF1c2VMaXN0UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUNsYXVz
ZUxpc3QoaW50LCBpbnQpIHsgcmV0dXJuIENsYXVzZUxpc3RSZXN1bHQ7IH0KLSAgICBpbnQgY3Jl
YXRlRnVuY0RlY2xTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRp
ZmllciosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBT
dGF0ZW1lbnRSZXN1bHQ7IH0KKyAgICBpbnQgY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+
JiwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KKyAgICBpbnQgY3JlYXRlQ2xhc3NE
ZWNsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBF
eHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIFByb3BlcnR5TGlzdCwgUHJvcGVydHlMaXN0
LCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUJs
b2NrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQpIHsgcmV0
dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVFeHByU3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3Vs
dDsgfQogICAgIGludCBjcmVhdGVJZlN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBp
bnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQpAQCAtMjE4LDE0
ICsyMjQsMTQgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVEZWJ1Z2dlcihjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50
IGNyZWF0ZUNvbnN0U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBp
bnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBhcHBlbmRDb25zdERlY2wo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50KSB7IHJl
dHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KLSAgICBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRl
clByb3BlcnR5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBl
LCBib29sIHN0cmljdCwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQpCisgICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQ
cm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwg
Ym9vbCBzdHJpY3QsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9u
SW5mbzxTeW50YXhDaGVja2VyPiYsIHVuc2lnbmVkKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5h
bWUpOwogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0
eXBlKTsKICAgICAgICAgcmV0dXJuIFByb3BlcnR5KG5hbWUsIHR5cGUpOwogICAgIH0KLSAgICBQ
cm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEm
IHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1lLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCkKKyAgICBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5
KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1lLCBjb25z
dCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCkKICAgICB7CiAg
ICAgICAgIGlmICghc3RyaWN0KQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmll
cnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgK
aW5kZXggNTY5ZWU0Zi4uY2RhOWE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC0yMjAsNiArMjIwLDcgQEAKICAgICBtYWNy
byh5aWVsZCkKIAogI2RlZmluZSBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9Q
Uk9QRVJUWV9OQU1FKG1hY3JvKSBcCisgICAgbWFjcm8oaG9tZU9iamVjdCkgXAogICAgIG1hY3Jv
KGl0ZXJhdG9yKSBcCiAgICAgbWFjcm8oaXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8ocmVzb2x2
ZSkgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244964</attachid>
            <date>2015-01-19 21:09:30 -0800</date>
            <delta_ts>2015-01-20 23:09:27 -0800</delta_ts>
            <desc>Added ReferenceError for this inside derived class&apos; constructor</desc>
            <filename>native-class-3.patch</filename>
            <type>text/plain</type>
            <size>70563</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTdkNDIzMS4uNWQ5NmM5NWM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc3OCw2ICsyNzc4LDcgQEAKIAkJOTlFNDVB
MjExOEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFbmNvZGVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTlFNDVBMjIxOEExQjI1OTAwMjZEODhGIC8qIElucHV0Q3Vyc29yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Q3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk5RTQ1QTIzMThBMUIyNTkwMDI2RDg4RiAvKiBOb25kZXRlcm1pbmlzdGljSW5w
dXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9uZGV0ZXJtaW5pc3RpY0lu
cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCNDk1NEU4MUE2NjQwREIwMDI4
MTVBNiAvKiBQYXJzZXJGdW5jdGlvbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyRnVuY3Rp
b25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlFNzI5NDA5MTkwRjAzMDYw
MDFBOTFCNSAvKiBCdW5kbGVQYXRoLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gQnVuZGxlUGF0aC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUU3
Mjk0MEExOTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnVuZGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5RUE1QzdBMDE5MEYwNUQyMDA1MDhFQkUgLyogSW5pdGlhbGl6ZUxMVk1NYWMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSW5pdGlhbGl6ZUxMVk1NYWMuY3BwOyBw
YXRoID0gbGx2bS9Jbml0aWFsaXplTExWTU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00MTQxLDYgKzQxNDIsNyBAQAogCQkJCTkzMDUyQzMyMEZCNzkyMTkwMDQ4RkRDMyAv
KiBQYXJzZXJBcmVuYS5jcHAgKi8sCiAJCQkJOTMwNTJDMzMwRkI3OTIxOTAwNDhGREMzIC8qIFBh
cnNlckFyZW5hLmggKi8sCiAJCQkJMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVy
cm9yLmggKi8sCisJCQkJOUI0OTU0RTgxQTY2NDBEQjAwMjgxNUE2IC8qIFBhcnNlckZ1bmN0aW9u
SW5mby5oICovLAogCQkJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5o
ICovLAogCQkJCTY1MzAzRDYzMTQ0N0I5RTEwMEQzRjkwNCAvKiBQYXJzZXJUb2tlbnMuaCAqLywK
IAkJCQk4NjlFQkNCNjBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAppbmRleCA1Mzc4ZWU4Li44ZWE0MDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtNTg4
LDYgKzU4OCwyOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6dW5jaGVja2VkTG9j
YWxBcmd1bWVudHNSZWdpc3RlcigpCiAgICAgcmV0dXJuIG1fbG9jYWxBcmd1bWVudHNSZWdpc3Rl
cjsKIH0KIAorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnRoaXNJc0luaXRpYWxpemVk
KCkKK3sKKyAgICBBU1NFUlQoaXNDb25zdHJ1Y3RvcigpKTsKKyAgICBpZiAoIW1fdGhpc0luaXRp
YWxpemVkU3RhdGUpIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBjYWxsZWU7CisgICAgICAgIGNhbGxl
ZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBudWxsUmVnID0gZW1pdExvYWQobmV3VGVtcG9yYXJ5KCksIGpzTnVsbCgpKTsKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGNvbnN0cnVjdG9yS2luZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBv
cmFyeSgpLCAmY2FsbGVlLCBwcm9wZXJ0eU5hbWVzKCkuaWQpOworICAgICAgICBtX3RoaXNJbml0
aWFsaXplZFN0YXRlID0gLy9lbWl0TG9hZChtX3RoaXNJbml0aWFsaXplZFN0YXRlLmdldCgpLCBm
YWxzZSk7CisgICAgICAgIGVtaXRFcXVhbGl0eU9wKG9wX3N0cmljdGVxLCBuZXdUZW1wb3Jhcnko
KSwgbnVsbFJlZy5nZXQoKSwgY29uc3RydWN0b3JLaW5kLmdldCgpKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fdGhpc0luaXRpYWxpemVkU3RhdGUuZ2V0KCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmRpZEluaXRpYWxpemVUaGlzKCkKK3sKKyAgICBBU1NFUlQoaXNDb25zdHJ1Y3Rvcigp
KTsKKyAgICBpZiAoIW1fdGhpc0luaXRpYWxpemVkU3RhdGUpCisgICAgICAgIG1fdGhpc0luaXRp
YWxpemVkU3RhdGUgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICBlbWl0TG9hZChtX3RoaXNJbml0aWFs
aXplZFN0YXRlLmdldCgpLCBqc0Jvb2xlYW4odHJ1ZSkpOworfQorCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6Y3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoUmVnaXN0ZXJJRCog
cmVnKQogewogICAgIGlmICghcmVnLT52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKaW5kZXggMTkxYjA2NC4uNjBjMTFiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMjkwLDcgKzI5
MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBSZXR1cm5zIHRoZSByZWdpc3Rl
ciBzdG9yaW5nICJ0aGlzIgogICAgICAgICBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIoKSB7IHJl
dHVybiAmbV90aGlzUmVnaXN0ZXI7IH0KLSAgICAgICAgCisgICAgICAgIFJlZ2lzdGVySUQqIHRo
aXNJc0luaXRpYWxpemVkKCk7CisgICAgICAgIHZvaWQgZGlkSW5pdGlhbGl6ZVRoaXMoKTsKKyAg
ICAgICAgYm9vbCBoYXNTdXBlcmNsYXNzKCk7CisKICAgICAgICAgUmVnaXN0ZXJJRCogc2NvcGVS
ZWdpc3RlcigpIHsgcmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsgfQogCiAgICAgICAgIC8vIFJldHVy
bnMgdGhlIG5leHQgYXZhaWxhYmxlIHRlbXBvcmFyeSByZWdpc3Rlci4gUmVnaXN0ZXJzIHJldHVy
bmVkIGJ5CkBAIC03NzEsNiArNzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFNlZ21l
bnRlZFZlY3RvcjxMYWJlbCwgMzI+IG1fbGFiZWxzOwogICAgICAgICBMYWJlbFNjb3BlU3RvcmUg
bV9sYWJlbFNjb3BlczsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fbGFzdFZhcjsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fdGhpc0luaXRpYWxpemVkU3RhdGU7CiAgICAgICAg
IGludCBtX2ZpbmFsbHlEZXB0aDsKICAgICAgICAgaW50IG1fbG9jYWxTY29wZURlcHRoOwogICAg
ICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDkzZmIxOTEuLjZjNzQzNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAKQEAgLTEzOCw2ICsxMzgsMTMgQEAgUmVnaXN0ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QKICAgICBp
ZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiAwOwog
CisgICAgaWYgKGdlbmVyYXRvci5pc0NvbnN0cnVjdG9yKCkpIHsKKyAgICAgICAgUmVmUHRyPExh
YmVsPiB0aGlzSGFzQmVlbkluaXRpYWxpemVkID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0b3IudGhpc0lzSW5pdGlhbGl6ZWQo
KSwgdGhpc0hhc0JlZW5Jbml0aWFsaXplZC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
VGhyb3dSZWZlcmVuY2VFcnJvcigiQ2Fubm90IGFjY2VzcyB1bmluaXRpYWxpemVkIHRoaXMiKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0aGlzSGFzQmVlbkluaXRpYWxpemVkLmdldCgp
KTsKKyAgICB9CisKICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChkc3QsIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CiAgICAgaWYg
KGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBnZW5lcmF0b3IuZW1p
dFByb2ZpbGVUeXBlKGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSwgUHJvZmlsZVR5cGVCeXRlY29k
ZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwpAQCAtMTQ3LDYgKzE1NCw2MiBAQCBSZWdp
c3RlcklEKiBUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdXBlck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBTdXBlck5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKGRz
dCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUp
OworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdl
dEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVy
dHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHByb3RvUGFyZW50ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgaG9tZU9iamVjdC5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNj
b3JlUHJvdG8pOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KSwgcHJvdG9QYXJlbnQuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IpOworfQorCitzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdFN1cGVy
QmFzZUZvckNhbGxlZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQoreworICAgIFJlZ2lz
dGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1l
cygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0
QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhvbWVPYmplY3QuZ2V0KCksIGdlbmVyYXRv
ci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKTsKK30KKworLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIFN1cGVyQnJhY2tldEFjY2Vz
c29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obV9zdWJzY3JpcHQpOworICAgIGlmIChk
c3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBSZWdpc3RlcklEIGNhbGxlZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVl
KTsKKworICAgIAorCisgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKGRzdCwgJmNhbGxlZSAvKiBnZW5lcmF0b3Iuc2NvcGVSZWdpc3RlcigpICovKTsKK30KKwor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN1cGVyRG90QWNjZXNzb3JOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCogU3VwZXJE
b3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKG1faWRlbnQpOworICAgIGlm
IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBSZWdpc3RlcklEIGNhbGxlZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2Fs
bGVlKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBob21lT2JqZWN0ID0gZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgJmNhbGxlZSwgZ2VuZXJhdG9yLnBy
b3BlcnR5TmFtZXMoKS5ob21lT2JqZWN0UHJpdmF0ZU5hbWUpOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlVmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBob21lT2JqZWN0LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnVuZGVy
c2NvcmVQcm90byk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3Iu
dGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2VWYWx1ZS5nZXQoKSwgbV9pZGVudCk7Cit9CisKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGJvb2wgUmVzb2x2ZU5vZGU6OmlzUHVyZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yKSBjb25zdApAQCAtMjczLDMyICszMzYsMjUgQEAgQXJndW1l
bnRMaXN0Tm9kZSogQXJyYXlOb2RlOjp0b0FyZ3VtZW50TGlzdChQYXJzZXJBcmVuYSYgcGFyc2Vy
QXJlbmEsIGludCBsaW5lTnUKIAogUmVnaXN0ZXJJRCogT2JqZWN0TGl0ZXJhbE5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7
Ci0gICAgIGlmICghbV9saXN0KSB7Ci0gICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25v
cmVkUmVzdWx0KCkpCi0gICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXROZXdPYmplY3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSk7Ci0g
ICAgIH0KLSAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fbGlzdCk7CisgICAg
aWYgKCFtX2xpc3QpIHsKKyAgICAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3Vs
dCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dE5ld09iamVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpKTsKKyAgICB9CisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IG5ld09iaiA9IGdlbmVyYXRvci5lbWl0TmV3T2JqZWN0KGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5v
ZGUobmV3T2JqLmdldCgpLCBtX2xpc3QpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUHJvcGVydHlMaXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBuZXdPYmogPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgCi0gICAg
Z2VuZXJhdG9yLmVtaXROZXdPYmplY3QobmV3T2JqLmdldCgpKTsKLSAgICAKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gbmV3T2JqID0gZHN0OworCiAgICAgLy8gRmFzdCBjYXNlOiB0aGlzIGxvb3Ag
anVzdCBoYW5kbGVzIHJlZ3VsYXIgdmFsdWUgcHJvcGVydGllcy4KICAgICBQcm9wZXJ0eUxpc3RO
b2RlKiBwID0gdGhpczsKLSAgICBmb3IgKDsgcCAmJiBwLT5tX25vZGUtPm1fdHlwZSA9PSBQcm9w
ZXJ0eU5vZGU6OkNvbnN0YW50OyBwID0gcC0+bV9uZXh0KSB7Ci0gICAgICAgIGlmIChwLT5tX25v
ZGUtPm1fbmFtZSkgewotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKG5l
d09iai5nZXQoKSwgKnAtPm1fbm9kZS0+bmFtZSgpLCBnZW5lcmF0b3IuZW1pdE5vZGUocC0+bV9u
b2RlLT5tX2Fzc2lnbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShw
LT5tX25vZGUtPm1fZXhwcmVzc2lvbik7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0
QnlWYWwobmV3T2JqLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9k
ZShwLT5tX25vZGUtPm1fYXNzaWduKSk7Ci0gICAgfQorICAgIGZvciAoOyBwICYmIHAtPm1fbm9k
ZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQ7IHAgPSBwLT5tX25leHQpCisgICAg
ICAgIGVtaXRDb25zdGFudFByb3BlcnR5KGdlbmVyYXRvciwgbmV3T2JqLmdldCgpLCBwLT5tX25v
ZGUpOwogCiAgICAgLy8gV2VyZSB0aGVyZSBhbnkgZ2V0L3NldCBwcm9wZXJ0aWVzPwogICAgIGlm
IChwKSB7CkBAIC0zMjQsMTIgKzM4MCw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAKICAg
ICAgICAgICAgIC8vIEhhbmRsZSByZWd1bGFyIHZhbHVlcy4KICAgICAgICAgICAgIGlmIChub2Rl
LT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudCkgewotICAgICAgICAgICAgICAgIGlm
IChub2RlLT5uYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJl
Y3RQdXRCeUlkKG5ld09iai5nZXQoKSwgKm5vZGUtPm5hbWUoKSwgZ2VuZXJhdG9yLmVtaXROb2Rl
KG5vZGUtPm1fYXNzaWduKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlO
YW1lID0gZ2VuZXJhdG9yLmVtaXROb2RlKHAtPm1fbm9kZS0+bV9leHByZXNzaW9uKTsKLSAgICAg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5VmFsKG5ld09iai5nZXQoKSwgcHJv
cGVydHlOYW1lLmdldCgpLCBnZW5lcmF0b3IuZW1pdE5vZGUocC0+bV9ub2RlLT5tX2Fzc2lnbikp
OworICAgICAgICAgICAgICAgIGVtaXRDb25zdGFudFByb3BlcnR5KGdlbmVyYXRvciwgbmV3T2Jq
LmdldCgpLCBub2RlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtMzcwLDE3ICs0MjEsNDggQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlM
aXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGUKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBTZXQgc3VwZXIgb24gZ2V0dGVyICYgc2V0dGVyLgorCiAgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dEdldHRlclNldHRlcihuZXdPYmouZ2V0KCksICpub2RlLT5uYW1lKCksIGdldHRl
clJlZy5nZXQoKSwgc2V0dGVyUmVnLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJl
dHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG5ld09iai5nZXQo
KSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworc3RhdGljIHZvaWQgZW1pdFB1dEhvbWVPYmplY3Qo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZnVuY3Rpb24sIFJlZ2lz
dGVySUQqIGhvbWVPYmplY3QpCit7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGZ1bmN0aW9u
LCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSwgaG9tZU9i
amVjdCk7Cit9CisKK3ZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdENvbnN0YW50UHJvcGVydHko
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogbmV3T2JqLCBQcm9wZXJ0
eU5vZGUqIG5vZGUpCit7CisgICAgaWYgKG5vZGUtPm5hbWUoKSkgeworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS0+bV9hc3NpZ24pOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQobmV3T2JqLCAqbm9kZS0+bmFtZSgp
LCB2YWx1ZS5nZXQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBFUzYgc3BlYyBzYXlzIHdlIHNob3Vs
ZCBvbmx5IHN0b3JlIGhvbWVPYmplY3Qgd2hlbiB0aGUgZnVuY3Rpb24gaGFzICJzdXBlciIKKyAg
ICAgICAgLy8gYnV0IHdlIGNhbid0IGVhc2lseSBkZXRlcm1pbmUgaXQgaGVyZSBzaW5jZSB3ZSBs
YXppbHkgZXZhbHVhdGUgdGhlIGZ1bmN0aW9uIGJvZHkuCisgICAgICAgIGlmIChtX2lzTWV0aG9k
TGlzdCkKKyAgICAgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgdmFsdWUuZ2V0
KCksIG5ld09iaik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCFtX2lzTWV0
aG9kTGlzdCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShub2RlLT5tX2V4cHJlc3Npb24pOworICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0
UHV0QnlWYWwobmV3T2JqLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9kZShu
b2RlLT5tX2Fzc2lnbikpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
QnJhY2tldEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBS
ZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIGlmIChtX2Jhc2UtPmlz
U3VwZXJOb2RlKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBnZW5lcmF0ZSB0aGUg
cHJvZmlsZXIgaW5mbz8KKyAgICAgICAgaWYgKG1fc3Vic2NyaXB0LT5pc1N0cmluZygpKSB7Cisg
ICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZCA9IHN0YXRpY19jYXN0PFN0cmluZ05vZGUq
PihtX3N1YnNjcmlwdCktPnZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGVtaXRTdXBlckJhc2VG
b3JDYWxsZWUoZ2VuZXJhdG9yKSwgaWQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGVtaXRT
dXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9yKSwgZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2Ny
aXB0KSk7CisgICAgfQogICAgIGlmIChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSAKICAgICAgICAg
JiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHMoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5v
ZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpCiAgICAgICAgICYmICFnZW5lcmF0b3Iuc3ltYm9s
VGFibGUoKS5zbG93QXJndW1lbnRzKCkpIHsKQEAgLTQyNSw3ICs1MDcsNyBAQCBSZWdpc3RlcklE
KiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcgogICAgIH0KIAogbm9uQXJndW1lbnRzUGF0aDoKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBiYXNlID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpID8gZW1pdFN1cGVyQmFzZUZv
ckNhbGxlZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwogICAgIFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZp
bmFsRGVzdCwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CkBAIC01MTIsMTIgKzU5NCwxNyBAQCBSZWdp
c3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVl
ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgIGdlbmVyYXRv
ci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsK
KyAgICBpZiAobV9leHByLT5pc1N1cGVyTm9kZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdExv
YWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnRoaXNSZWdpc3Rlcigp
KTsKKyAgICBlbHNlCisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5l
cmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRG
dW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgIGdl
bmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0
ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwog
ICAgIH0KKyAgICBpZiAobV9leHByLT5pc1N1cGVyTm9kZSgpKQorICAgICAgICBnZW5lcmF0b3Iu
ZGlkSW5pdGlhbGl6ZVRoaXMoKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC01NjMsMTMgKzY1
MCwxNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsCiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fYmFzZSk7CisgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNT
dXBlck5vZGUoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGJhc2VJc1N1cGVyID8g
ZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1f
YmFzZSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fc3Vic2NyaXB0KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4
cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgp
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5
VmFsKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVydHku
Z2V0KCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOworICAgIGlmIChiYXNl
SXNTdXBlcikKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1Jl
Z2lzdGVyKCksIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgZWxzZQorICAgICAgICBn
ZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQo
KSk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVl
LmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRz
LCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iu
dm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFs
SUQsIG51bGxwdHIpOwpAQCAtNTg1LDkgKzY3NiwxNCBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNh
bGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1l
bnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgIGdlbmVyYXRvci5lbWl0
Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2Jhc2UpOworICAgIGJvb2wgYmFz
ZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CisgICAgaWYgKGJhc2VJc1N1cGVyKQor
ICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
Z2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsKKyAgICBlbHNlCisgICAgICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2Jhc2UpOworCiAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVz
c2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50
KTsKKyAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGJhc2VJc1N1cGVy
ID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3IpIDogY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgbV9pZGVudCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVt
aXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0
aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwog
ICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVCeXRlY29k
ZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwpAQCAtOTI5LDYgKzEwMjUsOCBAQCBSZWdp
c3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgaWYgKG1fYmFzZS0+
aXNTdXBlck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdl
bmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIpOwogICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IHIwLmdldCgpLCByMS5nZXQoKSk7CiB9CiAKQEAgLTkzOSw2ICsxMDM3LDggQEAgUmVnaXN0ZXJJ
RCogRGVsZXRlRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9iYXNlKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9k
ZSgpKQorICAgICAgICByZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAi
Q2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5Iik7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0RGVsZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMC5nZXQoKSwg
bV9pZGVudCk7CiB9CiAKQEAgLTI3NDQsNyArMjg0NCw1NSBAQCBSZWdpc3RlcklEKiBGdW5jRXhw
ck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKgogewogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbihn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB0aGlzKTsKIH0KLSAgICAKKworLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENsYXNzRGVjbE5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgQ2xhc3NEZWNsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gY2xhc3NIZXJpdGFnZTsKKyAgICBpZiAobV9wYXJlbnRDbGFzc0V4cHJl
c3Npb24pIHsKKyAgICAgICAgY2xhc3NIZXJpdGFnZSA9IGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNsYXNzSGVyaXRhZ2UuZ2V0KCksIG1fcGFy
ZW50Q2xhc3NFeHByZXNzaW9uKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2hlbiBiYXNlIGNs
YXNzJyBjb25zdHVyY3RvciBpcyBuZXZlciBjYWxsZWQsIHdlIG5lZWQgdG8gcmV0dXJuIGFuICJ1
bmluaXRpYWxpemVkIiBvYmplY3QuCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvbnN0cnVjdG9y
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9jb25zdHJ1Y3RvckRlY2xhcmF0aW9uKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG90eXBlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgY29uc3RydWN0b3IuZ2V0KCksIGdlbmVyYXRvci5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKKyAgICBpZiAoIWNsYXNzSGVyaXRhZ2UgJiYgIW1fc3Rh
dGljTWV0aG9kcyAmJiAhbV9pbnN0YW5jZU1ldGhvZHMpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChjbGFzc0hlcml0YWdlKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90b1Bh
cmVudCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBj
bGFzc0hlcml0YWdlSXNOdWxsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0
cjxMYWJlbD4gcHJvdG9QYXJlbnRJc1NldCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3BfZXFf
bnVsbCwgcHJvdG9QYXJlbnQuZ2V0KCksIGNsYXNzSGVyaXRhZ2UuZ2V0KCkpLCBjbGFzc0hlcml0
YWdlSXNOdWxsLmdldCgpKTsKKworICAgICAgICAvLyBGSVhNRTogVGhyb3cgVHlwZUVycm9yIGlm
IGlzQ29uc3RydWN0b3IocGFyZW50Q2xhc3MpIGlzIGZhbHNlIG9yIGl0J3MgYSBnZW5lcmF0b3Ig
ZnVuY3Rpb24uCisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm90b1BhcmVudC5nZXQo
KSwgY2xhc3NIZXJpdGFnZS5nZXQoKSwgZ2VuZXJhdG9yLnZtKCktPnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSk7CisgICAgICAgIC8vIEZJWE1FOiBUaHJvdyBUeXBlRXJyb3IgaWYgVHlwZShwcm90
b1BhcmVudCkgaXMgbm90IE9iamVjdCBvciBudWxsLgorCisgICAgICAgIC8vIEVTNiBkcmFmdCBk
b2Vzbid0IHN0b3JlIGhvbWVPYmplY3Qgb24gdGhlIGNvbnN0cnVjdG9yIGJ1dCB0aGlzIHdvdWxk
IG1ha2Ugc3VwcG9ydGluZyAibmV3IHN1cGVyIiBpbiBjb25zdHJ1Y3RvciBjdW1iZXJzb21lLgor
ICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIGNvbnN0cnVjdG9yLmdldCgpLCBw
cm90b3R5cGUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQoY29u
c3RydWN0b3IuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuaWQsCisgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc0Jvb2xlYW4o
dHJ1ZSkpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQocHJvdG90eXBl
LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9Q
YXJlbnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAocHJvdG9QYXJlbnRJc1Nl
dC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChjbGFzc0hlcml0YWdlSXNO
dWxsLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKHByb3RvdHlw
ZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIGNsYXNz
SGVyaXRhZ2UuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwocHJvdG9QYXJl
bnRJc1NldC5nZXQoKSk7CisgICAgfQorCisgICAgaWYgKG1fc3RhdGljTWV0aG9kcykKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNvbnN0cnVjdG9yLmdldCgpLCBtX3N0YXRpY01ldGhvZHMp
OworCisgICAgaWYgKG1faW5zdGFuY2VNZXRob2RzKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE5v
ZGUocHJvdG90eXBlLmdldCgpLCBtX2luc3RhbmNlTWV0aG9kcyk7Cit9CisKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlIC0tLS0t
LS0tLS0tLS0tLS0tCiBSZWdpc3RlcklEKiBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCA5NGIz
MDYzLi4yYTJiYjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIu
aApAQCAtMTY2LDYgKzE2NiwzNCBAQCBwdWJsaWM6CiAgICAgICAgIHVzZXNUaGlzKCk7CiAgICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFRoaXNOb2RlKGxvY2F0aW9uKTsKICAgICB9
CisgICAgRXhwcmVzc2lvbk5vZGUqIHN1cGVyRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhbmQgY2FsbCB1c2VzU3VwZXIo
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgU3VwZXJOb2RlKGxvY2F0aW9u
KTsKKyAgICB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVN1cGVyQ2FsbChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHMsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZW5kKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50
cyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdGFydCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShk
aXZvdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShlbmQpOworICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBTdXBlck5vZGUobG9jYXRpb24pOworICAgIH0KKyAgICBFeHByZXNzaW9u
Tm9kZSogY3JlYXRlU3VwZXJCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBwcm9wZXJ0eSwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0
YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBl
bmQpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOworICAgICAgICBVTlVT
RURfUEFSQU0oc3RhcnQpOworICAgICAgICBVTlVTRURfUEFSQU0oZGl2b3QpOworICAgICAgICBV
TlVTRURfUEFSQU0oZW5kKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgU3Vw
ZXJCcmFja2V0QWNjZXNzb3JOb2RlKGxvY2F0aW9uLCBwcm9wZXJ0eSk7CisgICAgfQorICAgIEV4
cHJlc3Npb25Ob2RlKiBjcmVhdGVTdXBlckRvdEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eSwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBlbmQpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3RhcnQpOworICAgICAgICBV
TlVTRURfUEFSQU0oZGl2b3QpOworICAgICAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgU3VwZXJEb3RBY2Nlc3Nvck5vZGUobG9jYXRpb24s
ICpwcm9wZXJ0eSk7CisgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgewogICAgICAgICBpZiAobV92bS0+cHJv
cGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKQEAgLTI3MywxMSArMzAxLDEyIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgRXhwcmVzc2lvbk5vZGUq
IGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25z
dCBJZGVudGlmaWVyKiBuYW1lLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2Rl
KiBwYXJhbWV0ZXJzLCB1bnNpZ25lZCBvcGVuQnJhY2VPZmZzZXQsIHVuc2lnbmVkIGNsb3NlQnJh
Y2VPZmZzZXQsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUsIHVuc2lnbmVkIHN0
YXJ0Q29sdW1uLCB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFydCkKKyAgICBFeHByZXNzaW9u
Tm9kZSogY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZnVu
Y3Rpb25LZXl3b3JkU3RhcnQpCiAgICAgewotICAgICAgICBGdW5jRXhwck5vZGUqIHJlc3VsdCA9
IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCAqbmFtZSwgYm9keSwg
bV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9m
ZnNldCwgYm9keVN0YXJ0TGluZSwgc3RhcnRDb2x1bW4pLCBwYXJhbWV0ZXJzKTsKLSAgICAgICAg
Ym9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9m
ZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgYm9keS0+c2V0RnVuY3Rp
b25LZXl3b3JkU3RhcnQoZnVuY3Rpb25LZXl3b3JkU3RhcnQpOworICAgICAgICBGdW5jRXhwck5v
ZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCAq
aW5mby5uYW1lLCBpbmZvLmJvZHksCisgICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJl
c3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5i
b2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyk7Cisg
ICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5RW5k
TGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7Cisg
ICAgICAgIGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZnVuY3Rpb25LZXl3b3Jk
U3RhcnQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjkxLDIwICszMjAs
MjEgQEAgcHVibGljOgogICAgICAgICBib2R5LT5zZXRGdW5jdGlvbk5hbWVTdGFydChmdW5jdGlv
bk5hbWVTdGFydCk7CiAgICAgfQogICAgIAotICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUq
IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wsIGNvbnN0IElkZW50aWZpZXIqIG5h
bWUsIFBhcmFtZXRlck5vZGUqIHBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgdW5zaWdu
ZWQgb3BlbkJyYWNlT2Zmc2V0LCB1bnNpZ25lZCBjbG9zZUJyYWNlT2Zmc2V0LCBpbnQgYm9keVN0
YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lLCB1bnNpZ25lZCBib2R5U3RhcnRDb2x1bW4sIHVuc2ln
bmVkIGdldE9yU2V0U3RhcnRPZmZzZXQpCisgICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9kZSog
Y3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKKyAgICAgICAgY29uc3QgSWRlbnRp
ZmllciogbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1
bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0KQogICAgIHsKICAgICAgICAgQVNTRVJUKG5hbWUp
OwotICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0
aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwotICAgICAgICBib2R5
LT5zZXRJbmZlcnJlZE5hbWUoKm5hbWUpOwotICAgICAgICBib2R5LT5zZXRGdW5jdGlvbktleXdv
cmRTdGFydChnZXRPclNldFN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpuYW1lLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHBy
Tm9kZShsb2NhdGlvbiwgbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGJvZHks
IG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VP
ZmZzZXQsIGJvZHlTdGFydExpbmUsIGJvZHlTdGFydENvbHVtbiksIHBhcmFtcyksIHR5cGUpOwor
ICAgICAgICBpbmZvLmJvZHktPnNldExvYyhpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keUVu
ZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwor
ICAgICAgICBpbmZvLmJvZHktPnNldEluZmVycmVkTmFtZSgqbmFtZSk7CisgICAgICAgIGluZm8u
Ym9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JTZXRTdGFydE9mZnNldCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZSgqbmFtZSwgbmV3ICht
X3BhcnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3BlcnR5TmFtZXMt
Pm51bGxJZGVudGlmaWVyLCBpbmZvLmJvZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihp
bmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFy
dExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5wYXJhbWV0ZXJzKSwgdHlwZSk7CiAg
ICAgfQogICAgIAotICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9y
U2V0dGVyUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLCBk
b3VibGUgbmFtZSwgUGFyYW1ldGVyTm9kZSogcGFyYW1zLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5
LCB1bnNpZ25lZCBvcGVuQnJhY2VPZmZzZXQsIHVuc2lnbmVkIGNsb3NlQnJhY2VPZmZzZXQsIGlu
dCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUsIHVuc2lnbmVkIGJvZHlTdGFydENvbHVt
biwgdW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNldCkKKyAgICBORVZFUl9JTkxJTkUgUHJvcGVy
dHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEm
IHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5v
ZGU6OlR5cGUgdHlwZSwgYm9vbCwgZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5m
bzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNldCkKICAgICB7
Ci0gICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5kTGluZSwgbG9jYXRp
b24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7Ci0gICAgICAgIGJvZHkt
PnNldEZ1bmN0aW9uS2V5d29yZFN0YXJ0KGdldE9yU2V0U3RhcnRPZmZzZXQpOwotICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUocGFyc2VyQXJlbmEuaWRlbnRp
ZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKHZtLCBuYW1lKSwgbmV3IChtX3BhcnNl
ckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24sIHZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRl
bnRpZmllciwgYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZU9mZnNl
dCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgYm9keVN0YXJ0Q29sdW1uKSwgcGFy
YW1zKSwgdHlwZSk7CisgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGlu
ZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVT
dGFydE9mZnNldCk7CisgICAgICAgIGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQo
Z2V0T3JTZXRTdGFydE9mZnNldCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IFByb3BlcnR5Tm9kZShwYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lk
ZW50aWZpZXIodm0sIG5hbWUpLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2Nh
dGlvbiwgdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBpbmZvLmJvZHksIG1fc291
cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJy
YWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5m
by5wYXJhbWV0ZXJzKSwgdHlwZSk7CiAgICAgfQogCiAgICAgQXJndW1lbnRzTm9kZSogY3JlYXRl
QXJndW1lbnRzKCkgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBcmd1bWVudHNOb2RlKCk7
IH0KQEAgLTMzNiwxNCArMzY2LDIzIEBAIHB1YmxpYzoKICAgICBDbGF1c2VMaXN0Tm9kZSogY3Jl
YXRlQ2xhdXNlTGlzdChDYXNlQ2xhdXNlTm9kZSogY2xhdXNlKSB7IHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIENsYXVzZUxpc3ROb2RlKGNsYXVzZSk7IH0KICAgICBDbGF1c2VMaXN0Tm9kZSog
Y3JlYXRlQ2xhdXNlTGlzdChDbGF1c2VMaXN0Tm9kZSogdGFpbCwgQ2FzZUNsYXVzZU5vZGUqIGNs
YXVzZSkgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBDbGF1c2VMaXN0Tm9kZSh0YWlsLCBj
bGF1c2UpOyB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGdW5jRGVjbFN0YXRlbWVudChj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBG
dW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJzLCB1bnNpZ25l
ZCBvcGVuQnJhY2VPZmZzZXQsIHVuc2lnbmVkIGNsb3NlQnJhY2VPZmZzZXQsIGludCBib2R5U3Rh
cnRMaW5lLCBpbnQgYm9keUVuZExpbmUsIHVuc2lnbmVkIGJvZHlTdGFydENvbHVtbiwgdW5zaWdu
ZWQgZnVuY3Rpb25LZXl3b3JkU3RhcnQpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRnVuY0Rl
Y2xTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgUGFyc2Vy
RnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRT
dGFydCkKICAgICB7Ci0gICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9wYXJzZXJB
cmVuYSkgRnVuY0RlY2xOb2RlKGxvY2F0aW9uLCAqbmFtZSwgYm9keSwgbV9zb3VyY2VDb2RlLT5z
dWJFeHByZXNzaW9uKG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0
TGluZSwgYm9keVN0YXJ0Q29sdW1uKSwgcGFyYW1ldGVycyk7Ci0gICAgICAgIGlmICgqbmFtZSA9
PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpCisgICAgICAgIEZ1bmNEZWNsTm9kZSog
ZGVjbCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0RlY2xOb2RlKGxvY2F0aW9uLCAqaW5mby5u
YW1lLCBpbmZvLmJvZHksCisgICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24o
aW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3Rh
cnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyk7CisgICAgICAg
IGlmICgqaW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKICAgICAg
ICAgICAgIHVzZXNBcmd1bWVudHMoKTsKICAgICAgICAgbV9zY29wZS5tX2Z1bmNEZWNsYXJhdGlv
bnMuYXBwZW5kKGRlY2wtPmJvZHkoKSk7Ci0gICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRM
aW5lLCBib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFy
dE9mZnNldCk7Ci0gICAgICAgIGJvZHktPnNldEZ1bmN0aW9uS2V5d29yZFN0YXJ0KGZ1bmN0aW9u
S2V5d29yZFN0YXJ0KTsKKyAgICAgICAgaW5mby5ib2R5LT5zZXRMb2MoaW5mby5ib2R5U3RhcnRM
aW5lLCBpbmZvLmJvZHlFbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGlu
ZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFy
dChmdW5jdGlvbktleXdvcmRTdGFydCk7CisgICAgICAgIHJldHVybiBkZWNsOworICAgIH0KKwor
ICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUNsYXNzRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9uTm9k
ZSogY29uc3RydWN0b3JEZWNsYXJhdGlvbiwKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHBhcmVu
dENsYXNzRXhwcmVzc2lvbiwgUHJvcGVydHlMaXN0Tm9kZSogaW5zdGFuY2VNZXRob2RzLCBQcm9w
ZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkK
KyAgICB7CisgICAgICAgIENsYXNzRGVjbE5vZGUqIGRlY2wgPSBuZXcgKG1fcGFyc2VyQXJlbmEp
IENsYXNzRGVjbE5vZGUobG9jYXRpb24sIG5hbWUsIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24sIHBh
cmVudENsYXNzRXhwcmVzc2lvbiwgaW5zdGFuY2VNZXRob2RzLCBzdGF0aWNNZXRob2RzKTsKKyAg
ICAgICAgZGVjbC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZz
ZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiBkZWNsOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9LZXl3b3Jkcy50
YWJsZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvS2V5d29yZHMudGFibGUKaW5kZXgg
NTI3ZWFkYS4uNWNiNThhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9LZXl3b3Jkcy50YWJsZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0tleXdv
cmRzLnRhYmxlCkBAIC0xMCw4ICsxMCwxMCBAQCBmYWxzZQkJRkFMU0VUT0tFTgogYnJlYWsJCUJS
RUFLCiBjYXNlCQlDQVNFCiBjYXRjaAkJQ0FUQ0gKK2NsYXNzCQlDTEFTU1RPS0VOCiBjb25zdAkJ
Q09OU1RUT0tFTgogZGVmYXVsdAkJREVGQVVMVAorZXh0ZW5kcwkJRVhURU5EUwogZmluYWxseQkJ
RklOQUxMWQogZm9yCQlGT1IKIGluc3RhbmNlb2YJSU5TVEFOQ0VPRgpAQCAtMjgsNiArMzAsOCBA
QCBkbwkJRE8KIHdoaWxlCQlXSElMRQogZWxzZQkJRUxTRQogaW4JCUlOVE9LRU4KK3N0YXRpYwkJ
U1RBVElDVE9LRU4KK3N1cGVyICAgICAgICAgICBTVVBFUgogc3dpdGNoCQlTV0lUQ0gKIHRocm93
CQlUSFJPVwogdHJ5CQlUUlkKQEAgLTM2LDEyICs0MCw5IEBAIHdpdGgJCVdJVEgKIGRlYnVnZ2Vy
CURFQlVHR0VSCiAKICMgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCi1jbGFzcyAgICAgICAgICAg
UkVTRVJWRUQKIGVudW0gICAgICAgICAgICBSRVNFUlZFRAogZXhwb3J0ICAgICAgICAgIFJFU0VS
VkVECi1leHRlbmRzICAgICAgICAgUkVTRVJWRUQKIGltcG9ydCAgICAgICAgICBSRVNFUlZFRAot
c3VwZXIgICAgICAgICAgIFJFU0VSVkVECiAKICMgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgaW4g
c3RyaWN0IGNvZGUuCiBpbXBsZW1lbnRzICAgICAgUkVTRVJWRURfSUZfU1RSSUNUCkBAIC01MSw3
ICs1Miw2IEBAIHBhY2thZ2UgICAgICAgICBSRVNFUlZFRF9JRl9TVFJJQ1QKIHByaXZhdGUgICAg
ICAgICBSRVNFUlZFRF9JRl9TVFJJQ1QKIHByb3RlY3RlZCAgICAgICBSRVNFUlZFRF9JRl9TVFJJ
Q1QKIHB1YmxpYyAgICAgICAgICBSRVNFUlZFRF9JRl9TVFJJQ1QKLXN0YXRpYyAgICAgICAgICBS
RVNFUlZFRF9JRl9TVFJJQ1QKIHlpZWxkICAgICAgICAgICBSRVNFUlZFRF9JRl9TVFJJQ1QKIAog
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3Ry
dWN0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aAppbmRleCBkNDlkNDFmLi4zMDU2NjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaApAQCAtMTAyLDYgKzEwMiwyMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB7CiAgICAgfQogCisgICAgaW5saW5lIFN1cGVyTm9kZTo6U3VwZXJOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUo
bG9jYXRpb24pCisgICAgeworICAgIH0KKworICAgIGlubGluZSBTdXBlckJyYWNrZXRBY2Nlc3Nv
ck5vZGU6OlN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KQorICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKGxvY2F0aW9uKQorICAgICAgICAsIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkKKyAgICB7Cisg
ICAgfQorCisgICAgaW5saW5lIFN1cGVyRG90QWNjZXNzb3JOb2RlOjpTdXBlckRvdEFjY2Vzc29y
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKKyAgICAgICAgLCBtX2lk
ZW50KGlkZW50KQorICAgIHsKKyAgICB9CisKIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9k
ZShsb2NhdGlvbikKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQpAQCAtMTY4LDYgKzE4NSw3IEBA
IGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgY29uc3QgSWRlbnRpZmllCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRp
b24pCiAgICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAgICAgICwgbV9uZXh0KDApCisgICAgICAg
ICwgbV9pc01ldGhvZExpc3QoZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtMTc1LDYgKzE5Myw3
IEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9j
YXRpb24pCiAgICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAgICAgICwgbV9uZXh0KDApCisgICAg
ICAgICwgbV9pc01ldGhvZExpc3QoZmFsc2UpCiAgICAgewogICAgICAgICBsaXN0LT5tX25leHQg
PSB0aGlzOwogICAgIH0KQEAgLTc2OCw2ICs3ODcsMTkgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpS
ZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlm
aWUKICAgICAgICAgbV9ib2R5LT5maW5pc2hQYXJzaW5nKHNvdXJjZSwgcGFyYW1ldGVyLCBpZGVu
dCwgRnVuY3Rpb25EZWNsYXJhdGlvbik7CiAgICAgfQogCisgICAgaW5saW5lIENsYXNzRGVjbE5v
ZGU6OkNsYXNzRGVjbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24s
CisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBwYXJlbnRDbGFzc0V4cHJlc3Npb24sIFByb3BlcnR5
TGlzdE5vZGUqIGluc3RhbmNlTWV0aG9kcywgUHJvcGVydHlMaXN0Tm9kZSogc3RhdGljTWV0aG9k
cykKKyAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQorICAgICAgICAsIG1fbmFtZShu
YW1lKQorICAgICAgICAsIG1fY29uc3RydWN0b3JEZWNsYXJhdGlvbihjb25zdHJ1Y3RvckRlY2xh
cmF0aW9uKQorICAgICAgICAsIG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKHBhcmVudENsYXNzRXhw
cmVzc2lvbikKKyAgICAgICAgLCBtX2luc3RhbmNlTWV0aG9kcyhpbnN0YW5jZU1ldGhvZHMpCisg
ICAgICAgICwgbV9zdGF0aWNNZXRob2RzKHN0YXRpY01ldGhvZHMpCisgICAgeworICAgICAgICBp
ZiAoaW5zdGFuY2VNZXRob2RzKQorICAgICAgICAgICAgaW5zdGFuY2VNZXRob2RzLT5zZXRJc01l
dGhvZExpc3QoKTsKKyAgICB9CisKICAgICBpbmxpbmUgQ2FzZUNsYXVzZU5vZGU6OkNhc2VDbGF1
c2VOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByLCBTb3VyY2VFbGVtZW50cyogc3RhdGVtZW50cykK
ICAgICAgICAgOiBtX2V4cHIoZXhwcikKICAgICAgICAgLCBtX3N0YXRlbWVudHMoc3RhdGVtZW50
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCA2ZjU1YjQyLi4wMDgzZTc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0xNjMsNiArMTYzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1YnRyYWN0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzQm9vbGVhbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NwcmVhZEV4cHJlc3Np
b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBl
ck5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBl
bWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBMYWJlbCos
IExhYmVsKiwgRmFsbFRocm91Z2hNb2RlKTsKIApAQCAtNDI4LDYgKzQyOSwzNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwogICAgIH07CiAKKyAgICBj
bGFzcyBTdXBlck5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU3VwZXJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzU3VwZXJOb2RlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisgICAgfTsK
KworICAgIGNsYXNzIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBlckJyYWNrZXRBY2Nlc3Nvck5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCk7CisK
KyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisKKyAgICAgICAg
RXhwcmVzc2lvbk5vZGUqIG1fc3Vic2NyaXB0OworICAgIH07CisKKyAgICBjbGFzcyBTdXBlckRv
dEFjY2Vzc29yTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgcHVibGlj
OgorICAgICAgICBTdXBlckRvdEFjY2Vzc29yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBj
b25zdCBJZGVudGlmaWVyJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
b3ZlcnJpZGU7CisKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbV9pZGVudDsKKyAgICB9Owor
CiAgICAgY2xhc3MgUmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1
YmxpYzoKICAgICAgICAgUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCk7CkBAIC01MDQsMTEgKzUz
NCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUHJvcGVydHlMaXN0Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGUqKTsKICAgICAgICAgUHJvcGVydHlMaXN0Tm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGUqLCBQcm9wZXJ0eUxpc3ROb2Rl
Kik7CiAKKyAgICAgICAgdm9pZCBzZXRJc01ldGhvZExpc3QoKSB7IG1faXNNZXRob2RMaXN0ID0g
dHJ1ZTsgfQorCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKIAogICAgIHByaXZhdGU6
CisgICAgICAgIHZvaWQgZW1pdENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiwgUHJvcGVydHlOb2RlKik7CisKICAgICAgICAgUHJvcGVydHlOb2RlKiBtX25v
ZGU7CiAgICAgICAgIFByb3BlcnR5TGlzdE5vZGUqIG1fbmV4dDsKKyAgICAgICAgYm9vbCBtX2lz
TWV0aG9kTGlzdDsKICAgICB9OwogCiAgICAgY2xhc3MgT2JqZWN0TGl0ZXJhbE5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUgewpAQCAtMTcyMyw2ICsxNzU4LDIyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBtX2JvZHk7CiAgICAgfTsKIAorICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgaW5oZXJpdCBmcm9tIFRocm93YWJsZUV4cHJlc3Npb25EYXRhLgorICAg
IGNsYXNzIENsYXNzRGVjbE5vZGUgZmluYWwgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CisgICAg
cHVibGljOgorICAgICAgICBDbGFzc0RlY2xOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNv
bnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSogY29uc3RydWN0b3JEZWNsYXJhdGlvbiwK
KyAgICAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBwYXJlbnRDbGFzcywgUHJvcGVydHlMaXN0Tm9k
ZSogaW5zdGFuY2VNZXRob2RzLCBQcm9wZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOworCisgICAgICAgIElkZW50aWZp
ZXIgbV9uYW1lOworICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9jb25zdHJ1Y3RvckRlY2xhcmF0
aW9uOworICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9wYXJlbnRDbGFzc0V4cHJlc3Npb247Cisg
ICAgICAgIFByb3BlcnR5TGlzdE5vZGUqIG1faW5zdGFuY2VNZXRob2RzOworICAgICAgICBQcm9w
ZXJ0eUxpc3ROb2RlKiBtX3N0YXRpY01ldGhvZHM7CisgICAgfTsKKwogICAgIGNsYXNzIENhc2VD
bGF1c2VOb2RlIDogcHVibGljIFBhcnNlckFyZW5hRnJlZWFibGUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgQ2FzZUNsYXVzZU5vZGUoRXhwcmVzc2lvbk5vZGUqLCBTb3VyY2VFbGVtZW50cyogPSAw
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBjMjVmMjFhLi5k
YTQxNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0xMTUw
LDYgKzExNTAsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVN0YXRlbWVudChUcmUKICAgICBjYXNlIENPTlNUVE9L
RU46CiAgICAgICAgIHJlc3VsdCA9IHBhcnNlQ29uc3REZWNsYXJhdGlvbihjb250ZXh0KTsKICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDTEFTU1RPS0VOOgorICAgICAgICBmYWlsSWZGYWxzZSht
X3N0YXRlbWVudERlcHRoID09IDEsICJDbGFzcyBkZWNsYXJhdGlvbiBpcyBub3QgYWxsb3dlZCBp
biBhIGxleGljYWxseSBuZXN0ZWQgc3RhdGVtZW50Iik7CisgICAgICAgIHJlc3VsdCA9IHBhcnNl
Q2xhc3NEZWNsYXJhdGlvbihjb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGVU5D
VElPTjoKICAgICAgICAgZmFpbElmRmFsc2VJZlN0cmljdChtX3N0YXRlbWVudERlcHRoID09IDEs
ICJTdHJpY3QgbW9kZSBkb2VzIG5vdCBhbGxvdyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gYSBs
ZXhpY2FsbHkgbmVzdGVkIHN0YXRlbWVudCIpOwogICAgICAgICByZXN1bHQgPSBwYXJzZUZ1bmN0
aW9uRGVjbGFyYXRpb24oY29udGV4dCk7CkBAIC0xMjY3LDEzICsxMjcxLDE1IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUoRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSkK
ICAgICAgICAgcmV0dXJuICJzZXR0ZXIiOwogICAgIGNhc2UgRnVuY3Rpb25Nb2RlOgogICAgICAg
ICByZXR1cm4gImZ1bmN0aW9uIjsKKyAgICBjYXNlIE1ldGhvZE1vZGU6CisgICAgICAgIHJldHVy
biAibWV0aG9kIjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VG
dW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJl
cXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5p
bmdTY29wZSwgY29uc3QgSWRlbnRpZmllciomIG5hbWUsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0
JiBwYXJhbWV0ZXJzLCBUcmVlRnVuY3Rpb25Cb2R5JiBib2R5LCB1bnNpZ25lZCYgb3BlbkJyYWNl
T2Zmc2V0LCB1bnNpZ25lZCYgY2xvc2VCcmFjZU9mZnNldCwgaW50JiBib2R5U3RhcnRMaW5lLCB1
bnNpZ25lZCYgYm9keVN0YXJ0Q29sdW1uKQordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBi
b29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYgY29u
dGV4dCwgRnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9k
ZSBtb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBQYXJzZXJGdW5jdGlvbkluZm88
VHJlZUJ1aWxkZXI+JiBpbmZvKQogewogICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3Bl
KHRoaXMsIHB1c2hTY29wZSgpKTsKICAgICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7
CkBAIC0xMjgxLDE0ICsxMjg3LDE0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9v
bCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAgICAgY29u
c3QgSWRlbnRpZmllciogbGFzdEZ1bmN0aW9uTmFtZSA9IG1fbGFzdEZ1bmN0aW9uTmFtZTsKICAg
ICBtX2xhc3RGdW5jdGlvbk5hbWUgPSBudWxscHRyOwogICAgIGlmIChtYXRjaChJREVOVCkpIHsK
LSAgICAgICAgbmFtZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAgICBtX2xhc3RGdW5j
dGlvbk5hbWUgPSBuYW1lOworICAgICAgICBpbmZvLm5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVu
dDsKKyAgICAgICAgbV9sYXN0RnVuY3Rpb25OYW1lID0gaW5mby5uYW1lOwogICAgICAgICBuZXh0
KCk7CiAgICAgICAgIGlmICghbmFtZUlzSW5Db250YWluaW5nU2NvcGUpCi0gICAgICAgICAgICBm
YWlsSWZGYWxzZUlmU3RyaWN0KGZ1bmN0aW9uU2NvcGUtPmRlY2xhcmVWYXJpYWJsZShuYW1lKSwg
IiciLCBuYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkICIsIHN0cmluZ0ZvckZ1bmN0aW9u
TW9kZShtb2RlKSwgIiBuYW1lIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgICAgICBmYWlsSWZG
YWxzZUlmU3RyaWN0KGZ1bmN0aW9uU2NvcGUtPmRlY2xhcmVWYXJpYWJsZShpbmZvLm5hbWUpLCAi
JyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCAiLCBzdHJpbmdGb3JGdW5j
dGlvbk1vZGUobW9kZSksICIgbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwogICAgIH0gZWxzZSBpZiAo
cmVxdWlyZW1lbnRzID09IEZ1bmN0aW9uTmVlZHNOYW1lKSB7CiAgICAgICAgIGlmIChtYXRjaChP
UEVOUEFSRU4pICYmIG1vZGUgPT0gRnVuY3Rpb25Nb2RlKQotICAgICAgICAgICAgc2VtYW50aWNG
YWlsKCJGdW5jdGlvbiBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKKyAgICAgICAgICAg
IHNlbWFudGljRmFpbChzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIgbXVzdCBoYXZlIGEg
bmFtZSIpOwogICAgICAgICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tleXdvcmQoc3RyaW5nRm9yRnVu
Y3Rpb25Nb2RlKG1vZGUpLCAiIG5hbWUiKTsKICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRv
a2VuKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOTgsMTkgKzEzMDQsMTkgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1
bmN0aW9uSW5mbyhUcmVlQnVpbGQKICAgICAgICAgZmFpbFdpdGhNZXNzYWdlKCJFeHBlY3RlZCBh
biBvcGVuaW5nICcoJyBiZWZvcmUgYSAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIn
cyBwYXJhbWV0ZXIgbGlzdCIpOwogICAgIH0KICAgICBpZiAoIW1hdGNoKENMT1NFUEFSRU4pKSB7
Ci0gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCk7Ci0g
ICAgICAgIGZhaWxJZkZhbHNlKHBhcmFtZXRlcnMsICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVycyBm
b3IgdGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOworICAgICAgICBpbmZvLnBh
cmFtZXRlcnMgPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCk7CisgICAgICAgIGZhaWxJ
ZkZhbHNlKGluZm8ucGFyYW1ldGVycywgIkNhbm5vdCBwYXJzZSBwYXJhbWV0ZXJzIGZvciB0aGlz
ICIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShtb2RlKSk7CiAgICAgfQogICAgIGNvbnN1bWVPckZh
aWwoQ0xPU0VQQVJFTiwgIkV4cGVjdGVkIGEgJyknIG9yIGEgJywnIGFmdGVyIGEgcGFyYW1ldGVy
IGRlY2xhcmF0aW9uIik7CiAgICAgbWF0Y2hPckZhaWwoT1BFTkJSQUNFLCAiRXhwZWN0ZWQgYW4g
b3BlbmluZyAneycgYXQgdGhlIHN0YXJ0IG9mIGEgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1v
ZGUpLCAiIGJvZHkiKTsKICAgICAKLSAgICBvcGVuQnJhY2VPZmZzZXQgPSBtX3Rva2VuLm1fZGF0
YS5vZmZzZXQ7Ci0gICAgYm9keVN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAgIGJvZHlTdGFy
dENvbHVtbiA9IG1fdG9rZW4ubV9kYXRhLm9mZnNldCAtIG1fdG9rZW4ubV9kYXRhLmxpbmVTdGFy
dE9mZnNldDsKKyAgICBpbmZvLm9wZW5CcmFjZU9mZnNldCA9IG1fdG9rZW4ubV9kYXRhLm9mZnNl
dDsKKyAgICBpbmZvLmJvZHlTdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBpbmZvLmJvZHlT
dGFydENvbHVtbiA9IG1fdG9rZW4ubV9kYXRhLm9mZnNldCAtIG1fdG9rZW4ubV9kYXRhLmxpbmVT
dGFydE9mZnNldDsKICAgICBKU1Rva2VuTG9jYXRpb24gc3RhcnRMb2NhdGlvbih0b2tlbkxvY2F0
aW9uKCkpOwogICAgIAogICAgIC8vIElmIHdlIGtub3cgYWJvdXQgdGhpcyBmdW5jdGlvbiBhbHJl
YWR5LCB3ZSBjYW4gdXNlIHRoZSBjYWNoZWQgaW5mbyBhbmQgc2tpcCB0aGUgcGFyc2VyIHRvIHRo
ZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgotICAgIGlmIChjb25zdCBTb3VyY2VQcm92aWRlckNhY2hl
SXRlbSogY2FjaGVkSW5mbyA9IFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hlID8gZmlu
ZENhY2hlZEZ1bmN0aW9uSW5mbyhvcGVuQnJhY2VPZmZzZXQpIDogMCkgeworICAgIGlmIChjb25z
dCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogY2FjaGVkSW5mbyA9IFRyZWVCdWlsZGVyOjpDYW5V
c2VGdW5jdGlvbkNhY2hlID8gZmluZENhY2hlZEZ1bmN0aW9uSW5mbyhpbmZvLm9wZW5CcmFjZU9m
ZnNldCkgOiAwKSB7CiAgICAgICAgIC8vIElmIHdlJ3JlIGluIGEgc3RyaWN0IGNvbnRleHQsIHRo
ZSBjYWNoZWQgZnVuY3Rpb24gaW5mbyBtdXN0IHNheSBpdCB3YXMgc3RyaWN0IHRvby4KICAgICAg
ICAgQVNTRVJUKCFzdHJpY3RNb2RlKCkgfHwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CiAgICAg
ICAgIEpTVG9rZW5Mb2NhdGlvbiBlbmRMb2NhdGlvbjsKQEAgLTEzMTksMjEgKzEzMjUsMjEgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGQKICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQg
PSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlT2Zmc2V0OwogICAgICAgICBlbmRMb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlTGluZVN0YXJ0T2Zmc2V0OwogCi0g
ICAgICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA9IChlbmRMb2NhdGlvbi5saW5lID09
IGJvZHlTdGFydExpbmUpOworICAgICAgICBib29sIGVuZENvbHVtbklzT25TdGFydExpbmUgPSAo
ZW5kTG9jYXRpb24ubGluZSA9PSBpbmZvLmJvZHlTdGFydExpbmUpOwogICAgICAgICBBU1NFUlQo
ZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPj0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsK
ICAgICAgICAgdW5zaWduZWQgYm9keUVuZENvbHVtbiA9IGVuZENvbHVtbklzT25TdGFydExpbmUg
PwogICAgICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBtX3Rva2VuLm1fZGF0YS5s
aW5lU3RhcnRPZmZzZXQgOgogICAgICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBl
bmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMaW5l
U3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogCi0gICAg
ICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCBlbmRM
b2NhdGlvbiwgYm9keVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJp
Y3RNb2RlKTsKKyAgICAgICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHko
c3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluZm8uYm9keVN0YXJ0Q29sdW1uLCBib2R5RW5k
Q29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKICAgICAgICAgCiAgICAgICAgIGZ1bmN0
aW9uU2NvcGUtPnJlc3RvcmVGcm9tU291cmNlUHJvdmlkZXJDYWNoZShjYWNoZWRJbmZvKTsKICAg
ICAgICAgZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5l
ZWRzRnJlZVZhcmlhYmxlSW5mbyksICJQYXJzZXIgZXJyb3IiKTsKICAgICAgICAgCi0gICAgICAg
IGNsb3NlQnJhY2VPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlT2Zmc2V0OworICAgICAg
ICBpbmZvLmNsb3NlQnJhY2VPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlT2Zmc2V0Owog
Ci0gICAgICAgIGNvbnRleHQuc2V0RnVuY3Rpb25OYW1lU3RhcnQoYm9keSwgZnVuY3Rpb25OYW1l
U3RhcnQpOworICAgICAgICBjb250ZXh0LnNldEZ1bmN0aW9uTmFtZVN0YXJ0KGluZm8uYm9keSwg
ZnVuY3Rpb25OYW1lU3RhcnQpOwogICAgICAgICBtX3Rva2VuID0gY2FjaGVkSW5mby0+Y2xvc2VC
cmFjZVRva2VuKCk7CiAgICAgICAgIGlmIChlbmRDb2x1bW5Jc09uU3RhcnRMaW5lKQogICAgICAg
ICAgICAgbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNldCA9IGN1cnJlbnRMaW5lU3Rh
cnRPZmZzZXQ7CkBAIC0xMzQxLDIzICsxMzQ3LDI0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxk
CiAgICAgICAgIG1fbGV4ZXItPnNldE9mZnNldChtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0
LCBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgbV9sZXhlci0+
c2V0TGluZU51bWJlcihtX3Rva2VuLm1fbG9jYXRpb24ubGluZSk7CiAKLSAgICAgICAgY29udGV4
dC5zZXRFbmRPZmZzZXQoYm9keSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRFbmRPZmZzZXQoaW5mby5ib2R5LCBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCkp
OwogICAgICAgICAKICAgICAgICAgbmV4dCgpOworICAgICAgICBpbmZvLmJvZHlFbmRMaW5lID0g
bV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgbV9sYXN0RnVuY3Rpb25OYW1lID0gbGFzdEZ1bmN0aW9uTmFtZTsKICAgICBQYXJzZXJT
dGF0ZSBvbGRTdGF0ZSA9IHNhdmVTdGF0ZSgpOwotICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9k
eShjb250ZXh0KTsKKyAgICBpbmZvLmJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsK
ICAgICByZXN0b3JlU3RhdGUob2xkU3RhdGUpOwotICAgIGZhaWxJZkZhbHNlKGJvZHksICJDYW5u
b3QgcGFyc2UgdGhlIGJvZHkgb2YgdGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkp
OwotICAgIGNvbnRleHQuc2V0RW5kT2Zmc2V0KGJvZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQo
KSk7Ci0gICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1vZGUoKSAmJiBuYW1lKSB7CisgICAg
ZmFpbElmRmFsc2UoaW5mby5ib2R5LCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5IG9mIHRoaXMgIiwg
c3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsKKyAgICBjb250ZXh0LnNldEVuZE9mZnNldChp
bmZvLmJvZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7CisgICAgaWYgKGZ1bmN0aW9uU2Nv
cGUtPnN0cmljdE1vZGUoKSAmJiBpbmZvLm5hbWUpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bW9kZSA9PSBGdW5jdGlvbk1vZGUpOwotICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS0+
cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpuYW1lLCAiJyIsIG5hbWUtPmltcGwoKSwgIicg
aXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICBz
ZW1hbnRpY0ZhaWxJZlRydWUobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbmFtZSwgIici
LCBuYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0
IG1vZGUiKTsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1fdm0tPnByb3BlcnR5TmFtZXMt
PmFyZ3VtZW50cyA9PSAqaW5mby5uYW1lLCAiJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBu
b3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgIHNlbWFu
dGljRmFpbElmVHJ1ZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppbmZvLm5hbWUsICIn
IiwgaW5mby5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4g
c3RyaWN0IG1vZGUiKTsKICAgICB9Ci0gICAgY2xvc2VCcmFjZU9mZnNldCA9IG1fdG9rZW4ubV9k
YXRhLm9mZnNldDsKKyAgICBpbmZvLmNsb3NlQnJhY2VPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5v
ZmZzZXQ7CiAgICAgdW5zaWduZWQgY2xvc2VCcmFjZUxpbmUgPSBtX3Rva2VuLm1fZGF0YS5saW5l
OwogICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VMaW5lU3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1fZGF0
YS5saW5lU3RhcnRPZmZzZXQ7CiAgICAgCkBAIC0xMzY1LDI2ICsxMzcyLDI3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlv
bkluZm8oVHJlZUJ1aWxkCiAgICAgLy8gQW55IGZ1dHVyZSByZXBhcnNpbmcgY2FuIHRoZW4gc2tp
cCB0aGUgZnVuY3Rpb24uCiAgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtRnVuY3Rpb25MZW5n
dGhUb0NhY2hlID0gMTY7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGVJ
dGVtPiBuZXdJbmZvOwotICAgIGludCBmdW5jdGlvbkxlbmd0aCA9IGNsb3NlQnJhY2VPZmZzZXQg
LSBvcGVuQnJhY2VPZmZzZXQ7CisgICAgaW50IGZ1bmN0aW9uTGVuZ3RoID0gaW5mby5jbG9zZUJy
YWNlT2Zmc2V0IC0gaW5mby5vcGVuQnJhY2VPZmZzZXQ7CiAgICAgaWYgKFRyZWVCdWlsZGVyOjpD
YW5Vc2VGdW5jdGlvbkNhY2hlICYmIG1fZnVuY3Rpb25DYWNoZSAmJiBmdW5jdGlvbkxlbmd0aCA+
IG1pbmltdW1GdW5jdGlvbkxlbmd0aFRvQ2FjaGUpIHsKICAgICAgICAgU291cmNlUHJvdmlkZXJD
YWNoZUl0ZW1DcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKICAgICAgICAgcGFyYW1ldGVy
cy5mdW5jdGlvbk5hbWVTdGFydCA9IGZ1bmN0aW9uTmFtZVN0YXJ0OwogICAgICAgICBwYXJhbWV0
ZXJzLmNsb3NlQnJhY2VMaW5lID0gY2xvc2VCcmFjZUxpbmU7Ci0gICAgICAgIHBhcmFtZXRlcnMu
Y2xvc2VCcmFjZU9mZnNldCA9IGNsb3NlQnJhY2VPZmZzZXQ7CisgICAgICAgIHBhcmFtZXRlcnMu
Y2xvc2VCcmFjZU9mZnNldCA9IGluZm8uY2xvc2VCcmFjZU9mZnNldDsKICAgICAgICAgcGFyYW1l
dGVycy5jbG9zZUJyYWNlTGluZVN0YXJ0T2Zmc2V0ID0gY2xvc2VCcmFjZUxpbmVTdGFydE9mZnNl
dDsKICAgICAgICAgZnVuY3Rpb25TY29wZS0+ZmlsbFBhcmFtZXRlcnNGb3JTb3VyY2VQcm92aWRl
ckNhY2hlKHBhcmFtZXRlcnMpOwogICAgICAgICBuZXdJbmZvID0gU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW06OmNyZWF0ZShwYXJhbWV0ZXJzKTsKIAogICAgIH0KLSAgICBjb250ZXh0LnNldEZ1bmN0
aW9uTmFtZVN0YXJ0KGJvZHksIGZ1bmN0aW9uTmFtZVN0YXJ0KTsKKyAgICBjb250ZXh0LnNldEZ1
bmN0aW9uTmFtZVN0YXJ0KGluZm8uYm9keSwgZnVuY3Rpb25OYW1lU3RhcnQpOwogICAgIAogICAg
IGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0Zy
ZWVWYXJpYWJsZUluZm8pLCAiUGFyc2VyIGVycm9yIik7CiAgICAgbWF0Y2hPckZhaWwoQ0xPU0VC
UkFDRSwgIkV4cGVjdGVkIGEgY2xvc2luZyAnfScgYWZ0ZXIgYSAiLCBzdHJpbmdGb3JGdW5jdGlv
bk1vZGUobW9kZSksICIgYm9keSIpOwogICAgIAogICAgIGlmIChuZXdJbmZvKQotICAgICAgICBt
X2Z1bmN0aW9uQ2FjaGUtPmFkZChvcGVuQnJhY2VPZmZzZXQsIFdURjo6bW92ZShuZXdJbmZvKSk7
CisgICAgICAgIG1fZnVuY3Rpb25DYWNoZS0+YWRkKGluZm8ub3BlbkJyYWNlT2Zmc2V0LCBXVEY6
Om1vdmUobmV3SW5mbykpOwogICAgIAogICAgIG5leHQoKTsKKyAgICBpbmZvLmJvZHlFbmRMaW5l
ID0gbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xMzk1LDE3ICsxNDAzLDEyMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYQogICAgIEpTVG9r
ZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIHVuc2lnbmVkIGZ1bmN0
aW9uS2V5d29yZFN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgIG5leHQoKTsKKyAgICBQYXJzZXJG
dW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVu
Y3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBGdW5jdGlvbk1vZGUsIHRydWUs
IGluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7CisgICAgZmFpbElmRmFsc2Uo
aW5mby5uYW1lLCAiRnVuY3Rpb24gc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBuYW1lIik7CisgICAg
ZmFpbElmRmFsc2VJZlN0cmljdChkZWNsYXJlVmFyaWFibGUoaW5mby5uYW1lKSwgIkNhbm5vdCBk
ZWNsYXJlIGEgZnVuY3Rpb24gbmFtZWQgJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpbiBzdHJp
Y3QgbW9kZSIpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGxv
Y2F0aW9uLCBpbmZvLCBmdW5jdGlvbktleXdvcmRTdGFydCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBMZXhlclR5cGU+Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
bnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYg
Y29udGV4dCkKK3sKKyAgICBBU1NFUlQobWF0Y2goQ0xBU1NUT0tFTikpOworICAgIEpTVG9rZW5M
b2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOworICAgIEpTVGV4dFBvc2l0aW9uIGNs
YXNzU3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICB1bnNpZ25lZCBjbGFzc1N0YXJ0
TGluZSA9IHRva2VuTGluZSgpOworICAgIHVuc2lnbmVkIGNsYXNzRW5kTGluZSA9IDA7CisgICAg
bmV4dCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIG5hbWUgPSAwOwotICAgIFRyZWVGb3JtYWxQ
YXJhbWV0ZXJMaXN0IHBhcmFtZXRlcnMgPSAwOwotICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9
IDA7Ci0gICAgdW5zaWduZWQgb3BlbkJyYWNlT2Zmc2V0ID0gMDsKLSAgICB1bnNpZ25lZCBjbG9z
ZUJyYWNlT2Zmc2V0ID0gMDsKLSAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7Ci0gICAgdW5zaWdu
ZWQgYm9keVN0YXJ0Q29sdW1uID0gMDsKLSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbklu
Zm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwgdHJ1ZSwgbmFtZSwg
cGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5
U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9u
Iik7Ci0gICAgZmFpbElmRmFsc2UobmFtZSwgIkZ1bmN0aW9uIHN0YXRlbWVudHMgbXVzdCBoYXZl
IGEgbmFtZSIpOwotICAgIGZhaWxJZkZhbHNlSWZTdHJpY3QoZGVjbGFyZVZhcmlhYmxlKG5hbWUp
LCAiQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlvbiBuYW1lZCAnIiwgbmFtZS0+aW1wbCgpLCAiJyBp
biBzdHJpY3QgbW9kZSIpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVt
ZW50KGxvY2F0aW9uLCBuYW1lLCBib2R5LCBwYXJhbWV0ZXJzLCBvcGVuQnJhY2VPZmZzZXQsIGNs
b3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGlu
ZSwgYm9keVN0YXJ0Q29sdW1uLCBmdW5jdGlvbktleXdvcmRTdGFydCk7CisgICAgVHJlZUV4cHJl
c3Npb24gcGFyZW50Q2xhc3MgPSAwOworICAgIFRyZWVFeHByZXNzaW9uIGNvbnN0cnVjdG9yID0g
MDsKKyAgICBUcmVlUHJvcGVydHlMaXN0IGluc3RhbmNlTWV0aG9kcyA9IDA7CisgICAgVHJlZVBy
b3BlcnR5TGlzdCBzdGF0aWNNZXRob2RzID0gMDsKKy8vICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJM
aXN0IGNvbnN0cnVjdG9yUGFyYW1ldGVycyA9IDA7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlQ2xh
c3NJbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBuYW1lLCBwYXJlbnRDbGFzcywgY29u
c3RydWN0b3IsIGluc3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9kcykpLCAiQ2Fubm90IHBhcnNl
IHRoaXMgY2xhc3MiKTsKKyAgICBmYWlsSWZGYWxzZShuYW1lLCAiQ2xhc3Mgc3RhdGVtZW50cyBt
dXN0IGhhdmUgYSBuYW1lIik7CisgICAgZmFpbElmRmFsc2UoZGVjbGFyZVZhcmlhYmxlKG5hbWUp
LCAiQ2Fubm90IGRlY2xhcmUgYSBjbGFzcyBuYW1lZCAnIiwgbmFtZS0+aW1wbCgpLCAiJyIpOwor
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjcmVhdGUgYSBNaXJhbmRhIGZ1bmN0aW9uIGhlcmUu
CisgICAgZmFpbElmRmFsc2UoY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSBhIGNsYXNzIHdp
dGhvdXQgY29uc3RydWN0b3IiKTsKKworICAgIEpTVGV4dFBvc2l0aW9uIGNsYXNzRW5kID0gbGFz
dFRva2VuRW5kUG9zaXRpb24oKTsKKworICAgIFRyZWVFeHByZXNzaW9uIGNsYXNzRGVjbHJhdGlv
biA9IGNvbnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwgKm5hbWUsIGNvbnN0cnVj
dG9yLCBjbGFzc1N0YXJ0LCBjbGFzc1N0YXJ0ICsgMSwgY2xhc3NFbmQpOworICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZUNsYXNzRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgKm5hbWUsIGNsYXNzRGVj
bHJhdGlvbiwgcGFyZW50Q2xhc3MsIGluc3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9kcywgY2xh
c3NTdGFydExpbmUsIGNsYXNzRW5kTGluZSk7CisKKy8vICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZUZ1bmNEZWNsU3RhdGVtZW50KGxvY2F0aW9uLCBuYW1lLCBjb25zdHJ1Y3RvciwgY29uc3RydWN0
b3JQYXJhbWV0ZXJzLCAwLCAwLCAwLCAwLCAwLCAwKTsKKy8vICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUVtcHR5U3RhdGVtZW50KGxvY2F0aW9uKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExl
eGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VDbGFzc0luZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWly
ZW1lbnRzIHJlcXVpcmVtZW50cywgY29uc3QgSWRlbnRpZmllciomIG5hbWUsCisgICAgVHJlZUV4
cHJlc3Npb24mIHBhcmVudENsYXNzLCBUcmVlRXhwcmVzc2lvbiYgY29uc3RydWN0b3IsIFRyZWVQ
cm9wZXJ0eUxpc3QmIGluc3RhbmNlTWV0aG9kcywgVHJlZVByb3BlcnR5TGlzdCYgc3RhdGljTWV0
aG9kcykKK3sKKyAgICBBdXRvUG9wU2NvcGVSZWYgY2xhc3NTY29wZSh0aGlzLCBwdXNoU2NvcGUo
KSk7CisgICAgY2xhc3NTY29wZS0+c2V0U3RyaWN0TW9kZSgpOworCisgICAgaWYgKG1hdGNoKElE
RU5UKSkgeworICAgICAgICBuYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAgICAgIG5l
eHQoKTsKKyAgICAgICAgZmFpbElmRmFsc2UoY2xhc3NTY29wZS0+ZGVjbGFyZVZhcmlhYmxlKG5h
bWUpLCAiJyIsIG5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgY2xhc3MgbmFtZSIpOwor
ICAgIH0gZWxzZSBpZiAocmVxdWlyZW1lbnRzID09IEZ1bmN0aW9uTmVlZHNOYW1lKSB7CisvKiAg
ICAgICAgaWYgKG1hdGNoKE9QRU5CUkFDS0VUKSB8fCBtYXRjaChFWFRFTkRTKSkKKyAgICAgICAg
ICAgIHNlbWFudGljRmFpbCgiY2xhc3Mgc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBuYW1lIik7Ki8K
KyAgICAgICAgc2VtYW50aWNGYWlsdXJlRHVlVG9LZXl3b3JkKCJjbGFzcyBuYW1lIik7CisgICAg
ICAgIGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKGNvbnN1bWUoRVhURU5EUykpIHsKKyAgICAgICAgcGFyZW50Q2xhc3Mg
PSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICBmYWlsSWZGYWxzZShw
YXJlbnRDbGFzcywgIkNhbm5vdCBwYXJzZSB0aGUgcGFyZW50IGNsYXNzIG5hbWUiKTsKKyAgICB9
CisKKyAgICBjb25zdW1lT3JGYWlsKE9QRU5CUkFDRSwgIkV4cGVjdGVkIGFuIG9wZW5pbmcgJ3sn
IGF0IHRoZSBzdGFydCBvZiBhIGNsYXNzIGJvZHkiKTsKKworICAgIFRyZWVQcm9wZXJ0eUxpc3Qg
aW5zdGFuY2VNZXRob2RzVGFpbCA9IDA7CisgICAgVHJlZVByb3BlcnR5TGlzdCBzdGF0aWNNZXRo
b2RzVGFpbCA9IDA7CisgICAgd2hpbGUgKCFtYXRjaChDTE9TRUJSQUNFKSkgeworICAgICAgICBp
ZiAobWF0Y2goU0VNSUNPTE9OKSkKKyAgICAgICAgICAgIG5leHQoKTsKKworICAgICAgICBib29s
IGlzU3RhdGljTWV0aG9kID0gbWF0Y2goU1RBVElDVE9LRU4pOworICAgICAgICBpZiAoaXNTdGF0
aWNNZXRob2QpCisgICAgICAgICAgICBuZXh0KCk7CisKKyAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCBiZSBhIGJpbmRpbmcgaWRlbnRpZmllci4KKyAgICAgICAgaWYgKCFtYXRjaChJREVOVCkpIHsK
KyAgICAgICAgICAgIGZhaWxXaXRoTWVzc2FnZSgiRXhwZWN0ZWQgYW4gaW5kZW50aWZpZXIiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgSlNUb2tlbkxvY2F0aW9u
IG1ldGhvZExvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CisgICAgICAgIHVuc2lnbmVkIG1ldGhv
ZFN0YXJ0ID0gdG9rZW5TdGFydCgpOworICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1
aWxkZXI+IGluZm87CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250
ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgaW5mbykpLCAiQ2Fu
bm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CisgICAgICAgIGZhaWxJZkZhbHNlKGluZm8ubmFtZSwg
Im1ldGhvZCBtdXN0IGhhdmUgYSBuYW1lIik7CisgICAgICAgIGZhaWxJZkZhbHNlKGRlY2xhcmVW
YXJpYWJsZShpbmZvLm5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBtZXRob2QgbmFtZWQgJyIsIGlu
Zm8ubmFtZS0+aW1wbCgpLCAiJyIpOworCisgICAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvciA9ICFp
c1N0YXRpY01ldGhvZCAmJiAqaW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmNvbnN0
cnVjdG9yOworICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgIGluZm8ubmFt
ZSA9IG5hbWU7IC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/PworCisgICAgICAgIFRyZWVFeHBy
ZXNzaW9uIG1ldGhvZCA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKG1ldGhvZExvY2F0aW9u
LCBpbmZvLCBtZXRob2RTdGFydCk7CisgICAgICAgIGlmIChpc0NvbnN0cnVjdG9yKSB7CisgICAg
ICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbHJhdGUg
bXVsdGlwbGUgY29uc3RydWN0b3JzIGluIGEgc2luZ2xlIGNsYXNzIik7CisgICAgICAgICAgICBj
b25zdHJ1Y3RvciA9IG1ldGhvZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBTeW50YXggZXJyb3Igd2hlbiBzdXBlcigpIGlzIGNhbGxlZAorICAgICAgICAgICAgc2Vt
YW50aWNGYWlsSWZUcnVlKCppbmZvLm5hbWUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCAiQ2Fubm90IGRlY2xyYXRlIGEgc3RhdGljIG1ldGhvZCBuYW1lZCAnIiwgaW5mby5uYW1l
LT5pbXBsKCksICInIik7CisgICAgICAgICAgICBUcmVlUHJvcGVydHkgcHJvcGVydHkgPSBjb250
ZXh0LmNyZWF0ZVByb3BlcnR5KGluZm8ubmFtZSwgbWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNvbnN0
YW50LCAvKiBjb21wbGV0ZSAqLyBmYWxzZSk7CisKKyAgICAgICAgICAgIFRyZWVQcm9wZXJ0eUxp
c3QmIGhlYWQgPSBpc1N0YXRpY01ldGhvZCA/IHN0YXRpY01ldGhvZHMgOiBpbnN0YW5jZU1ldGhv
ZHM7CisgICAgICAgICAgICBUcmVlUHJvcGVydHlMaXN0JiB0YWlsID0gaXNTdGF0aWNNZXRob2Qg
PyBzdGF0aWNNZXRob2RzVGFpbCA6IGluc3RhbmNlTWV0aG9kc1RhaWw7CisKKyAgICAgICAgICAg
IGlmICh0YWlsKQorICAgICAgICAgICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5
TGlzdChtZXRob2RMb2NhdGlvbiwgcHJvcGVydHksIHRhaWwpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgaGVhZCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KG1ldGhv
ZExvY2F0aW9uLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgdGFpbCA9IGhlYWQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdW1lT3JGYWlsKENMT1NFQlJB
Q0UsICJFeHBlY3RlZCBhIGNsb3NpbmcgJ30nIGFmdGVyIGEgY2xhc3MgYm9keSIpOworCisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHN0cnVjdCBMYWJlbEluZm8gewpAQCAtMTc5OSwxMyArMTkxMSw2
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZVByb3BlcnR5KFRyZWVCCiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVQcm9wZXJ0eShpZGVudCwgbm9kZSwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgY29tcGxl
dGUpOwogICAgICAgICB9CiAgICAgICAgIGZhaWxJZkZhbHNlKHdhc0lkZW50LCAiRXhwZWN0ZWQg
YW4gaWRlbnRpZmllciBhcyBwcm9wZXJ0eSBuYW1lIik7Ci0gICAgICAgIGNvbnN0IElkZW50aWZp
ZXIqIGFjY2Vzc29yTmFtZSA9IDA7Ci0gICAgICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBh
cmFtZXRlcnMgPSAwOwotICAgICAgICBUcmVlRnVuY3Rpb25Cb2R5IGJvZHkgPSAwOwotICAgICAg
ICB1bnNpZ25lZCBvcGVuQnJhY2VPZmZzZXQgPSAwOwotICAgICAgICB1bnNpZ25lZCBjbG9zZUJy
YWNlT2Zmc2V0ID0gMDsKLSAgICAgICAgaW50IGJvZHlTdGFydExpbmUgPSAwOwotICAgICAgICB1
bnNpZ25lZCBib2R5U3RhcnRDb2x1bW4gPSAwOwogICAgICAgICBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZTsKICAgICAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZXQpCiAg
ICAgICAgICAgICB0eXBlID0gUHJvcGVydHlOb2RlOjpHZXR0ZXI7CkBAIC0xODIzLDE2ICsxOTI4
LDE3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZVByb3BlcnR5KFRyZWVCCiAgICAgICAgICAgICBmYWlsRHVlVG9VbmV4
cGVjdGVkVG9rZW4oKTsKICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9j
YXRpb24oKSk7CiAgICAgICAgIG5leHQoKTsKKyAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRy
ZWVCdWlsZGVyPiBpbmZvOwogICAgICAgICBpZiAodHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRl
cikgewogICAgICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2goT1BFTlBBUkVOKSwgIkV4cGVjdGVk
IGEgcGFyYW1ldGVyIGxpc3QgZm9yIGdldHRlciBkZWZpbml0aW9uIik7Ci0gICAgICAgICAgICBm
YWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVt
ZW50cywgR2V0dGVyTW9kZSwgZmFsc2UsIGFjY2Vzc29yTmFtZSwgcGFyYW1ldGVycywgYm9keSwg
b3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3Rh
cnRDb2x1bW4pKSwgIkNhbm5vdCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOworICAgICAgICAg
ICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1
aXJlbWVudHMsIEdldHRlck1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgZ2V0dGVy
IGRlZmluaXRpb24iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZhaWxJZkZhbHNl
KG1hdGNoKE9QRU5QQVJFTiksICJFeHBlY3RlZCBhIHBhcmFtZXRlciBsaXN0IGZvciBzZXR0ZXIg
ZGVmaW5pdGlvbiIpOwotICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZv
KGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBhY2Nl
c3Nvck5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9m
ZnNldCwgYm9keVN0YXJ0TGluZSwgYm9keVN0YXJ0Q29sdW1uKSksICJDYW5ub3QgcGFyc2Ugc2V0
dGVyIGRlZmluaXRpb24iKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9u
SW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBTZXR0ZXJNb2RlLCBmYWxzZSwg
aW5mbykpLCAiQ2Fubm90IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHN0cmluZ1Byb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUsIGNvbXBsZXRlLCBz
dHJpbmdQcm9wZXJ0eU5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xv
c2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5l
LCBib2R5U3RhcnRDb2x1bW4sIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOwotICAgICAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0q
PihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUsIGNvbXBsZXRlLCBudW1lcmlj
UHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBib2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJh
Y2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgYm9k
eVN0YXJ0Q29sdW1uLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUs
IGNvbXBsZXRlLCBzdHJpbmdQcm9wZXJ0eU5hbWUsIGluZm8sIGdldHRlck9yU2V0dGVyU3RhcnRP
ZmZzZXQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3Bl
cnR5KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUs
IGNvbXBsZXRlLCBudW1lcmljUHJvcGVydHlOYW1lLCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0
T2Zmc2V0KTsKICAgICB9CiAgICAgY2FzZSBOVU1CRVI6IHsKICAgICAgICAgZG91YmxlIHByb3Bl
cnR5TmFtZSA9IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlOwpAQCAtMjE3MiwyMCArMjI3OCwy
MCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlcwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIG5l
d0NvdW50Kys7CiAgICAgfQotICAgIAorCisgICAgYm9vbCBiYXNlSXNTdXBlciA9IGZhbHNlOwog
ICAgIGlmIChtYXRjaChGVU5DVElPTikpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFt
ZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKLSAgICAgICAgVHJlZUZv
cm1hbFBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyA9IDA7Ci0gICAgICAgIFRyZWVGdW5jdGlvbkJv
ZHkgYm9keSA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG9wZW5CcmFjZU9mZnNldCA9IDA7Ci0gICAg
ICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VPZmZzZXQgPSAwOwotICAgICAgICBpbnQgYm9keVN0YXJ0
TGluZSA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGJvZHlTdGFydENvbHVtbiA9IDA7CiAgICAgICAg
IHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgICAgICBs
b2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKICAgICAgICAgbmV4dCgpOwotICAgICAgICBmYWls
SWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50
cywgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgbmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNl
T2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4p
KSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBleHByZXNzaW9uIik7Ci0gICAgICAgIGJhc2UgPSBj
b250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2NhdGlvbiwgbmFtZSwgYm9keSwgcGFyYW1ldGVy
cywgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xh
c3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIGJvZHlTdGFydENvbHVtbiwgZnVuY3Rpb25LZXl3b3Jk
U3RhcnQpOworICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87Cisg
ICAgICAgIGluZm8ubmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsK
KyAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9u
Tm9SZXF1aXJlbWVudHMsIEZ1bmN0aW9uTW9kZSwgZmFsc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJz
ZSBmdW5jdGlvbiBleHByZXNzaW9uIik7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUZ1
bmN0aW9uRXhwcihsb2NhdGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOworICAgIH0g
ZWxzZSBpZiAobWF0Y2goU1VQRVIpKSB7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LnN1cGVyRXhw
cihsb2NhdGlvbik7CisgICAgICAgIGJhc2VJc1N1cGVyID0gdHJ1ZTsKKyAgICAgICAgbmV4dCgp
OwogICAgIH0gZWxzZQogICAgICAgICBiYXNlID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250
ZXh0KTsKICAgICAKQEAgLTIyMDEsNiArMjMwNyw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVz
CiAgICAgICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9hc3NpZ25tZW50Q291bnQ7
CiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihj
b250ZXh0KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNl
IHN1YnNjcmlwdCBleHByZXNzaW9uIik7CisgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCisg
ICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShpbml0aWFsQXNzaWdubWVudHMgfHwgbV9hc3NpZ25t
ZW50Q291bnQsICJDYW5ub3QgYXNzaWduIGEgdmFsdWUgdG8gc3VwZXIiKTsKICAgICAgICAgICAg
IGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJyYWNrZXRBY2Nlc3MobG9jYXRpb24sIGJhc2UsIHByb3Bl
cnR5LCBpbml0aWFsQXNzaWdubWVudHMgIT0gbV9hc3NpZ25tZW50Q291bnQsIGV4cHJlc3Npb25T
dGFydCwgZXhwcmVzc2lvbkVuZCwgdG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIGhh
bmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIsICJlbmQiLCAic3Vic2NyaXB0
IGV4cHJlc3Npb24iKTsKICAgICAgICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsK
QEAgLTIyMTksNiArMjMyNyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4
cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzCiAgICAgICAgICAg
ICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9u
KCk7CiAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3Vt
ZW50cyhjb250ZXh0LCBBbGxvd1NwcmVhZCk7CiAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2Uo
YXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IGlmIGJhc2VJc1N1cGVyOiBmYWlsSWZGYWxzZShpc0NvbnN0cnVjdG9yLCAi
Q2Fubm90IGNhbGwgc3VwZXIoKSBpbiB0aGlzIGZ1bmN0aW9uIikuCiAgICAgICAgICAgICAgICAg
YmFzZSA9IGNvbnRleHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGJhc2UsIGFyZ3Vt
ZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFND
b3VudDsKQEAgLTIyMzYsOCArMjM0NSwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlcwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZ290byBlbmRNZW1iZXJFeHByZXNzaW9uOwogICAg
ICAgICB9CisgICAgICAgIGJhc2VJc1N1cGVyID0gZmFsc2U7CiAgICAgfQogZW5kTWVtYmVyRXhw
cmVzc2lvbjoKKyAgICBmYWlsSWZUcnVlKGJhc2VJc1N1cGVyICYmICFuZXdDb3VudCwgIkNhbm5v
dCByZWZlcmVuY2Ugc3VwZXIiKTsKICAgICB3aGlsZSAobmV3Q291bnQtLSkKICAgICAgICAgYmFz
ZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgZXhwcmVzc2lvblN0YXJ0
LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICByZXR1cm4gYmFzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDc2NGUzZDMuLjc3Njg4ODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk5v
ZGVzLmgiCiAjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJQYXJzZXJFcnJvci5o
IgorI2luY2x1ZGUgIlBhcnNlckZ1bmN0aW9uSW5mby5oIgogI2luY2x1ZGUgIlBhcnNlclRva2Vu
cy5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlk
ZXJDYWNoZS5oIgpAQCAtNzcsNyArNzgsNyBAQCBDT01QSUxFX0FTU0VSVChMYXN0VW50YWdnZWRU
b2tlbiA8IDY0LCBMZXNzVGhhbjY0VW50YWdnZWRUb2tlbnMpOwogCiBlbnVtIFNvdXJjZUVsZW1l
bnRzTW9kZSB7IENoZWNrRm9yU3RyaWN0TW9kZSwgRG9udENoZWNrRm9yU3RyaWN0TW9kZSB9Owog
ZW51bSBGdW5jdGlvblJlcXVpcmVtZW50cyB7IEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1bmN0
aW9uTmVlZHNOYW1lIH07Ci1lbnVtIEZ1bmN0aW9uUGFyc2VNb2RlIHsgRnVuY3Rpb25Nb2RlLCBH
ZXR0ZXJNb2RlLCBTZXR0ZXJNb2RlIH07CitlbnVtIEZ1bmN0aW9uUGFyc2VNb2RlIHsgRnVuY3Rp
b25Nb2RlLCBHZXR0ZXJNb2RlLCBTZXR0ZXJNb2RlLCBNZXRob2RNb2RlIH07CiBlbnVtIERlY29u
c3RydWN0aW9uS2luZCB7CiAgICAgRGVjb25zdHJ1Y3RUb1ZhcmlhYmxlcywKICAgICBEZWNvbnN0
cnVjdFRvUGFyYW1ldGVycywKQEAgLTY5Miw2ICs2OTMsNyBAQCBwcml2YXRlOgogICAgIAogICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNlU291
cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImLCBTb3VyY2VFbGVtZW50c01vZGUpOwogICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZVN0YXRlbWVudChUcmVl
QnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3RpdmUsIHVuc2lnbmVkKiBkaXJlY3Rp
dmVMaXRlcmFsTGVuZ3RoID0gMCk7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZW50IHBhcnNlQ2xhc3NEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOwogICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUZ1bmN0aW9uRGVj
bGFyYXRpb24oVHJlZUJ1aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgcGFyc2VWYXJEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOwogICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUNvbnN0RGVjbGFy
YXRpb24oVHJlZUJ1aWxkZXImKTsKQEAgLTczMyw3ICs3MzUsMTAgQEAgcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVlRGVjb25zdHJ1Y3Rp
b25QYXR0ZXJuIGNyZWF0ZUJpbmRpbmdQYXR0ZXJuKFRyZWVCdWlsZGVyJiwgRGVjb25zdHJ1Y3Rp
b25LaW5kLCBjb25zdCBJZGVudGlmaWVyJiwgaW50IGRlcHRoLCBKU1Rva2VuKTsKICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVlRGVjb25zdHJ1Y3Rpb25Q
YXR0ZXJuIHBhcnNlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuKFRyZWVCdWlsZGVyJiwgRGVjb25zdHJ1
Y3Rpb25LaW5kLCBpbnQgZGVwdGggPSAwKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IE5FVkVSX0lOTElORSBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIHRyeVBhcnNlRGVjb25z
dHJ1Y3Rpb25QYXR0ZXJuRXhwcmVzc2lvbihUcmVlQnVpbGRlciYpOwotICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJl
ZUJ1aWxkZXImLCBGdW5jdGlvblJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUsIGJvb2wg
bmFtZUlzSW5Db250YWluaW5nU2NvcGUsIGNvbnN0IElkZW50aWZpZXIqJiwgVHJlZUZvcm1hbFBh
cmFtZXRlckxpc3QmLCBUcmVlRnVuY3Rpb25Cb2R5JiwgdW5zaWduZWQmIG9wZW5CcmFjZU9mZnNl
dCwgdW5zaWduZWQmIGNsb3NlQnJhY2VPZmZzZXQsIGludCYgYm9keVN0YXJ0TGluZSwgdW5zaWdu
ZWQmIGJvZHlTdGFydENvbHVtbik7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgRnVuY3Rp
b25SZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmlu
Z1Njb3BlLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CisgICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUNsYXNzSW5mbyhUcmVl
QnVpbGRlciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBjb25zdCBJZGVudGlmaWVyKiYsCisgICAg
ICAgIFRyZWVFeHByZXNzaW9uJiBwYXJlbnRDbGFzcywgVHJlZUV4cHJlc3Npb24mIGNvbnN0cnVj
dG9yLCBUcmVlUHJvcGVydHlMaXN0JiBpbnN0YW5jZU1ldGhvZHMsIFRyZWVQcm9wZXJ0eUxpc3Qm
IHN0YXRpY01ldGhvZHMpOwogICAgIEFMV0FZU19JTkxJTkUgaW50IGlzQmluYXJ5T3BlcmF0b3Io
SlNUb2tlblR5cGUpOwogICAgIGJvb2wgYWxsb3dBdXRvbWF0aWNTZW1pY29sb24oKTsKICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyRnVuY3Rpb25J
bmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckZ1bmN0aW9uSW5mby5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDgyNDUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckZ1bmN0aW9uSW5mby5o
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhcnNlckZ1bmN0aW9uSW5m
b19oCisjZGVmaW5lIFBhcnNlckZ1bmN0aW9uSW5mb19oCisKK25hbWVzcGFjZSBKU0MgeworCit0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+CitzdHJ1Y3QgUGFyc2VyRnVuY3Rpb25JbmZvIHsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1lID0gMDsKKyAgICB0eXBlbmFtZSBUcmVlQnVpbGRl
cjo6Rm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJzID0gMDsKKyAgICB0eXBlbmFtZSBUcmVl
QnVpbGRlcjo6RnVuY3Rpb25Cb2R5IGJvZHkgPSAwOworICAgIHVuc2lnbmVkIG9wZW5CcmFjZU9m
ZnNldCA9IDA7CisgICAgdW5zaWduZWQgY2xvc2VCcmFjZU9mZnNldCA9IDA7CisgICAgaW50IGJv
ZHlTdGFydExpbmUgPSAwOworICAgIGludCBib2R5RW5kTGluZSA9IDA7CisgICAgdW5zaWduZWQg
Ym9keVN0YXJ0Q29sdW1uID0gMDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAppbmRleCBhNjc1OGQwLi40ZDhjOTY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlclRva2Vucy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKQEAgLTc1LDYgKzc1
LDEwIEBAIGVudW0gSlNUb2tlblR5cGUgewogICAgIEZJTkFMTFksCiAgICAgREVCVUdHRVIsCiAg
ICAgRUxTRSwKKyAgICBDTEFTU1RPS0VOLAorICAgIEVYVEVORFMsCisgICAgU1RBVElDVE9LRU4s
CisgICAgU1VQRVIsCiAgICAgT1BFTkJSQUNFID0gMCwKICAgICBDTE9TRUJSQUNFLAogICAgIE9Q
RU5QQVJFTiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4
Q2hlY2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgK
aW5kZXggZmQxNDUyMS4uMzkzZjZjMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9TeW50YXhDaGVja2VyLmgKQEAgLTI2LDExICsyNiwxMiBAQAogI2lmbmRlZiBTeW50YXhDaGVj
a2VyX2gKICNkZWZpbmUgU3ludGF4Q2hlY2tlcl9oCiAKKyNpbmNsdWRlICJQYXJzZXJGdW5jdGlv
bkluZm8uaCIKICNpbmNsdWRlICJMZXhlci5oIgogI2luY2x1ZGUgIllhcnJTeW50YXhDaGVja2Vy
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotICAgIAorCiBjbGFzcyBTeW50YXhDaGVja2VyIHsKIHB1
YmxpYzoKICAgICBzdHJ1Y3QgQmluYXJ5RXhwckNvbnRleHQgewpAQCAtNzEsNyArNzIsNyBAQCBw
dWJsaWM6CiAgICAgdHlwZWRlZiBTeW50YXhDaGVja2VyIEZ1bmN0aW9uQm9keUJ1aWxkZXI7CiAg
ICAgZW51bSB7IE5vbmVFeHByID0gMCwKICAgICAgICAgUmVzb2x2ZUV2YWxFeHByLCBSZXNvbHZl
RXhwciwgTnVtYmVyRXhwciwgU3RyaW5nRXhwciwKLSAgICAgICAgVGhpc0V4cHIsIE51bGxFeHBy
LCBCb29sRXhwciwgUmVnRXhwRXhwciwgT2JqZWN0TGl0ZXJhbEV4cHIsCisgICAgICAgIFRoaXNF
eHByLCBTdXBlckV4cHIsIE51bGxFeHByLCBCb29sRXhwciwgUmVnRXhwRXhwciwgT2JqZWN0TGl0
ZXJhbEV4cHIsCiAgICAgICAgIEZ1bmN0aW9uRXhwciwgQnJhY2tldEV4cHIsIERvdEV4cHIsIENh
bGxFeHByLAogICAgICAgICBOZXdFeHByLCBQcmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBC
aW5hcnlFeHByLAogICAgICAgICBDb25kaXRpb25hbEV4cHIsIEFzc2lnbm1lbnRFeHByLCBUeXBl
b2ZFeHByLApAQCAtMTQyLDYgKzE0MywxMCBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5cGUg
Y3JlYXRlVW5hcnlQbHVzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7
IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVWb2lkKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSB0aGlzRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJl
dHVybiBUaGlzRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIHN1cGVyRXhwcihjb25zdCBKU1Rv
a2VuTG9jYXRpb24mKSB7IHJldHVybiBUaGlzRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZVN1cGVyQ2FsbChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgY29u
c3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJikgeyByZXR1cm4gU3VwZXJFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRl
U3VwZXJCcmFja2V0QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBl
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mKSB7IHJldHVybiBTdXBlckV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBj
cmVhdGVTdXBlckRvdEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyKiwgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJikgeyByZXR1cm4gU3VwZXJFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVy
KiwgaW50KSB7IHJldHVybiBSZXNvbHZlRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gT2JqZWN0TGl0
ZXJhbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0KQEAg
LTE1OSw3ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29uZGl0
aW9uYWxFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNz
aW9uVHlwZSwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbmRpdGlvbmFsRXhwcjsgfQogICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFzc2lnblJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwgaW50KSB7IHJl
dHVybiBBc3NpZ25tZW50RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUVtcHR5VmFy
RXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJikgeyBy
ZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVGdW5jdGlv
bkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0K
KyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgaW50KSB7IHJl
dHVybiBGdW5jdGlvbkV4cHI7IH0KICAgICBpbnQgY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBib29sKSB7
IHJldHVybiBGdW5jdGlvbkJvZHlSZXN1bHQ7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZVN0
YXJ0KGludCwgaW50KSB7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gQXJn
dW1lbnRzUmVzdWx0OyB9CkBAIC0xOTMsNyArMTk4LDggQEAgcHVibGljOgogICAgIGludCBjcmVh
dGVDbGF1c2UoaW50LCBpbnQpIHsgcmV0dXJuIENsYXVzZVJlc3VsdDsgfQogICAgIGludCBjcmVh
dGVDbGF1c2VMaXN0KGludCkgeyByZXR1cm4gQ2xhdXNlTGlzdFJlc3VsdDsgfQogICAgIGludCBj
cmVhdGVDbGF1c2VMaXN0KGludCwgaW50KSB7IHJldHVybiBDbGF1c2VMaXN0UmVzdWx0OyB9Ci0g
ICAgaW50IGNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNv
bnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkg
eyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CisgICAgaW50IGNyZWF0ZUZ1bmNEZWNsU3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50
YXhDaGVja2VyPiYsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CisgICAgaW50IGNy
ZWF0ZUNsYXNzRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVu
dGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBQcm9wZXJ0eUxpc3QsIFBy
b3BlcnR5TGlzdCwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGlu
dCBjcmVhdGVCbG9ja1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwg
aW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlRXhwclN0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0
ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlSWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0K
QEAgLTIxOCwxNCArMjI0LDE0IEBAIHB1YmxpYzoKICAgICBpbnQgY3JlYXRlRGVidWdnZXIoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsg
fQogICAgIGludCBjcmVhdGVDb25zdFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBp
bnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgYXBwZW5k
Q29uc3REZWNsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgY29uc3QgSWRlbnRpZmllcios
IGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9Ci0gICAgUHJvcGVydHkgY3JlYXRlR2V0
dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6
OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGludCwgaW50
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KQorICAgIFByb3BlcnR5IGNyZWF0ZUdldHRl
ck9yU2V0dGVyUHJvcGVydHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2RlOjpU
eXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBjb25zdCBQYXJz
ZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChuYW1lKTsKICAgICAgICAgaWYgKCFzdHJpY3QpCiAgICAgICAgICAgICByZXR1cm4g
UHJvcGVydHkodHlwZSk7CiAgICAgICAgIHJldHVybiBQcm9wZXJ0eShuYW1lLCB0eXBlKTsKICAg
ICB9Ci0gICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSogdm0sIFBh
cnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlO
b2RlOjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBkb3VibGUgbmFtZSwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQpCisgICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0
ZXJQcm9wZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBkb3VibGUg
bmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWduZWQp
CiAgICAgewogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0
eSh0eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVu
dGlmaWVycy5oCmluZGV4IDU2OWVlNGYuLmU3ZmUwYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtMjIwLDYgKzIyMCw4IEBA
CiAgICAgbWFjcm8oeWllbGQpCiAKICNkZWZpbmUgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJ
RVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShtYWNybykgXAorICAgIG1hY3JvKGhvbWVPYmplY3QpIFwK
KyAgICBtYWNybyhjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpIFwKICAgICBtYWNybyhpdGVyYXRv
cikgXAogICAgIG1hY3JvKGl0ZXJhdG9yTmV4dCkgXAogICAgIG1hY3JvKHJlc29sdmUpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245050</attachid>
            <date>2015-01-20 23:09:27 -0800</date>
            <delta_ts>2015-01-23 18:05:35 -0800</delta_ts>
            <desc>Set this to undefined instead of throwing</desc>
            <filename>native-class-4.patch</filename>
            <type>text/plain</type>
            <size>82339</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTdkNDIzMS4uNWQ5NmM5NWM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc3OCw2ICsyNzc4LDcgQEAKIAkJOTlFNDVB
MjExOEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFbmNvZGVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTlFNDVBMjIxOEExQjI1OTAwMjZEODhGIC8qIElucHV0Q3Vyc29yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Q3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk5RTQ1QTIzMThBMUIyNTkwMDI2RDg4RiAvKiBOb25kZXRlcm1pbmlzdGljSW5w
dXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9uZGV0ZXJtaW5pc3RpY0lu
cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCNDk1NEU4MUE2NjQwREIwMDI4
MTVBNiAvKiBQYXJzZXJGdW5jdGlvbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyRnVuY3Rp
b25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlFNzI5NDA5MTkwRjAzMDYw
MDFBOTFCNSAvKiBCdW5kbGVQYXRoLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gQnVuZGxlUGF0aC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUU3
Mjk0MEExOTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnVuZGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5RUE1QzdBMDE5MEYwNUQyMDA1MDhFQkUgLyogSW5pdGlhbGl6ZUxMVk1NYWMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSW5pdGlhbGl6ZUxMVk1NYWMuY3BwOyBw
YXRoID0gbGx2bS9Jbml0aWFsaXplTExWTU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00MTQxLDYgKzQxNDIsNyBAQAogCQkJCTkzMDUyQzMyMEZCNzkyMTkwMDQ4RkRDMyAv
KiBQYXJzZXJBcmVuYS5jcHAgKi8sCiAJCQkJOTMwNTJDMzMwRkI3OTIxOTAwNDhGREMzIC8qIFBh
cnNlckFyZW5hLmggKi8sCiAJCQkJMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVy
cm9yLmggKi8sCisJCQkJOUI0OTU0RTgxQTY2NDBEQjAwMjgxNUE2IC8qIFBhcnNlckZ1bmN0aW9u
SW5mby5oICovLAogCQkJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5o
ICovLAogCQkJCTY1MzAzRDYzMTQ0N0I5RTEwMEQzRjkwNCAvKiBQYXJzZXJUb2tlbnMuaCAqLywK
IAkJCQk4NjlFQkNCNjBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAK
aW5kZXggNzQwYTI0NC4uM2RiYTQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC02MSw3ICs2MSw4IEBAIHN0YXRp
YyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKFZN
JiB2bSwgVW5saW5rZWRGdW5jCiAgICAgZnVuY3Rpb24tPmZpbmlzaFBhcnNpbmcoZXhlY3V0YWJs
ZS0+cGFyYW1ldGVycygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUtPmZ1bmN0aW9u
TW9kZSgpKTsKICAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJzZShmdW5jdGlvbi0+ZmVhdHVyZXMo
KSwgZnVuY3Rpb24tPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkpOwogICAgIAotICAgIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNy
ZWF0ZSgmdm0sIEZ1bmN0aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oZnVuY3Rpb24tPm5lZWRzQWN0
aXZhdGlvbigpLCBmdW5jdGlvbi0+dXNlc0V2YWwoKSwgZnVuY3Rpb24tPmlzU3RyaWN0TW9kZSgp
LCBraW5kID09IENvZGVGb3JDb25zdHJ1Y3QsIGZ1bmN0aW9uS2luZCA9PSBVbmxpbmtlZEJ1aWx0
aW5GdW5jdGlvbikpOworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgmdm0sIEZ1bmN0aW9uQ29kZSwKKyAgICAg
ICAgRXhlY3V0YWJsZUluZm8oZnVuY3Rpb24tPm5lZWRzQWN0aXZhdGlvbigpLCBmdW5jdGlvbi0+
dXNlc0V2YWwoKSwgZnVuY3Rpb24tPmlzU3RyaWN0TW9kZSgpLCBraW5kID09IENvZGVGb3JDb25z
dHJ1Y3QsIGZ1bmN0aW9uS2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbiwgZXhlY3V0YWJs
ZS0+Y29uc3RydWN0b3JLaW5kSXNCYXNlKCkpKTsKICAgICBhdXRvIGdlbmVyYXRvcihzdGQ6Om1h
a2VfdW5pcXVlPEJ5dGVjb2RlR2VuZXJhdG9yPih2bSwgZnVuY3Rpb24uZ2V0KCksIHJlc3VsdCwg
ZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKTsKICAgICBlcnJvciA9IGdlbmVyYXRvci0+Z2Vu
ZXJhdGUoKTsKICAgICBpZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpFcnJvck5vbmUp
CkBAIC04NCw2ICs4NSw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZShWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0CiAgICAgLCBtX2lzSW5T
dHJpY3RDb250ZXh0KG5vZGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgLCBtX2hhc0NhcHR1
cmVkVmFyaWFibGVzKGZhbHNlKQogICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihraW5kID09IFVu
bGlua2VkQnVpbHRpbkZ1bmN0aW9uKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmRJc0Jhc2Uobm9k
ZS0+Y29uc3RydWN0b3JLaW5kSXNCYXNlKCkpCiAgICAgLCBtX25hbWUobm9kZS0+aWRlbnQoKSkK
ICAgICAsIG1faW5mZXJyZWROYW1lKG5vZGUtPmluZmVycmVkTmFtZSgpKQogICAgICwgbV9wYXJh
bWV0ZXJzKG5vZGUtPnBhcmFtZXRlcnMoKSkKQEAgLTIwNSw2ICsyMDcsNyBAQCBVbmxpbmtlZENv
ZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Q29kZVR5cGUgY29kZQogICAgICwgbV9pc0NvbnN0cnVjdG9yKGluZm8ubV9pc0NvbnN0cnVjdG9y
KQogICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAgICAsIG1faXNCdWlsdGlu
RnVuY3Rpb24oaW5mby5tX2lzQnVpbHRpbkZ1bmN0aW9uKQorICAgICwgbV9jb25zdHJ1Y3Rvcktp
bmRJc0Jhc2UoaW5mby5tX2NvbnN0cnVjdG9yS2luZElzQmFzZSkKICAgICAsIG1fZmlyc3RMaW5l
KDApCiAgICAgLCBtX2xpbmVDb3VudCgwKQogICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CmluZGV4IGYxMTcwMGYuLjZjMzhlMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC02NiwxOSArNjYsMjMgQEAgdHlwZWRl
ZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNp
Z25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwogCiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm8g
ewotICAgIEV4ZWN1dGFibGVJbmZvKGJvb2wgbmVlZHNBY3RpdmF0aW9uLCBib29sIHVzZXNFdmFs
LCBib29sIGlzU3RyaWN0TW9kZSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGlzQnVpbHRpbkZ1
bmN0aW9uKQorICAgIEV4ZWN1dGFibGVJbmZvKGJvb2wgbmVlZHNBY3RpdmF0aW9uLCBib29sIHVz
ZXNFdmFsLCBib29sIGlzU3RyaWN0TW9kZSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGlzQnVp
bHRpbkZ1bmN0aW9uLAorICAgICAgICBib29sIGNvbnN0cnVjdG9yS2luZElzQmFzZSkKICAgICAg
ICAgOiBtX25lZWRzQWN0aXZhdGlvbihuZWVkc0FjdGl2YXRpb24pCiAgICAgICAgICwgbV91c2Vz
RXZhbCh1c2VzRXZhbCkKICAgICAgICAgLCBtX2lzU3RyaWN0TW9kZShpc1N0cmljdE1vZGUpCiAg
ICAgICAgICwgbV9pc0NvbnN0cnVjdG9yKGlzQ29uc3RydWN0b3IpCiAgICAgICAgICwgbV9pc0J1
aWx0aW5GdW5jdGlvbihpc0J1aWx0aW5GdW5jdGlvbikKKyAgICAgICAgLCBtX2NvbnN0cnVjdG9y
S2luZElzQmFzZShjb25zdHJ1Y3RvcktpbmRJc0Jhc2UpCiAgICAgewogICAgIH0KKwogICAgIGJv
b2wgbV9uZWVkc0FjdGl2YXRpb24gOiAxOwogICAgIGJvb2wgbV91c2VzRXZhbCA6IDE7CiAgICAg
Ym9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7CiAgICAgYm9vbCBtX2lzQ29uc3RydWN0b3IgOiAxOwog
ICAgIGJvb2wgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgYm9vbCBtX2NvbnN0cnVjdG9y
S2luZElzQmFzZSA6IDE7CiB9OwogCiBlbnVtIFVubGlua2VkRnVuY3Rpb25LaW5kIHsKQEAgLTEx
Nyw2ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gSlNQYXJzZVN0cmljdDsK
ICAgICAgICAgcmV0dXJuIEpTUGFyc2VOb3JtYWw7CiAgICAgfQorICAgIGJvb2wgY29uc3RydWN0
b3JLaW5kSXNCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcktpbmRJc0Jhc2U7IH0K
IAogICAgIHVuc2lnbmVkIGZpcnN0TGluZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RM
aW5lT2Zmc2V0OyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9s
aW5lQ291bnQ7IH0KQEAgLTE2OSw2ICsxNzQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0lu
U3RyaWN0Q29udGV4dCA6IDE7CiAgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsK
ICAgICBib29sIG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOworICAgIGJvb2wgbV9jb25zdHJ1Y3Rv
cktpbmRJc0Jhc2UgOiAxOwogCiAgICAgSWRlbnRpZmllciBtX25hbWU7CiAgICAgSWRlbnRpZmll
ciBtX2luZmVycmVkTmFtZTsKQEAgLTM0MSw3ICszNDcsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c051bWVyaWNDb21wYXJlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzTnVtZXJpY0NvbXBh
cmVGdW5jdGlvbjsgfQogCiAgICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1faXNCdWlsdGluRnVuY3Rpb247IH0KLSAgICAKKyAgICBib29sIGNvbnN0cnVjdG9yS2lu
ZElzQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0b3JLaW5kSXNCYXNlOyB9CisKICAg
ICB2b2lkIHNocmlua1RvRml0KCkKICAgICB7CiAgICAgICAgIG1fanVtcFRhcmdldHMuc2hyaW5r
VG9GaXQoKTsKQEAgLTUzMiw2ICs1MzksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0NvbnN0
cnVjdG9yIDogMTsKICAgICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwogICAgIGJv
b2wgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgYm9vbCBtX2NvbnN0cnVjdG9yS2luZElz
QmFzZSA6IDE7CiAgICAgdW5zaWduZWQgbV9maXJzdExpbmU7CiAgICAgdW5zaWduZWQgbV9saW5l
Q291bnQ7CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDUz
NzhlZTguLjA2NWYwOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC00MzYsNyArNDM2LDE3IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uTm9kZSog
ZnVuY3Rpb25Ob2RlLCBVbmxpbmtlCiAgICAgYWRkQ2FsbGVlKGZ1bmN0aW9uTm9kZSwgY2FsbGVl
UmVnaXN0ZXIpOwogCiAgICAgaWYgKGlzQ29uc3RydWN0b3IoKSkgeworICAgICAgICBSZWZQdHI8
TGFiZWw+IGFmdGVyQ3JlYXRlVGhpcyA9IGNvbnN0cnVjdG9yS2luZElzQmFzZSgpID8gbnVsbHB0
ciA6IG5ld0xhYmVsKCk7CisgICAgICAgIGlmIChhZnRlckNyZWF0ZVRoaXMpIHsKKyAgICAgICAg
ICAgIFJlZ2lzdGVySUQgY2FsbGVlKEpTU3RhY2s6OkNhbGxlZSk7CisgICAgICAgICAgICBlbWl0
TG9hZCh0aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICBlbWl0SnVt
cElmRmFsc2UoZW1pdEVxdWFsaXR5T3Aob3Bfc3RyaWN0ZXEsIG5ld1RlbXBvcmFyeSgpLCB0aGlz
UmVnaXN0ZXIoKSwKKyAgICAgICAgICAgICAgICBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwg
JmNhbGxlZSwgcHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZFByaXZhdGVO
YW1lKSksCisgICAgICAgICAgICAgICAgYWZ0ZXJDcmVhdGVUaGlzLmdldCgpKTsKKyAgICAgICAg
fQogICAgICAgICBlbWl0Q3JlYXRlVGhpcygmbV90aGlzUmVnaXN0ZXIpOworICAgICAgICBpZiAo
YWZ0ZXJDcmVhdGVUaGlzKQorICAgICAgICAgICAgZW1pdExhYmVsKGFmdGVyQ3JlYXRlVGhpcy5n
ZXQoKSk7CiAgICAgfSBlbHNlIGlmIChmdW5jdGlvbk5vZGUtPnVzZXNUaGlzKCkgfHwgY29kZUJs
b2NrLT51c2VzRXZhbCgpKSB7CiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CiAgICAgICAgIGVtaXRPcGNvZGUo
b3BfdG9fdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggMTkxYjA2NC4uYjlhYzg0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaApAQCAtMjY5LDcgKzI2OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBQYXJzZXJB
cmVuYSYgcGFyc2VyQXJlbmEoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlTm9kZS0+cGFyc2VyQXJl
bmEoKTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygp
IGNvbnN0IHsgcmV0dXJuICptX3ZtLT5wcm9wZXJ0eU5hbWVzOyB9CiAKLSAgICAgICAgYm9vbCBp
c0NvbnN0cnVjdG9yKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsgfQor
ICAgICAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpOyB9CisgICAgICAgIGJvb2wgY29uc3RydWN0b3JLaW5kSXNCYXNlKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmNvbnN0cnVjdG9yS2luZElzQmFzZSgpOyB9CiAK
ICAgICAgICAgUGFyc2VyRXJyb3IgZ2VuZXJhdGUoKTsKIApAQCAtMjkwLDcgKzI5MSw4IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3Jpbmcg
InRoaXMiCiAgICAgICAgIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3Ro
aXNSZWdpc3RlcjsgfQotICAgICAgICAKKyAgICAgICAgYm9vbCBoYXNTdXBlcmNsYXNzKCk7CisK
ICAgICAgICAgUmVnaXN0ZXJJRCogc2NvcGVSZWdpc3RlcigpIHsgcmV0dXJuIG1fc2NvcGVSZWdp
c3RlcjsgfQogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIHRlbXBvcmFy
eSByZWdpc3Rlci4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggOTNmYjE5MS4uMTJk
ZTdmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcApAQCAtMTQ3LDYgKzE0Nyw2MiBAQCBSZWdpc3RlcklEKiBUaGlzTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBTdXBlck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitS
ZWdpc3RlcklEKiBTdXBlck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdu
b3JlZFJlc3VsdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZ2lzdGVySUQgY2FsbGVl
OworICAgIGNhbGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmpl
Y3RQcml2YXRlTmFtZSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50ID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaG9tZU9iamVjdC5n
ZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pOworICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwgcHJvdG9QYXJlbnQuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IpOworfQorCitzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdFN1cGVyQmFzZUZvckNhbGxlZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQoreworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAg
IGNhbGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2
YXRlTmFtZSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIGhvbWVPYmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCku
dW5kZXJzY29yZVByb3RvKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK1JlZ2lzdGVySUQqIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0obV9zdWJzY3JpcHQpOworICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWdpc3RlcklEIGNhbGxl
ZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworICAgIAorCisgICAg
cmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgJmNhbGxlZSAv
KiBnZW5lcmF0b3Iuc2NvcGVSZWdpc3RlcigpICovKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFN1cGVyRG90QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCogU3VwZXJEb3RBY2Nlc3Nvck5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKG1faWRlbnQpOworICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9y
Lmlnbm9yZWRSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWdpc3RlcklEIGNh
bGxlZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBob21lT2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgJmNhbGxlZSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ob21l
T2JqZWN0UHJpdmF0ZU5hbWUpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlVmFsdWUgPSBn
ZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBob21lT2JqZWN0
LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90byk7CisgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCksIGJhc2VWYWx1ZS5nZXQoKSwgbV9pZGVudCk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIGJvb2wgUmVzb2x2ZU5vZGU6OmlzUHVyZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yKSBjb25zdApAQCAtMjczLDMyICszMjksMjUgQEAgQXJndW1lbnRMaXN0Tm9kZSogQXJyYXlO
b2RlOjp0b0FyZ3VtZW50TGlzdChQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGludCBsaW5lTnUK
IAogUmVnaXN0ZXJJRCogT2JqZWN0TGl0ZXJhbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgIGlmICghbV9saXN0
KSB7Ci0gICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCi0gICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROZXdPYmpl
Y3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSk7Ci0gICAgIH0KLSAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fbGlzdCk7CisgICAgaWYgKCFtX2xpc3QpIHsKKyAg
ICAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld09iamVjdChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpKTsKKyAgICB9CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IG5ld09iaiA9IGdlbmVyYXRvci5lbWl0TmV3T2JqZWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobmV3T2JqLmdldCgpLCBt
X2xpc3QpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlM
aXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBQcm9w
ZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmogPSBnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgCi0gICAgZ2VuZXJhdG9yLmVtaXROZXdP
YmplY3QobmV3T2JqLmdldCgpKTsKLSAgICAKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3T2Jq
ID0gZHN0OworCiAgICAgLy8gRmFzdCBjYXNlOiB0aGlzIGxvb3AganVzdCBoYW5kbGVzIHJlZ3Vs
YXIgdmFsdWUgcHJvcGVydGllcy4KICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBwID0gdGhpczsKLSAg
ICBmb3IgKDsgcCAmJiBwLT5tX25vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50
OyBwID0gcC0+bV9uZXh0KSB7Ci0gICAgICAgIGlmIChwLT5tX25vZGUtPm1fbmFtZSkgewotICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKG5ld09iai5nZXQoKSwgKnAtPm1f
bm9kZS0+bmFtZSgpLCBnZW5lcmF0b3IuZW1pdE5vZGUocC0+bV9ub2RlLT5tX2Fzc2lnbikpOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShwLT5tX25vZGUtPm1fZXhwcmVz
c2lvbik7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlWYWwobmV3T2JqLmdldCgp
LCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9kZShwLT5tX25vZGUtPm1fYXNz
aWduKSk7Ci0gICAgfQorICAgIGZvciAoOyBwICYmIHAtPm1fbm9kZS0+bV90eXBlID09IFByb3Bl
cnR5Tm9kZTo6Q29uc3RhbnQ7IHAgPSBwLT5tX25leHQpCisgICAgICAgIGVtaXRDb25zdGFudFBy
b3BlcnR5KGdlbmVyYXRvciwgbmV3T2JqLmdldCgpLCBwLT5tX25vZGUpOwogCiAgICAgLy8gV2Vy
ZSB0aGVyZSBhbnkgZ2V0L3NldCBwcm9wZXJ0aWVzPwogICAgIGlmIChwKSB7CkBAIC0zMjQsMTIg
KzM3Myw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAKICAgICAgICAgICAgIC8vIEhhbmRs
ZSByZWd1bGFyIHZhbHVlcy4KICAgICAgICAgICAgIGlmIChub2RlLT5tX3R5cGUgPT0gUHJvcGVy
dHlOb2RlOjpDb25zdGFudCkgewotICAgICAgICAgICAgICAgIGlmIChub2RlLT5uYW1lKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKG5ld09iai5n
ZXQoKSwgKm5vZGUtPm5hbWUoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUtPm1fYXNzaWduKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVt
aXROb2RlKHAtPm1fbm9kZS0+bV9leHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdERpcmVjdFB1dEJ5VmFsKG5ld09iai5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBn
ZW5lcmF0b3IuZW1pdE5vZGUocC0+bV9ub2RlLT5tX2Fzc2lnbikpOworICAgICAgICAgICAgICAg
IGVtaXRDb25zdGFudFByb3BlcnR5KGdlbmVyYXRvciwgbmV3T2JqLmdldCgpLCBub2RlKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
MzcwLDE3ICs0MTQsNDggQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTZXQgc3VwZXIgb24g
Z2V0dGVyICYgc2V0dGVyLgorCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEdldHRlclNl
dHRlcihuZXdPYmouZ2V0KCksICpub2RlLT5uYW1lKCksIGdldHRlclJlZy5nZXQoKSwgc2V0dGVy
UmVnLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG5ld09iai5nZXQoKSk7CisgICAgcmV0dXJuIGRz
dDsKK30KKworc3RhdGljIHZvaWQgZW1pdFB1dEhvbWVPYmplY3QoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZnVuY3Rpb24sIFJlZ2lzdGVySUQqIGhvbWVPYmplY3Qp
Cit7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGZ1bmN0aW9uLCBnZW5lcmF0b3IucHJvcGVy
dHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSwgaG9tZU9iamVjdCk7Cit9CisKK3ZvaWQg
UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogbmV3T2JqLCBQcm9wZXJ0eU5vZGUqIG5vZGUpCit7Cisg
ICAgaWYgKG5vZGUtPm5hbWUoKSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUg
PSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS0+bV9hc3NpZ24pOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdERpcmVjdFB1dEJ5SWQobmV3T2JqLCAqbm9kZS0+bmFtZSgpLCB2YWx1ZS5nZXQoKSk7Cisg
ICAgICAgIC8vIEZJWE1FOiBFUzYgc3BlYyBzYXlzIHdlIHNob3VsZCBvbmx5IHN0b3JlIGhvbWVP
YmplY3Qgd2hlbiB0aGUgZnVuY3Rpb24gaGFzICJzdXBlciIKKyAgICAgICAgLy8gYnV0IHdlIGNh
bid0IGVhc2lseSBkZXRlcm1pbmUgaXQgaGVyZSBzaW5jZSB3ZSBsYXppbHkgZXZhbHVhdGUgdGhl
IGZ1bmN0aW9uIGJvZHkuCisgICAgICAgIGlmIChtX2lzTWV0aG9kTGlzdCkKKyAgICAgICAgICAg
IGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgdmFsdWUuZ2V0KCksIG5ld09iaik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCFtX2lzTWV0aG9kTGlzdCk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLT5t
X2V4cHJlc3Npb24pOworICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlWYWwobmV3T2JqLCBw
cm9wZXJ0eU5hbWUuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLT5tX2Fzc2lnbikpOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJhY2tldEFjY2Vzc29yTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBCcmFja2V0
QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogeworICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBnZW5lcmF0ZSB0aGUgcHJvZmlsZXIgaW5mbz8KKyAg
ICAgICAgaWYgKG1fc3Vic2NyaXB0LT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZCA9IHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZh
bHVlKCk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9y
KSwgaWQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGVtaXRTdXBlckJhc2VGb3JDYWxsZWUo
Z2VuZXJhdG9yKSwgZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KSk7CisgICAgfQogICAg
IGlmIChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSAKICAgICAgICAgJiYgZ2VuZXJhdG9yLndpbGxS
ZXNvbHZlVG9Bcmd1bWVudHMoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVu
dGlmaWVyKCkpCiAgICAgICAgICYmICFnZW5lcmF0b3Iuc3ltYm9sVGFibGUoKS5zbG93QXJndW1l
bnRzKCkpIHsKQEAgLTQyNSw3ICs1MDAsNyBAQCBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcgogICAg
IH0KIAogbm9uQXJndW1lbnRzUGF0aDoKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0g
bV9iYXNlLT5pc1N1cGVyTm9kZSgpID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3Ip
IDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZ2lzdGVy
SUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVn
aXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZpbmFsRGVzdCwgYmFzZS5nZXQo
KSwgbV9pZGVudCk7CkBAIC01MTIsNyArNTg3LDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOworICAgIGlmIChtX2V4cHItPmlz
U3VwZXJOb2RlKCkpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMu
dGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgICAgIFJlZ2lz
dGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KHJldHVyblZhbHVlLmdldCgpLCBm
dW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShnZW5l
cmF0b3IudGhpc1JlZ2lzdGVyKCksIHJldCk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQog
ICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQo
KSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlw
ZVByb2ZpbGVyKCkpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5W
YWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxw
dHIpOwpAQCAtNTYzLDEzICs2NDMsMTcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2
ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogCiBSZWdp
c3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworICAgIGJvb2wgYmFzZUlz
U3VwZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJh
c2UgPSBiYXNlSXNTdXBlciA/IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9yKSA6IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0
eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCks
IHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0g
Z2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJu
VmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsK
ICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAg
IGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdl
dCgpKTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShj
YWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1Jl
Z2lzdGVyKCksIGJhc2UuZ2V0KCkpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5l
bWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNv
ZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKQEAgLTU4NSw5ICs2NjksMTQgQEAgUmVn
aXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2kKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBn
ZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
dHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQo
KSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsK
LSAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9i
YXNlKTsKKyAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOworICAg
IGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgZWxzZQor
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
bV9iYXNlKTsKKwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lv
bkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwotICAg
IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgbV9pZGVudCk7CisgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9u
LmdldCgpLCBiYXNlSXNTdXBlciA/IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9yKSA6
IGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwogICAgIFJlZ2lzdGVySUQq
IHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0
KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigp
KSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCks
IFByb2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKQEAgLTky
OSw2ICsxMDE4LDggQEAgUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3QKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwogCiAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OworICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBlbWl0VGhy
b3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVy
dHkiKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwogfQogCkBAIC05MzksNiAr
MTAzMCw4IEBAIFJlZ2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklECiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgaWYg
KG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5j
ZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIpOwogICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0KSwgcjAuZ2V0KCksIG1faWRlbnQpOwogfQogCkBAIC0yNzQ0LDcgKzI4MzcsNTUgQEAg
UmVnaXN0ZXJJRCogRnVuY0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCoKIHsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROZXdG
dW5jdGlvbkV4cHJlc3Npb24oZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdGhpcyk7
CiB9Ci0gICAgCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDbGFzc0RlY2xO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIENsYXNzRGVjbE5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNsYXNzSGVyaXRhZ2U7CisgICAgaWYg
KG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKSB7CisgICAgICAgIGNsYXNzSGVyaXRhZ2UgPSBnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjbGFzc0hl
cml0YWdlLmdldCgpLCBtX3BhcmVudENsYXNzRXhwcmVzc2lvbik7CisgICAgfQorCisgICAgLy8g
RklYTUU6IFdoZW4gYmFzZSBjbGFzcycgY29uc3R1cmN0b3IgaXMgbmV2ZXIgY2FsbGVkLCB3ZSBu
ZWVkIHRvIHJldHVybiBhbiAidW5pbml0aWFsaXplZCIgb2JqZWN0LgorICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBjb25zdHJ1Y3RvciA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fY29uc3RydWN0
b3JEZWNsYXJhdGlvbik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvdHlwZSA9IGdlbmVy
YXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGNvbnN0cnVjdG9yLmdl
dCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAgaWYgKCFjbGFz
c0hlcml0YWdlICYmICFtX3N0YXRpY01ldGhvZHMgJiYgIW1faW5zdGFuY2VNZXRob2RzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoY2xhc3NIZXJpdGFnZSkgeworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvdG9QYXJlbnQgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAg
ICAgIFJlZlB0cjxMYWJlbD4gY2xhc3NIZXJpdGFnZUlzTnVsbCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOworICAgICAgICBSZWZQdHI8TGFiZWw+IHByb3RvUGFyZW50SXNTZXQgPSBnZW5lcmF0b3Iu
bmV3TGFiZWwoKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9y
LmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIHByb3RvUGFyZW50LmdldCgpLCBjbGFzc0hlcml0YWdl
LmdldCgpKSwgY2xhc3NIZXJpdGFnZUlzTnVsbC5nZXQoKSk7CisKKyAgICAgICAgLy8gRklYTUU6
IFRocm93IFR5cGVFcnJvciBpZiBpc0NvbnN0cnVjdG9yKHBhcmVudENsYXNzKSBpcyBmYWxzZSBv
ciBpdCdzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLgorICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5
SWQocHJvdG9QYXJlbnQuZ2V0KCksIGNsYXNzSGVyaXRhZ2UuZ2V0KCksIGdlbmVyYXRvci5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKKyAgICAgICAgLy8gRklYTUU6IFRocm93IFR5cGVFcnJv
ciBpZiBUeXBlKHByb3RvUGFyZW50KSBpcyBub3QgT2JqZWN0IG9yIG51bGwuCisKKyAgICAgICAg
Ly8gRVM2IGRyYWZ0IGRvZXNuJ3Qgc3RvcmUgaG9tZU9iamVjdCBvbiB0aGUgY29uc3RydWN0b3Ig
YnV0IHRoaXMgd291bGQgbWFrZSBzdXBwb3J0aW5nICJuZXcgc3VwZXIiIGluIGNvbnN0cnVjdG9y
IGN1bWJlcnNvbWUuCisgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgY29uc3Ry
dWN0b3IuZ2V0KCksIHByb3RvdHlwZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGly
ZWN0UHV0QnlJZChjb25zdHJ1Y3Rvci5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWRQcml2YXRlTmFtZSwKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzQm9vbGVhbih0cnVlKSkpOwor
CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdl
bmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b1BhcmVudC5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChwcm90b1BhcmVudElzU2V0LmdldCgpKTsK
KworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNsYXNzSGVyaXRhZ2VJc051bGwuZ2V0KCkp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQocHJvdG90eXBlLmdldCgpLCBn
ZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgY2xhc3NIZXJpdGFnZS5n
ZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChwcm90b1BhcmVudElzU2V0Lmdl
dCgpKTsKKyAgICB9CisKKyAgICBpZiAobV9zdGF0aWNNZXRob2RzKQorICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoY29uc3RydWN0b3IuZ2V0KCksIG1fc3RhdGljTWV0aG9kcyk7CisKKyAgICBp
ZiAobV9pbnN0YW5jZU1ldGhvZHMpCisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShwcm90b3R5
cGUuZ2V0KCksIG1faW5zdGFuY2VNZXRob2RzKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0KIFJlZ2lzdGVySUQqIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCmluZGV4IDk0YjMwNjMuLmNmMThj
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBAIC0xNjYs
NiArMTY2LDM0IEBAIHB1YmxpYzoKICAgICAgICAgdXNlc1RoaXMoKTsKICAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgVGhpc05vZGUobG9jYXRpb24pOwogICAgIH0KKyAgICBFeHBy
ZXNzaW9uTm9kZSogc3VwZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogQWRkIGFuZCBjYWxsIHVzZXNTdXBlcigpOworICAgICAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdXBlck5vZGUobG9jYXRpb24pOworICAgIH0K
KyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlU3VwZXJDYWxsKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50cywgY29uc3QgSlNUZXh0UG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBlbmQpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oYXJndW1lbnRzKTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRpdm90KTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJl
bmEpIFN1cGVyTm9kZShsb2NhdGlvbik7CisgICAgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVh
dGVTdXBlckJyYWNrZXRBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIHByb3BlcnR5LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKKyAgICB7
CisgICAgICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShz
dGFydCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkaXZvdCk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShlbmQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdXBlckJyYWNrZXRB
Y2Nlc3Nvck5vZGUobG9jYXRpb24sIHByb3BlcnR5KTsKKyAgICB9CisgICAgRXhwcmVzc2lvbk5v
ZGUqIGNyZWF0ZVN1cGVyRG90QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkK
KyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdGFydCk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShkaXZvdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShlbmQpOworICAgICAgICByZXR1cm4gbmV3
IChtX3BhcnNlckFyZW5hKSBTdXBlckRvdEFjY2Vzc29yTm9kZShsb2NhdGlvbiwgKnByb3BlcnR5
KTsKKyAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBzdGFydCkKICAgICB7CiAgICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMgPT0gKmlkZW50KQpAQCAtMjczLDE3ICszMDEsMTggQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRnVu
Y3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZp
ZXIqIG5hbWUsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIFBhcmFtZXRlck5vZGUqIHBhcmFtZXRl
cnMsIHVuc2lnbmVkIG9wZW5CcmFjZU9mZnNldCwgdW5zaWduZWQgY2xvc2VCcmFjZU9mZnNldCwg
aW50IGJvZHlTdGFydExpbmUsIGludCBib2R5RW5kTGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4s
IHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0YXJ0KQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVh
dGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgUGFy
c2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbktleXdv
cmRTdGFydCkKICAgICB7Ci0gICAgICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX3Bh
cnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24sICpuYW1lLCBib2R5LCBtX3NvdXJjZUNv
ZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5
U3RhcnRMaW5lLCBzdGFydENvbHVtbiksIHBhcmFtZXRlcnMpOwotICAgICAgICBib2R5LT5zZXRM
b2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2Nh
dGlvbi5saW5lU3RhcnRPZmZzZXQpOwotICAgICAgICBib2R5LT5zZXRGdW5jdGlvbktleXdvcmRT
dGFydChmdW5jdGlvbktleXdvcmRTdGFydCk7CisgICAgICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0
ID0gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24sICppbmZvLm5hbWUs
IGluZm8uYm9keSwKKyAgICAgICAgICAgIG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihpbmZv
Lm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFydExp
bmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5wYXJhbWV0ZXJzKTsKKyAgICAgICAgaW5m
by5ib2R5LT5zZXRMb2MoaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlFbmRMaW5lLCBsb2Nh
dGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgaW5m
by5ib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChmdW5jdGlvbktleXdvcmRTdGFydCk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3Jl
YXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVu
c2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCisgICAgRnVuY3Rpb25Cb2R5
Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2Nh
dGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRD
b2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQsIEpTUGFyc2Vy
Q29uc3RydWN0b3JLaW5kIHRoaXNNb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgRnVuY3Rpb25Cb2R5Tm9kZShtX3BhcnNlckFyZW5hLCBzdGFydExvY2F0aW9u
LCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgaW5TdHJpY3RDb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25Cb2R5Tm9kZShtX3Bh
cnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENv
bHVtbiwgaW5TdHJpY3RDb250ZXh0LCB0aGlzTW9kZSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRG
dW5jdGlvbk5hbWVTdGFydChGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBpbnQgZnVuY3Rpb25OYW1l
U3RhcnQpCkBAIC0yOTEsMjAgKzMyMCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIGJvZHktPnNldEZ1
bmN0aW9uTmFtZVN0YXJ0KGZ1bmN0aW9uTmFtZVN0YXJ0KTsKICAgICB9CiAgICAgCi0gICAgTkVW
RVJfSU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9v
bCwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgUGFyYW1ldGVyTm9kZSogcGFyYW1zLCBGdW5jdGlv
bkJvZHlOb2RlKiBib2R5LCB1bnNpZ25lZCBvcGVuQnJhY2VPZmZzZXQsIHVuc2lnbmVkIGNsb3Nl
QnJhY2VPZmZzZXQsIGludCBib2R5U3RhcnRMaW5lLCBpbnQgYm9keUVuZExpbmUsIHVuc2lnbmVk
IGJvZHlTdGFydENvbHVtbiwgdW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNldCkKKyAgICBORVZF
Ul9JTkxJTkUgUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29s
LAorICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbklu
Zm88QVNUQnVpbGRlcj4mIGluZm8sIHVuc2lnbmVkIGdldE9yU2V0U3RhcnRPZmZzZXQpCiAgICAg
ewogICAgICAgICBBU1NFUlQobmFtZSk7Ci0gICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRM
aW5lLCBib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFy
dE9mZnNldCk7Ci0gICAgICAgIGJvZHktPnNldEluZmVycmVkTmFtZSgqbmFtZSk7Ci0gICAgICAg
IGJvZHktPnNldEZ1bmN0aW9uS2V5d29yZFN0YXJ0KGdldE9yU2V0U3RhcnRPZmZzZXQpOwotICAg
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKm5hbWUsIG5ldyAo
bV9wYXJzZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCBtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5udWxsSWRlbnRpZmllciwgYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5C
cmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGluZSwgYm9keVN0YXJ0Q29s
dW1uKSwgcGFyYW1zKSwgdHlwZSk7CisgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9k
eVN0YXJ0TGluZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0
aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIGluZm8uYm9keS0+c2V0SW5mZXJyZWROYW1l
KCpuYW1lKTsKKyAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChnZXRP
clNldFN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJv
cGVydHlOb2RlKCpuYW1lLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlv
biwgbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGluZm8uYm9keSwgbV9zb3Vy
Y2VDb2RlLT5zdWJFeHByZXNzaW9uKGluZm8ub3BlbkJyYWNlT2Zmc2V0LCBpbmZvLmNsb3NlQnJh
Y2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5U3RhcnRDb2x1bW4pLCBpbmZv
LnBhcmFtZXRlcnMpLCB0eXBlKTsKICAgICB9CiAgICAgCi0gICAgTkVWRVJfSU5MSU5FIFByb3Bl
cnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSogdm0sIFBhcnNlckFyZW5h
JiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlO
b2RlOjpUeXBlIHR5cGUsIGJvb2wsIGRvdWJsZSBuYW1lLCBQYXJhbWV0ZXJOb2RlKiBwYXJhbXMs
IEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIHVuc2lnbmVkIG9wZW5CcmFjZU9mZnNldCwgdW5zaWdu
ZWQgY2xvc2VCcmFjZU9mZnNldCwgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5RW5kTGluZSwg
dW5zaWduZWQgYm9keVN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0KQor
ICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVy
dHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLCBkb3VibGUgbmFtZSwg
Y29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBnZXRP
clNldFN0YXJ0T2Zmc2V0KQogICAgIHsKLSAgICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExp
bmUsIGJvZHlFbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0
T2Zmc2V0KTsKLSAgICAgICAgYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JTZXRT
dGFydE9mZnNldCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5
Tm9kZShwYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIo
dm0sIG5hbWUpLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgdm0t
PnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4
cHJlc3Npb24ob3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5l
LCBib2R5U3RhcnRDb2x1bW4pLCBwYXJhbXMpLCB0eXBlKTsKKyAgICAgICAgaW5mby5ib2R5LT5z
ZXRMb2MoaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlFbmRMaW5lLCBsb2NhdGlvbi5zdGFy
dE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgaW5mby5ib2R5LT5z
ZXRGdW5jdGlvbktleXdvcmRTdGFydChnZXRPclNldFN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKHBhcnNlckFyZW5hLmlkZW50aWZp
ZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcih2bSwgbmFtZSksIG5ldyAobV9wYXJzZXJB
cmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCB2bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50
aWZpZXIsIGluZm8uYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGluZm8ub3BlbkJy
YWNlT2Zmc2V0LCBpbmZvLmNsb3NlQnJhY2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0TGluZSwgaW5m
by5ib2R5U3RhcnRDb2x1bW4pLCBpbmZvLnBhcmFtZXRlcnMpLCB0eXBlKTsKICAgICB9CiAKICAg
ICBBcmd1bWVudHNOb2RlKiBjcmVhdGVBcmd1bWVudHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEFyZ3VtZW50c05vZGUoKTsgfQpAQCAtMzM2LDE0ICszNjYsMjMgQEAgcHVibGljOgog
ICAgIENsYXVzZUxpc3ROb2RlKiBjcmVhdGVDbGF1c2VMaXN0KENhc2VDbGF1c2VOb2RlKiBjbGF1
c2UpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ2xhdXNlTGlzdE5vZGUoY2xhdXNlKTsg
fQogICAgIENsYXVzZUxpc3ROb2RlKiBjcmVhdGVDbGF1c2VMaXN0KENsYXVzZUxpc3ROb2RlKiB0
YWlsLCBDYXNlQ2xhdXNlTm9kZSogY2xhdXNlKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IENsYXVzZUxpc3ROb2RlKHRhaWwsIGNsYXVzZSk7IH0KIAotICAgIFN0YXRlbWVudE5vZGUqIGNy
ZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXIqIG5hbWUsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIFBhcmFtZXRlck5v
ZGUqIHBhcmFtZXRlcnMsIHVuc2lnbmVkIG9wZW5CcmFjZU9mZnNldCwgdW5zaWduZWQgY2xvc2VC
cmFjZU9mZnNldCwgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5RW5kTGluZSwgdW5zaWduZWQg
Ym9keVN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFydCkKKyAgICBTdGF0
ZW1lbnROb2RlKiBjcmVhdGVGdW5jRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGluZm8sIHVu
c2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0YXJ0KQogICAgIHsKLSAgICAgICAgRnVuY0RlY2xOb2Rl
KiBkZWNsID0gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRGVjbE5vZGUobG9jYXRpb24sICpuYW1l
LCBib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlT2Zmc2V0LCBjbG9z
ZUJyYWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4pLCBwYXJhbWV0ZXJz
KTsKLSAgICAgICAgaWYgKCpuYW1lID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykK
KyAgICAgICAgRnVuY0RlY2xOb2RlKiBkZWNsID0gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRGVj
bE5vZGUobG9jYXRpb24sICppbmZvLm5hbWUsIGluZm8uYm9keSwKKyAgICAgICAgICAgIG1fc291
cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJy
YWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5m
by5wYXJhbWV0ZXJzKTsKKyAgICAgICAgaWYgKCppbmZvLm5hbWUgPT0gbV92bS0+cHJvcGVydHlO
YW1lcy0+YXJndW1lbnRzKQogICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwogICAgICAgICBt
X3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9ucy5hcHBlbmQoZGVjbC0+Ym9keSgpKTsKLSAgICAgICAg
Ym9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9m
ZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgYm9keS0+c2V0RnVuY3Rp
b25LZXl3b3JkU3RhcnQoZnVuY3Rpb25LZXl3b3JkU3RhcnQpOworICAgICAgICBpbmZvLmJvZHkt
PnNldExvYyhpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keUVuZExpbmUsIGxvY2F0aW9uLnN0
YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBpbmZvLmJvZHkt
PnNldEZ1bmN0aW9uS2V5d29yZFN0YXJ0KGZ1bmN0aW9uS2V5d29yZFN0YXJ0KTsKKyAgICAgICAg
cmV0dXJuIGRlY2w7CisgICAgfQorCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ2xhc3NEZWNs
U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uLAorICAgICAg
ICBFeHByZXNzaW9uTm9kZSogcGFyZW50Q2xhc3NFeHByZXNzaW9uLCBQcm9wZXJ0eUxpc3ROb2Rl
KiBpbnN0YW5jZU1ldGhvZHMsIFByb3BlcnR5TGlzdE5vZGUqIHN0YXRpY01ldGhvZHMsIGludCBz
dGFydExpbmUsIGludCBlbmRMaW5lKQorICAgIHsKKyAgICAgICAgQ2xhc3NEZWNsTm9kZSogZGVj
bCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgQ2xhc3NEZWNsTm9kZShsb2NhdGlvbiwgbmFtZSwgY29u
c3RydWN0b3JEZWNsYXJhdGlvbiwgcGFyZW50Q2xhc3NFeHByZXNzaW9uLCBpbnN0YW5jZU1ldGhv
ZHMsIHN0YXRpY01ldGhvZHMpOworICAgICAgICBkZWNsLT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRM
aW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuIGRlY2w7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0tleXdvcmRzLnRhYmxlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9LZXl3b3Jkcy50YWJsZQppbmRleCA1MjdlYWRhLi41Y2I1OGE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0tleXdvcmRzLnRhYmxlCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvS2V5d29yZHMudGFibGUKQEAgLTEwLDggKzEwLDEwIEBAIGZhbHNl
CQlGQUxTRVRPS0VOCiBicmVhawkJQlJFQUsKIGNhc2UJCUNBU0UKIGNhdGNoCQlDQVRDSAorY2xh
c3MJCUNMQVNTVE9LRU4KIGNvbnN0CQlDT05TVFRPS0VOCiBkZWZhdWx0CQlERUZBVUxUCitleHRl
bmRzCQlFWFRFTkRTCiBmaW5hbGx5CQlGSU5BTExZCiBmb3IJCUZPUgogaW5zdGFuY2VvZglJTlNU
QU5DRU9GCkBAIC0yOCw2ICszMCw4IEBAIGRvCQlETwogd2hpbGUJCVdISUxFCiBlbHNlCQlFTFNF
CiBpbgkJSU5UT0tFTgorc3RhdGljCQlTVEFUSUNUT0tFTgorc3VwZXIgICAgICAgICAgIFNVUEVS
CiBzd2l0Y2gJCVNXSVRDSAogdGhyb3cJCVRIUk9XCiB0cnkJCVRSWQpAQCAtMzYsMTIgKzQwLDkg
QEAgd2l0aAkJV0lUSAogZGVidWdnZXIJREVCVUdHRVIKIAogIyBSZXNlcnZlZCBmb3IgZnV0dXJl
IHVzZS4KLWNsYXNzICAgICAgICAgICBSRVNFUlZFRAogZW51bSAgICAgICAgICAgIFJFU0VSVkVE
CiBleHBvcnQgICAgICAgICAgUkVTRVJWRUQKLWV4dGVuZHMgICAgICAgICBSRVNFUlZFRAogaW1w
b3J0ICAgICAgICAgIFJFU0VSVkVECi1zdXBlciAgICAgICAgICAgUkVTRVJWRUQKIAogIyBSZXNl
cnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBzdHJpY3QgY29kZS4KIGltcGxlbWVudHMgICAgICBSRVNF
UlZFRF9JRl9TVFJJQ1QKQEAgLTUxLDcgKzUyLDYgQEAgcGFja2FnZSAgICAgICAgIFJFU0VSVkVE
X0lGX1NUUklDVAogcHJpdmF0ZSAgICAgICAgIFJFU0VSVkVEX0lGX1NUUklDVAogcHJvdGVjdGVk
ICAgICAgIFJFU0VSVkVEX0lGX1NUUklDVAogcHVibGljICAgICAgICAgIFJFU0VSVkVEX0lGX1NU
UklDVAotc3RhdGljICAgICAgICAgIFJFU0VSVkVEX0lGX1NUUklDVAogeWllbGQgICAgICAgICAg
IFJFU0VSVkVEX0lGX1NUUklDVAogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCmluZGV4IGQ0OWQ0MWYuLjMwNTY2ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCkBAIC0xMDIs
NiArMTAyLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKKyAgICBpbmxpbmUg
U3VwZXJOb2RlOjpTdXBlck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKKyAg
ICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgaW5s
aW5lIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZTo6U3VwZXJCcmFja2V0QWNjZXNzb3JOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQp
CisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCisgICAgICAgICwgbV9zdWJzY3Jp
cHQoc3Vic2NyaXB0KQorICAgIHsKKyAgICB9CisKKyAgICBpbmxpbmUgU3VwZXJEb3RBY2Nlc3Nv
ck5vZGU6OlN1cGVyRG90QWNjZXNzb3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxv
Y2F0aW9uKQorICAgICAgICAsIG1faWRlbnQoaWRlbnQpCisgICAgeworICAgIH0KKwogaW5saW5l
IFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQog
ICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1faWRlbnQoaWRl
bnQpCkBAIC0xNjgsNiArMTg1LDcgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWUKICAgICAgICAg
OiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX25vZGUobm9kZSkKICAgICAg
ICAgLCBtX25leHQoMCkKKyAgICAgICAgLCBtX2lzTWV0aG9kTGlzdChmYWxzZSkKICAgICB7CiAg
ICAgfQogCkBAIC0xNzUsNiArMTkzLDcgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWUKICAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX25vZGUobm9kZSkKICAg
ICAgICAgLCBtX25leHQoMCkKKyAgICAgICAgLCBtX2lzTWV0aG9kTGlzdChmYWxzZSkKICAgICB7
CiAgICAgICAgIGxpc3QtPm1fbmV4dCA9IHRoaXM7CiAgICAgfQpAQCAtNzY4LDYgKzc4NywxOSBA
QCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IElkZW50aWZpZQogICAgICAgICBtX2JvZHktPmZpbmlzaFBhcnNpbmco
c291cmNlLCBwYXJhbWV0ZXIsIGlkZW50LCBGdW5jdGlvbkRlY2xhcmF0aW9uKTsKICAgICB9CiAK
KyAgICBpbmxpbmUgQ2xhc3NEZWNsTm9kZTo6Q2xhc3NEZWNsTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9uTm9kZSog
Y29uc3RydWN0b3JEZWNsYXJhdGlvbiwKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHBhcmVudENs
YXNzRXhwcmVzc2lvbiwgUHJvcGVydHlMaXN0Tm9kZSogaW5zdGFuY2VNZXRob2RzLCBQcm9wZXJ0
eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzKQorICAgICAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRp
b24pCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgICAgICwgbV9jb25zdHJ1Y3RvckRlY2xh
cmF0aW9uKGNvbnN0cnVjdG9yRGVjbGFyYXRpb24pCisgICAgICAgICwgbV9wYXJlbnRDbGFzc0V4
cHJlc3Npb24ocGFyZW50Q2xhc3NFeHByZXNzaW9uKQorICAgICAgICAsIG1faW5zdGFuY2VNZXRo
b2RzKGluc3RhbmNlTWV0aG9kcykKKyAgICAgICAgLCBtX3N0YXRpY01ldGhvZHMoc3RhdGljTWV0
aG9kcykKKyAgICB7CisgICAgICAgIGlmIChpbnN0YW5jZU1ldGhvZHMpCisgICAgICAgICAgICBp
bnN0YW5jZU1ldGhvZHMtPnNldElzTWV0aG9kTGlzdCgpOworICAgIH0KKwogICAgIGlubGluZSBD
YXNlQ2xhdXNlTm9kZTo6Q2FzZUNsYXVzZU5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIsIFNvdXJj
ZUVsZW1lbnRzKiBzdGF0ZW1lbnRzKQogICAgICAgICA6IG1fZXhwcihleHByKQogICAgICAgICAs
IG1fc3RhdGVtZW50cyhzdGF0ZW1lbnRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVz
LmNwcAppbmRleCA5Njk2OTI0Li45YmM0YTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmNwcApAQCAtMTY4LDEyICsxNjgsMTMgQEAgRnVuY3Rpb25QYXJhbWV0ZXJzOjp+RnVu
Y3Rpb25QYXJhbWV0ZXJzKCkKICAgICAgICAgcGF0dGVybnMoKVtpXS0+ZGVyZWYoKTsKIH0KIAot
RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRM
b2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBp
c0luU3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoUGFy
c2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25l
ZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0cmljdENvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JL
aW5kIGNvbnN0cnVjdG9yS2luZCkKICAgICA6IFN0YXRlbWVudE5vZGUoZW5kTG9jYXRpb24pCiAg
ICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29s
dW1uKQogICAgICwgbV9zdGFydFN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRpb24uc3RhcnRPZmZzZXQp
CiAgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KGlzSW5TdHJpY3RDb250ZXh0KQorICAgICwgbV9j
b25zdHJ1Y3RvcktpbmRJc0Jhc2UoY29uc3RydWN0b3JLaW5kID09IEpTUGFyc2VyQ29uc3RydWN0
b3JLaW5kOjpCYXNlKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5k
ZXggNmY1NWI0Mi4uMjRiNWMwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApA
QCAtMTYzLDYgKzE2Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNTdWJ0cmFjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0Jvb2xlYW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNTcHJlYWRFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAg
dmlydHVhbCBib29sIGlzU3VwZXJOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgTGFiZWwqLCBMYWJlbCosIEZhbGxUaHJvdWdoTW9kZSk7CiAKQEAgLTQyOCw2
ICs0MjksMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlk
ZTsKICAgICB9OwogCisgICAgY2xhc3MgU3VwZXJOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1cGVyTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1cGVyTm9k
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
IG92ZXJyaWRlOworICAgIH07CisKKyAgICBjbGFzcyBTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUg
ZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3Vw
ZXJCcmFja2V0QWNjZXNzb3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiBzdWJzY3JpcHQpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92
ZXJyaWRlOworCisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX3N1YnNjcmlwdDsKKyAgICB9Owor
CisgICAgY2xhc3MgU3VwZXJEb3RBY2Nlc3Nvck5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VwZXJEb3RBY2Nlc3Nvck5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYpOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOworCisgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IG1faWRlbnQ7CisgICAgfTsKKwogICAgIGNsYXNzIFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlc29sdmVOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3Rh
cnQpOwpAQCAtNTA0LDExICs1MzQsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFByb3Bl
cnR5TGlzdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2RlKik7CiAgICAg
ICAgIFByb3BlcnR5TGlzdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2Rl
KiwgUHJvcGVydHlMaXN0Tm9kZSopOwogCisgICAgICAgIHZvaWQgc2V0SXNNZXRob2RMaXN0KCkg
eyBtX2lzTWV0aG9kTGlzdCA9IHRydWU7IH0KKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJp
ZGU7CiAKICAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGVtaXRDb25zdGFudFByb3BlcnR5KEJ5
dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIFByb3BlcnR5Tm9kZSopOworCiAgICAgICAg
IFByb3BlcnR5Tm9kZSogbV9ub2RlOwogICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBtX25leHQ7
CisgICAgICAgIGJvb2wgbV9pc01ldGhvZExpc3Q7CiAgICAgfTsKIAogICAgIGNsYXNzIE9iamVj
dExpdGVyYWxOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTE1MjYsNyArMTU2MSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgdXNpbmcgUGFyc2VyQXJl
bmFEZWxldGFibGU6Om9wZXJhdG9yIG5ldzsKIAotICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFBh
cnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJv
b2wgaXNJblN0cmljdENvbnRleHQpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFBhcnNlckFy
ZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJ
blN0cmljdENvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kKTsKIAogICAgICAgICBGdW5j
dGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMu
Z2V0KCk7IH0KIApAQCAtMTU1NCw2ICsxNTg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgaW50IHN0YXJ0U3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0U3RhcnRPZmZz
ZXQ7IH0KICAgICAgICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNJblN0cmljdENvbnRleHQ7IH0KKyAgICAgICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRJc0Jhc2Uo
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdG9yS2luZElzQmFzZTsgfQogCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CkBAIC0xNTY2LDcgKzE2MDIsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAgICAgICAgIFNv
dXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgICAgIGludCBtX3N0YXJ0U3RhcnRPZmZzZXQ7Ci0gICAg
ICAgIGJvb2wgbV9pc0luU3RyaWN0Q29udGV4dDsKKyAgICAgICAgYm9vbCBtX2lzSW5TdHJpY3RD
b250ZXh0IDogMTsKKyAgICAgICAgYm9vbCBtX2NvbnN0cnVjdG9yS2luZElzQmFzZSA6IDE7CiAg
ICAgfTsKIAogICAgIGNsYXNzIEZ1bmN0aW9uTm9kZSBmaW5hbCA6IHB1YmxpYyBTY29wZU5vZGUg
ewpAQCAtMTcyMyw2ICsxNzYwLDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGdW5jdGlv
bkJvZHlOb2RlKiBtX2JvZHk7CiAgICAgfTsKIAorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW5o
ZXJpdCBmcm9tIFRocm93YWJsZUV4cHJlc3Npb25EYXRhLgorICAgIGNsYXNzIENsYXNzRGVjbE5v
ZGUgZmluYWwgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBD
bGFzc0RlY2xOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBF
eHByZXNzaW9uTm9kZSogY29uc3RydWN0b3JEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgIEV4cHJl
c3Npb25Ob2RlKiBwYXJlbnRDbGFzcywgUHJvcGVydHlMaXN0Tm9kZSogaW5zdGFuY2VNZXRob2Rz
LCBQcm9wZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzKTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIG92ZXJyaWRlOworCisgICAgICAgIElkZW50aWZpZXIgbV9uYW1lOworICAgICAg
ICBFeHByZXNzaW9uTm9kZSogbV9jb25zdHJ1Y3RvckRlY2xhcmF0aW9uOworICAgICAgICBFeHBy
ZXNzaW9uTm9kZSogbV9wYXJlbnRDbGFzc0V4cHJlc3Npb247CisgICAgICAgIFByb3BlcnR5TGlz
dE5vZGUqIG1faW5zdGFuY2VNZXRob2RzOworICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBtX3N0
YXRpY01ldGhvZHM7CisgICAgfTsKKwogICAgIGNsYXNzIENhc2VDbGF1c2VOb2RlIDogcHVibGlj
IFBhcnNlckFyZW5hRnJlZWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgQ2FzZUNsYXVzZU5v
ZGUoRXhwcmVzc2lvbk5vZGUqLCBTb3VyY2VFbGVtZW50cyogPSAwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBjMjVmMjFhLi5iMTIwZjdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0yMTMsNiArMjEzLDcgQEAgUGFyc2Vy
PExleGVyVHlwZT46OlBhcnNlcihWTSogdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVu
Y3Rpb25QYXJhbWV0ZXJzKgogICAgIG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQg
PSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsKICAgICBtX2Z1bmN0aW9uQ2FjaGUgPSB2bS0+YWRkU291
cmNlUHJvdmlkZXJDYWNoZShzb3VyY2UucHJvdmlkZXIoKSk7CiAgICAgU2NvcGVSZWYgc2NvcGUg
PSBwdXNoU2NvcGUoKTsKKwogICAgIGlmIChwYXJzZXJNb2RlID09IEpTUGFyc2VGdW5jdGlvbkNv
ZGUpCiAgICAgICAgIHNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CiAgICAgaWYgKHN0cmljdG5lc3Mg
PT0gSlNQYXJzZVN0cmljdCkKQEAgLTExNTAsNiArMTE1MSwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RhdGVt
ZW50KFRyZQogICAgIGNhc2UgQ09OU1RUT0tFTjoKICAgICAgICAgcmVzdWx0ID0gcGFyc2VDb25z
dERlY2xhcmF0aW9uKGNvbnRleHQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENMQVNTVE9L
RU46CisgICAgICAgIGZhaWxJZkZhbHNlKG1fc3RhdGVtZW50RGVwdGggPT0gMSwgIkNsYXNzIGRl
Y2xhcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIGEgbGV4aWNhbGx5IG5lc3RlZCBzdGF0ZW1lbnQi
KTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKGNvbnRleHQpOworICAg
ICAgICBicmVhazsKICAgICBjYXNlIEZVTkNUSU9OOgogICAgICAgICBmYWlsSWZGYWxzZUlmU3Ry
aWN0KG1fc3RhdGVtZW50RGVwdGggPT0gMSwgIlN0cmljdCBtb2RlIGRvZXMgbm90IGFsbG93IGZ1
bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBhIGxleGljYWxseSBuZXN0ZWQgc3RhdGVtZW50Iik7CiAg
ICAgICAgIHJlc3VsdCA9IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihjb250ZXh0KTsKQEAgLTEy
NDAsNyArMTI0NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZvcm1hbFBh
cmFtZXRlckxpc3QgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRm9yCiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5j
dGlvbkJvZHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVy
JiBjb250ZXh0KQordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYgY29udGV4
dCwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKQogewogICAgIEpTVG9r
ZW5Mb2NhdGlvbiBzdGFydExvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwpAQCAtMTI0OCwxNCArMTI1MywxNCBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvbkJvZHkgUGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlRnVuY3Rpb25CbwogCiAgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CiAgICAg
ICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7Ci0gICAgICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCks
IHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCks
IHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1vZGUoKSwgY29uc3RydWN0b3JLaW5kKTsK
ICAgICB9CiAgICAgRGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRo
KTsKICAgICBtX3N0YXRlbWVudERlcHRoID0gMDsKICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6
RnVuY3Rpb25Cb2R5QnVpbGRlciBib2R5QnVpbGRlcihjb25zdF9jYXN0PFZNKj4obV92bSksIG1f
bGV4ZXIuZ2V0KCkpOwogICAgIGZhaWxJZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHMoYm9keUJ1
aWxkZXIsIENoZWNrRm9yU3RyaWN0TW9kZSksICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGZ1
bmN0aW9uIik7CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5Db2x1bW4oKTsKLSAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2Nh
dGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCkpOworICAgIHJldHVy
biBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9u
KCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1vZGUoKSwgY29uc3RydWN0b3JLaW5k
KTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIqIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShGdW5jdGlv
blBhcnNlTW9kZSBtb2RlKQpAQCAtMTI2NywxMyArMTI3MiwxNSBAQCBzdGF0aWMgY29uc3QgY2hh
ciogc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUpCiAgICAgICAg
IHJldHVybiAic2V0dGVyIjsKICAgICBjYXNlIEZ1bmN0aW9uTW9kZToKICAgICAgICAgcmV0dXJu
ICJmdW5jdGlvbiI7CisgICAgY2FzZSBNZXRob2RNb2RlOgorICAgICAgICByZXR1cm4gIm1ldGhv
ZCI7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25J
bmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWVu
dHMsIEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUs
IGNvbnN0IElkZW50aWZpZXIqJiBuYW1lLCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCYgcGFyYW1l
dGVycywgVHJlZUZ1bmN0aW9uQm9keSYgYm9keSwgdW5zaWduZWQmIG9wZW5CcmFjZU9mZnNldCwg
dW5zaWduZWQmIGNsb3NlQnJhY2VPZmZzZXQsIGludCYgYm9keVN0YXJ0TGluZSwgdW5zaWduZWQm
IGJvZHlTdGFydENvbHVtbikKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1
bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwg
Ym9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQgY29u
c3RydWN0b3JLaW5kLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+JiBpbmZvKQogewog
ICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKICAg
ICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CkBAIC0xMjgxLDE0ICsxMjg4LDE0IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAgICAgY29uc3QgSWRlbnRpZmllciogbGFzdEZ1bmN0
aW9uTmFtZSA9IG1fbGFzdEZ1bmN0aW9uTmFtZTsKICAgICBtX2xhc3RGdW5jdGlvbk5hbWUgPSBu
dWxscHRyOwogICAgIGlmIChtYXRjaChJREVOVCkpIHsKLSAgICAgICAgbmFtZSA9IG1fdG9rZW4u
bV9kYXRhLmlkZW50OwotICAgICAgICBtX2xhc3RGdW5jdGlvbk5hbWUgPSBuYW1lOworICAgICAg
ICBpbmZvLm5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICAgICAgbV9sYXN0RnVuY3Rp
b25OYW1lID0gaW5mby5uYW1lOwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGlmICghbmFtZUlz
SW5Db250YWluaW5nU2NvcGUpCi0gICAgICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0KGZ1bmN0
aW9uU2NvcGUtPmRlY2xhcmVWYXJpYWJsZShuYW1lKSwgIiciLCBuYW1lLT5pbXBsKCksICInIGlz
IG5vdCBhIHZhbGlkICIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShtb2RlKSwgIiBuYW1lIGluIHN0
cmljdCBtb2RlIik7CisgICAgICAgICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0KGZ1bmN0aW9uU2Nv
cGUtPmRlY2xhcmVWYXJpYWJsZShpbmZvLm5hbWUpLCAiJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAi
JyBpcyBub3QgYSB2YWxpZCAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIgbmFtZSBp
biBzdHJpY3QgbW9kZSIpOwogICAgIH0gZWxzZSBpZiAocmVxdWlyZW1lbnRzID09IEZ1bmN0aW9u
TmVlZHNOYW1lKSB7CiAgICAgICAgIGlmIChtYXRjaChPUEVOUEFSRU4pICYmIG1vZGUgPT0gRnVu
Y3Rpb25Nb2RlKQotICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJGdW5jdGlvbiBzdGF0ZW1lbnRz
IG11c3QgaGF2ZSBhIG5hbWUiKTsKKyAgICAgICAgICAgIHNlbWFudGljRmFpbChzdHJpbmdGb3JG
dW5jdGlvbk1vZGUobW9kZSksICIgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgICAgICBzZW1hbnRp
Y0ZhaWx1cmVEdWVUb0tleXdvcmQoc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpLCAiIG5hbWUi
KTsKICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTEyOTgsMTkgKzEzMDUsMTkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGQKICAg
ICAgICAgZmFpbFdpdGhNZXNzYWdlKCJFeHBlY3RlZCBhbiBvcGVuaW5nICcoJyBiZWZvcmUgYSAi
LCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIncyBwYXJhbWV0ZXIgbGlzdCIpOwogICAg
IH0KICAgICBpZiAoIW1hdGNoKENMT1NFUEFSRU4pKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMgPSBw
YXJzZUZvcm1hbFBhcmFtZXRlcnMoY29udGV4dCk7Ci0gICAgICAgIGZhaWxJZkZhbHNlKHBhcmFt
ZXRlcnMsICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVycyBmb3IgdGhpcyAiLCBzdHJpbmdGb3JGdW5j
dGlvbk1vZGUobW9kZSkpOworICAgICAgICBpbmZvLnBhcmFtZXRlcnMgPSBwYXJzZUZvcm1hbFBh
cmFtZXRlcnMoY29udGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNlKGluZm8ucGFyYW1ldGVycywg
IkNhbm5vdCBwYXJzZSBwYXJhbWV0ZXJzIGZvciB0aGlzICIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9k
ZShtb2RlKSk7CiAgICAgfQogICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTiwgIkV4cGVjdGVk
IGEgJyknIG9yIGEgJywnIGFmdGVyIGEgcGFyYW1ldGVyIGRlY2xhcmF0aW9uIik7CiAgICAgbWF0
Y2hPckZhaWwoT1BFTkJSQUNFLCAiRXhwZWN0ZWQgYW4gb3BlbmluZyAneycgYXQgdGhlIHN0YXJ0
IG9mIGEgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpLCAiIGJvZHkiKTsKICAgICAKLSAg
ICBvcGVuQnJhY2VPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5vZmZzZXQ7Ci0gICAgYm9keVN0YXJ0
TGluZSA9IHRva2VuTGluZSgpOwotICAgIGJvZHlTdGFydENvbHVtbiA9IG1fdG9rZW4ubV9kYXRh
Lm9mZnNldCAtIG1fdG9rZW4ubV9kYXRhLmxpbmVTdGFydE9mZnNldDsKKyAgICBpbmZvLm9wZW5C
cmFjZU9mZnNldCA9IG1fdG9rZW4ubV9kYXRhLm9mZnNldDsKKyAgICBpbmZvLmJvZHlTdGFydExp
bmUgPSB0b2tlbkxpbmUoKTsKKyAgICBpbmZvLmJvZHlTdGFydENvbHVtbiA9IG1fdG9rZW4ubV9k
YXRhLm9mZnNldCAtIG1fdG9rZW4ubV9kYXRhLmxpbmVTdGFydE9mZnNldDsKICAgICBKU1Rva2Vu
TG9jYXRpb24gc3RhcnRMb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIAogICAgIC8vIElm
IHdlIGtub3cgYWJvdXQgdGhpcyBmdW5jdGlvbiBhbHJlYWR5LCB3ZSBjYW4gdXNlIHRoZSBjYWNo
ZWQgaW5mbyBhbmQgc2tpcCB0aGUgcGFyc2VyIHRvIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgot
ICAgIGlmIChjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogY2FjaGVkSW5mbyA9IFRyZWVC
dWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hlID8gZmluZENhY2hlZEZ1bmN0aW9uSW5mbyhvcGVu
QnJhY2VPZmZzZXQpIDogMCkgeworICAgIGlmIChjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRl
bSogY2FjaGVkSW5mbyA9IFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hlID8gZmluZENh
Y2hlZEZ1bmN0aW9uSW5mbyhpbmZvLm9wZW5CcmFjZU9mZnNldCkgOiAwKSB7CiAgICAgICAgIC8v
IElmIHdlJ3JlIGluIGEgc3RyaWN0IGNvbnRleHQsIHRoZSBjYWNoZWQgZnVuY3Rpb24gaW5mbyBt
dXN0IHNheSBpdCB3YXMgc3RyaWN0IHRvby4KICAgICAgICAgQVNTRVJUKCFzdHJpY3RNb2RlKCkg
fHwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBlbmRM
b2NhdGlvbjsKQEAgLTEzMTksMjEgKzEzMjYsMjEgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGQK
ICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNl
T2Zmc2V0OwogICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBjYWNoZWRJbmZv
LT5jbG9zZUJyYWNlTGluZVN0YXJ0T2Zmc2V0OwogCi0gICAgICAgIGJvb2wgZW5kQ29sdW1uSXNP
blN0YXJ0TGluZSA9IChlbmRMb2NhdGlvbi5saW5lID09IGJvZHlTdGFydExpbmUpOworICAgICAg
ICBib29sIGVuZENvbHVtbklzT25TdGFydExpbmUgPSAoZW5kTG9jYXRpb24ubGluZSA9PSBpbmZv
LmJvZHlTdGFydExpbmUpOwogICAgICAgICBBU1NFUlQoZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQg
Pj0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgdW5zaWduZWQgYm9keUVu
ZENvbHVtbiA9IGVuZENvbHVtbklzT25TdGFydExpbmUgPwogICAgICAgICAgICAgZW5kTG9jYXRp
b24uc3RhcnRPZmZzZXQgLSBtX3Rva2VuLm1fZGF0YS5saW5lU3RhcnRPZmZzZXQgOgogICAgICAg
ICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZz
ZXQ7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1f
bG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogCi0gICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0
ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgYm9keVN0YXJ0Q29sdW1u
LCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgaW5mby5i
b2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRp
b24sIGluZm8uYm9keVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJp
Y3RNb2RlLCBjb25zdHJ1Y3RvcktpbmQpOwogICAgICAgICAKICAgICAgICAgZnVuY3Rpb25TY29w
ZS0+cmVzdG9yZUZyb21Tb3VyY2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8pOwogICAgICAgICBm
YWlsSWZGYWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVl
VmFyaWFibGVJbmZvKSwgIlBhcnNlciBlcnJvciIpOwogICAgICAgICAKLSAgICAgICAgY2xvc2VC
cmFjZU9mZnNldCA9IGNhY2hlZEluZm8tPmNsb3NlQnJhY2VPZmZzZXQ7CisgICAgICAgIGluZm8u
Y2xvc2VCcmFjZU9mZnNldCA9IGNhY2hlZEluZm8tPmNsb3NlQnJhY2VPZmZzZXQ7CiAKLSAgICAg
ICAgY29udGV4dC5zZXRGdW5jdGlvbk5hbWVTdGFydChib2R5LCBmdW5jdGlvbk5hbWVTdGFydCk7
CisgICAgICAgIGNvbnRleHQuc2V0RnVuY3Rpb25OYW1lU3RhcnQoaW5mby5ib2R5LCBmdW5jdGlv
bk5hbWVTdGFydCk7CiAgICAgICAgIG1fdG9rZW4gPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlVG9r
ZW4oKTsKICAgICAgICAgaWYgKGVuZENvbHVtbklzT25TdGFydExpbmUpCiAgICAgICAgICAgICBt
X3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0ID0gY3VycmVudExpbmVTdGFydE9mZnNl
dDsKQEAgLTEzNDEsMjMgKzEzNDgsMjQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBi
b29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGQKICAgICAg
ICAgbV9sZXhlci0+c2V0T2Zmc2V0KG1fdG9rZW4ubV9sb2NhdGlvbi5lbmRPZmZzZXQsIG1fdG9r
ZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBtX2xleGVyLT5zZXRMaW5l
TnVtYmVyKG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lKTsKIAotICAgICAgICBjb250ZXh0LnNldEVu
ZE9mZnNldChib2R5LCBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCkpOworICAgICAgICBjb250ZXh0
LnNldEVuZE9mZnNldChpbmZvLmJvZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7CiAgICAg
ICAgIAogICAgICAgICBuZXh0KCk7CisgICAgICAgIGluZm8uYm9keUVuZExpbmUgPSBtX2xhc3RU
b2tlbkVuZFBvc2l0aW9uLmxpbmU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBt
X2xhc3RGdW5jdGlvbk5hbWUgPSBsYXN0RnVuY3Rpb25OYW1lOwogICAgIFBhcnNlclN0YXRlIG9s
ZFN0YXRlID0gc2F2ZVN0YXRlKCk7Ci0gICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Cb2R5KGNvbnRl
eHQpOworICAgIGluZm8uYm9keSA9IHBhcnNlRnVuY3Rpb25Cb2R5KGNvbnRleHQsIGNvbnN0cnVj
dG9yS2luZCk7CiAgICAgcmVzdG9yZVN0YXRlKG9sZFN0YXRlKTsKLSAgICBmYWlsSWZGYWxzZShi
b2R5LCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25N
b2RlKG1vZGUpKTsKLSAgICBjb250ZXh0LnNldEVuZE9mZnNldChib2R5LCBtX2xleGVyLT5jdXJy
ZW50T2Zmc2V0KCkpOwotICAgIGlmIChmdW5jdGlvblNjb3BlLT5zdHJpY3RNb2RlKCkgJiYgbmFt
ZSkgeworICAgIGZhaWxJZkZhbHNlKGluZm8uYm9keSwgIkNhbm5vdCBwYXJzZSB0aGUgYm9keSBv
ZiB0aGlzICIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShtb2RlKSk7CisgICAgY29udGV4dC5zZXRF
bmRPZmZzZXQoaW5mby5ib2R5LCBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCkpOworICAgIGlmIChm
dW5jdGlvblNjb3BlLT5zdHJpY3RNb2RlKCkgJiYgaW5mby5uYW1lKSB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1vZGUgPT0gRnVuY3Rpb25Nb2RlKTsKLSAgICAgICAgc2VtYW50aWNGYWlsSWZU
cnVlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSwgIiciLCBuYW1lLT5p
bXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUiKTsK
LSAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0g
Km5hbWUsICInIiwgbmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1l
IGluIHN0cmljdCBtb2RlIik7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmluZm8ubmFtZSwgIiciLCBpbmZvLm5hbWUtPmltcGwo
KSwgIicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOworICAg
ICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaW5m
by5uYW1lLCAiJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBmdW5jdGlv
biBuYW1lIGluIHN0cmljdCBtb2RlIik7CiAgICAgfQotICAgIGNsb3NlQnJhY2VPZmZzZXQgPSBt
X3Rva2VuLm1fZGF0YS5vZmZzZXQ7CisgICAgaW5mby5jbG9zZUJyYWNlT2Zmc2V0ID0gbV90b2tl
bi5tX2RhdGEub2Zmc2V0OwogICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VMaW5lID0gbV90b2tlbi5t
X2RhdGEubGluZTsKICAgICB1bnNpZ25lZCBjbG9zZUJyYWNlTGluZVN0YXJ0T2Zmc2V0ID0gbV90
b2tlbi5tX2RhdGEubGluZVN0YXJ0T2Zmc2V0OwogICAgIApAQCAtMTM2NSwyNiArMTM3MywyNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZAogICAgIC8vIEFueSBmdXR1cmUgcmVwYXJzaW5nIGNh
biB0aGVuIHNraXAgdGhlIGZ1bmN0aW9uLgogICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bUZ1
bmN0aW9uTGVuZ3RoVG9DYWNoZSA9IDE2OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VQcm92
aWRlckNhY2hlSXRlbT4gbmV3SW5mbzsKLSAgICBpbnQgZnVuY3Rpb25MZW5ndGggPSBjbG9zZUJy
YWNlT2Zmc2V0IC0gb3BlbkJyYWNlT2Zmc2V0OworICAgIGludCBmdW5jdGlvbkxlbmd0aCA9IGlu
Zm8uY2xvc2VCcmFjZU9mZnNldCAtIGluZm8ub3BlbkJyYWNlT2Zmc2V0OwogICAgIGlmIChUcmVl
QnVpbGRlcjo6Q2FuVXNlRnVuY3Rpb25DYWNoZSAmJiBtX2Z1bmN0aW9uQ2FjaGUgJiYgZnVuY3Rp
b25MZW5ndGggPiBtaW5pbXVtRnVuY3Rpb25MZW5ndGhUb0NhY2hlKSB7CiAgICAgICAgIFNvdXJj
ZVByb3ZpZGVyQ2FjaGVJdGVtQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAgICAgICAg
IHBhcmFtZXRlcnMuZnVuY3Rpb25OYW1lU3RhcnQgPSBmdW5jdGlvbk5hbWVTdGFydDsKICAgICAg
ICAgcGFyYW1ldGVycy5jbG9zZUJyYWNlTGluZSA9IGNsb3NlQnJhY2VMaW5lOwotICAgICAgICBw
YXJhbWV0ZXJzLmNsb3NlQnJhY2VPZmZzZXQgPSBjbG9zZUJyYWNlT2Zmc2V0OworICAgICAgICBw
YXJhbWV0ZXJzLmNsb3NlQnJhY2VPZmZzZXQgPSBpbmZvLmNsb3NlQnJhY2VPZmZzZXQ7CiAgICAg
ICAgIHBhcmFtZXRlcnMuY2xvc2VCcmFjZUxpbmVTdGFydE9mZnNldCA9IGNsb3NlQnJhY2VMaW5l
U3RhcnRPZmZzZXQ7CiAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPmZpbGxQYXJhbWV0ZXJzRm9yU291
cmNlUHJvdmlkZXJDYWNoZShwYXJhbWV0ZXJzKTsKICAgICAgICAgbmV3SW5mbyA9IFNvdXJjZVBy
b3ZpZGVyQ2FjaGVJdGVtOjpjcmVhdGUocGFyYW1ldGVycyk7CiAKICAgICB9Ci0gICAgY29udGV4
dC5zZXRGdW5jdGlvbk5hbWVTdGFydChib2R5LCBmdW5jdGlvbk5hbWVTdGFydCk7CisgICAgY29u
dGV4dC5zZXRGdW5jdGlvbk5hbWVTdGFydChpbmZvLmJvZHksIGZ1bmN0aW9uTmFtZVN0YXJ0KTsK
ICAgICAKICAgICBmYWlsSWZGYWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRl
cjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSwgIlBhcnNlciBlcnJvciIpOwogICAgIG1hdGNoT3JG
YWlsKENMT1NFQlJBQ0UsICJFeHBlY3RlZCBhIGNsb3NpbmcgJ30nIGFmdGVyIGEgIiwgc3RyaW5n
Rm9yRnVuY3Rpb25Nb2RlKG1vZGUpLCAiIGJvZHkiKTsKICAgICAKICAgICBpZiAobmV3SW5mbykK
LSAgICAgICAgbV9mdW5jdGlvbkNhY2hlLT5hZGQob3BlbkJyYWNlT2Zmc2V0LCBXVEY6Om1vdmUo
bmV3SW5mbykpOworICAgICAgICBtX2Z1bmN0aW9uQ2FjaGUtPmFkZChpbmZvLm9wZW5CcmFjZU9m
ZnNldCwgV1RGOjptb3ZlKG5ld0luZm8pKTsKICAgICAKICAgICBuZXh0KCk7CisgICAgaW5mby5i
b2R5RW5kTGluZSA9IG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTM5NSwxNyArMTQwNCwxMjIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uRGVjbGEK
ICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB1bnNp
Z25lZCBmdW5jdGlvbktleXdvcmRTdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBuZXh0KCk7Cisg
ICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOworICAgIGZhaWxJZkZhbHNl
KChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25N
b2RlLCB0cnVlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFzZSwgaW5mbykpLCAiQ2Fubm90
IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKKyAgICBmYWlsSWZGYWxzZShpbmZvLm5hbWUsICJGdW5j
dGlvbiBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKKyAgICBmYWlsSWZGYWxzZUlmU3Ry
aWN0KGRlY2xhcmVWYXJpYWJsZShpbmZvLm5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlv
biBuYW1lZCAnIiwgaW5mby5uYW1lLT5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7CisgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQobG9jYXRpb24sIGluZm8sIGZ1
bmN0aW9uS2V5d29yZFN0YXJ0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4K
K3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VDbGFzc0RlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0KQoreworICAg
IEFTU0VSVChtYXRjaChDTEFTU1RPS0VOKSk7CisgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9u
KHRva2VuTG9jYXRpb24oKSk7CisgICAgSlNUZXh0UG9zaXRpb24gY2xhc3NTdGFydCA9IHRva2Vu
U3RhcnRQb3NpdGlvbigpOworICAgIHVuc2lnbmVkIGNsYXNzU3RhcnRMaW5lID0gdG9rZW5MaW5l
KCk7CisgICAgdW5zaWduZWQgY2xhc3NFbmRMaW5lID0gMDsKKyAgICBuZXh0KCk7CiAgICAgY29u
c3QgSWRlbnRpZmllciogbmFtZSA9IDA7Ci0gICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFy
YW1ldGVycyA9IDA7Ci0gICAgVHJlZUZ1bmN0aW9uQm9keSBib2R5ID0gMDsKLSAgICB1bnNpZ25l
ZCBvcGVuQnJhY2VPZmZzZXQgPSAwOwotICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VPZmZzZXQgPSAw
OwotICAgIGludCBib2R5U3RhcnRMaW5lID0gMDsKLSAgICB1bnNpZ25lZCBib2R5U3RhcnRDb2x1
bW4gPSAwOwotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5j
dGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCB0cnVlLCBuYW1lLCBwYXJhbWV0ZXJzLCBib2R5
LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIGJvZHlT
dGFydENvbHVtbikpLCAiQ2Fubm90IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKLSAgICBmYWlsSWZG
YWxzZShuYW1lLCAiRnVuY3Rpb24gc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBuYW1lIik7Ci0gICAg
ZmFpbElmRmFsc2VJZlN0cmljdChkZWNsYXJlVmFyaWFibGUobmFtZSksICJDYW5ub3QgZGVjbGFy
ZSBhIGZ1bmN0aW9uIG5hbWVkICciLCBuYW1lLT5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7
Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQobG9jYXRpb24sIG5h
bWUsIGJvZHksIHBhcmFtZXRlcnMsIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwg
Ym9keVN0YXJ0TGluZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lLCBib2R5U3RhcnRDb2x1
bW4sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0KTsKKyAgICBUcmVlRXhwcmVzc2lvbiBwYXJlbnRDbGFz
cyA9IDA7CisgICAgVHJlZUV4cHJlc3Npb24gY29uc3RydWN0b3IgPSAwOworICAgIFRyZWVQcm9w
ZXJ0eUxpc3QgaW5zdGFuY2VNZXRob2RzID0gMDsKKyAgICBUcmVlUHJvcGVydHlMaXN0IHN0YXRp
Y01ldGhvZHMgPSAwOworLy8gICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgY29uc3RydWN0b3JQ
YXJhbWV0ZXJzID0gMDsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VDbGFzc0luZm8oY29udGV4dCwg
RnVuY3Rpb25OZWVkc05hbWUsIG5hbWUsIHBhcmVudENsYXNzLCBjb25zdHJ1Y3RvciwgaW5zdGFu
Y2VNZXRob2RzLCBzdGF0aWNNZXRob2RzKSksICJDYW5ub3QgcGFyc2UgdGhpcyBjbGFzcyIpOwor
ICAgIGZhaWxJZkZhbHNlKG5hbWUsICJDbGFzcyBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUi
KTsKKyAgICBmYWlsSWZGYWxzZShkZWNsYXJlVmFyaWFibGUobmFtZSksICJDYW5ub3QgZGVjbGFy
ZSBhIGNsYXNzIG5hbWVkICciLCBuYW1lLT5pbXBsKCksICInIik7CisKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGNyZWF0ZSBhIE1pcmFuZGEgZnVuY3Rpb24gaGVyZS4KKyAgICBmYWlsSWZGYWxz
ZShjb25zdHJ1Y3RvciwgIkNhbm5vdCBkZWNsYXJlIGEgY2xhc3Mgd2l0aG91dCBjb25zdHJ1Y3Rv
ciIpOworCisgICAgSlNUZXh0UG9zaXRpb24gY2xhc3NFbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpOworCisgICAgVHJlZUV4cHJlc3Npb24gY2xhc3NEZWNscmF0aW9uID0gY29udGV4dC5jcmVh
dGVBc3NpZ25SZXNvbHZlKGxvY2F0aW9uLCAqbmFtZSwgY29uc3RydWN0b3IsIGNsYXNzU3RhcnQs
IGNsYXNzU3RhcnQgKyAxLCBjbGFzc0VuZCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQ2xh
c3NEZWNsU3RhdGVtZW50KGxvY2F0aW9uLCAqbmFtZSwgY2xhc3NEZWNscmF0aW9uLCBwYXJlbnRD
bGFzcywgaW5zdGFuY2VNZXRob2RzLCBzdGF0aWNNZXRob2RzLCBjbGFzc1N0YXJ0TGluZSwgY2xh
c3NFbmRMaW5lKTsKKworLy8gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0ZW1l
bnQobG9jYXRpb24sIG5hbWUsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvclBhcmFtZXRlcnMsIDAs
IDAsIDAsIDAsIDAsIDApOworLy8gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRW1wdHlTdGF0ZW1l
bnQobG9jYXRpb24pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNz
SW5mbyhUcmVlQnVpbGRlciYgY29udGV4dCwgRnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1l
bnRzLCBjb25zdCBJZGVudGlmaWVyKiYgbmFtZSwKKyAgICBUcmVlRXhwcmVzc2lvbiYgcGFyZW50
Q2xhc3MsIFRyZWVFeHByZXNzaW9uJiBjb25zdHJ1Y3RvciwgVHJlZVByb3BlcnR5TGlzdCYgaW5z
dGFuY2VNZXRob2RzLCBUcmVlUHJvcGVydHlMaXN0JiBzdGF0aWNNZXRob2RzKQoreworICAgIEF1
dG9Qb3BTY29wZVJlZiBjbGFzc1Njb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKKyAgICBjbGFzc1Nj
b3BlLT5zZXRTdHJpY3RNb2RlKCk7CisKKyAgICBpZiAobWF0Y2goSURFTlQpKSB7CisgICAgICAg
IG5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICAgICAgbmV4dCgpOworICAgICAgICBm
YWlsSWZGYWxzZShjbGFzc1Njb3BlLT5kZWNsYXJlVmFyaWFibGUobmFtZSksICInIiwgbmFtZS0+
aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBjbGFzcyBuYW1lIik7CisgICAgfSBlbHNlIGlmIChy
ZXF1aXJlbWVudHMgPT0gRnVuY3Rpb25OZWVkc05hbWUpIHsKKy8qICAgICAgICBpZiAobWF0Y2go
T1BFTkJSQUNLRVQpIHx8IG1hdGNoKEVYVEVORFMpKQorICAgICAgICAgICAgc2VtYW50aWNGYWls
KCJjbGFzcyBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsqLworICAgICAgICBzZW1hbnRp
Y0ZhaWx1cmVEdWVUb0tleXdvcmQoImNsYXNzIG5hbWUiKTsKKyAgICAgICAgZmFpbER1ZVRvVW5l
eHBlY3RlZFRva2VuKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
Y29uc3VtZShFWFRFTkRTKSkgeworICAgICAgICBwYXJlbnRDbGFzcyA9IHBhcnNlUHJpbWFyeUV4
cHJlc3Npb24oY29udGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNlKHBhcmVudENsYXNzLCAiQ2Fu
bm90IHBhcnNlIHRoZSBwYXJlbnQgY2xhc3MgbmFtZSIpOworICAgIH0KKworICAgIGNvbnN1bWVP
ckZhaWwoT1BFTkJSQUNFLCAiRXhwZWN0ZWQgYW4gb3BlbmluZyAneycgYXQgdGhlIHN0YXJ0IG9m
IGEgY2xhc3MgYm9keSIpOworCisgICAgVHJlZVByb3BlcnR5TGlzdCBpbnN0YW5jZU1ldGhvZHNU
YWlsID0gMDsKKyAgICBUcmVlUHJvcGVydHlMaXN0IHN0YXRpY01ldGhvZHNUYWlsID0gMDsKKyAg
ICB3aGlsZSAoIW1hdGNoKENMT1NFQlJBQ0UpKSB7CisgICAgICAgIGlmIChtYXRjaChTRU1JQ09M
T04pKQorICAgICAgICAgICAgbmV4dCgpOworCisgICAgICAgIGJvb2wgaXNTdGF0aWNNZXRob2Qg
PSBtYXRjaChTVEFUSUNUT0tFTik7CisgICAgICAgIGlmIChpc1N0YXRpY01ldGhvZCkKKyAgICAg
ICAgICAgIG5leHQoKTsKKworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGJlIGEgYmluZGluZyBp
ZGVudGlmaWVyLgorICAgICAgICBpZiAoIW1hdGNoKElERU5UKSkgeworICAgICAgICAgICAgZmFp
bFdpdGhNZXNzYWdlKCJFeHBlY3RlZCBhbiBpbmRlbnRpZmllciIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBKU1Rva2VuTG9jYXRpb24gbWV0aG9kTG9jYXRpb24o
dG9rZW5Mb2NhdGlvbigpKTsKKyAgICAgICAgdW5zaWduZWQgbWV0aG9kU3RhcnQgPSB0b2tlblN0
YXJ0KCk7CisgICAgICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKKyAg
ICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmVl
ZHNOYW1lLCBGdW5jdGlvbk1vZGUsIGZhbHNlLAorICAgICAgICAgICAgcGFyZW50Q2xhc3MgPyBK
U1BhcnNlckNvbnN0cnVjdG9yS2luZDo6TWF5YmVEZXJpdmVkIDogSlNQYXJzZXJDb25zdHJ1Y3Rv
cktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIG1ldGhvZCIpOworICAgICAg
ICBmYWlsSWZGYWxzZShpbmZvLm5hbWUsICJtZXRob2QgbXVzdCBoYXZlIGEgbmFtZSIpOworICAg
ICAgICBmYWlsSWZGYWxzZShkZWNsYXJlVmFyaWFibGUoaW5mby5uYW1lKSwgIkNhbm5vdCBkZWNs
YXJlIGEgbWV0aG9kIG5hbWVkICciLCBpbmZvLm5hbWUtPmltcGwoKSwgIiciKTsKKworICAgICAg
ICBib29sIGlzQ29uc3RydWN0b3IgPSAhaXNTdGF0aWNNZXRob2QgJiYgKmluZm8ubmFtZSA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvcjsKKyAgICAgICAgaWYgKGlzQ29uc3RydWN0
b3IpCisgICAgICAgICAgICBpbmZvLm5hbWUgPSBuYW1lOyAvLyBGSVhNRTogSXMgdGhpcyBjb3Jy
ZWN0Pz8KKworICAgICAgICBUcmVlRXhwcmVzc2lvbiBtZXRob2QgPSBjb250ZXh0LmNyZWF0ZUZ1
bmN0aW9uRXhwcihtZXRob2RMb2NhdGlvbiwgaW5mbywgbWV0aG9kU3RhcnQpOworICAgICAgICBp
ZiAoaXNDb25zdHJ1Y3RvcikgeworICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGNvbnN0
cnVjdG9yLCAiQ2Fubm90IGRlY2xyYXRlIG11bHRpcGxlIGNvbnN0cnVjdG9ycyBpbiBhIHNpbmds
ZSBjbGFzcyIpOworICAgICAgICAgICAgY29uc3RydWN0b3IgPSBtZXRob2Q7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogU3ludGF4IGVycm9yIHdoZW4gc3VwZXIoKSBp
cyBjYWxsZWQKKyAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaW5mby5uYW1lID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgIkNhbm5vdCBkZWNscmF0ZSBhIHN0YXRpYyBt
ZXRob2QgbmFtZWQgJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyIpOworICAgICAgICAgICAgVHJl
ZVByb3BlcnR5IHByb3BlcnR5ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShpbmZvLm5hbWUsIG1l
dGhvZCwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgLyogY29tcGxldGUgKi8gZmFsc2UpOworCisg
ICAgICAgICAgICBUcmVlUHJvcGVydHlMaXN0JiBoZWFkID0gaXNTdGF0aWNNZXRob2QgPyBzdGF0
aWNNZXRob2RzIDogaW5zdGFuY2VNZXRob2RzOworICAgICAgICAgICAgVHJlZVByb3BlcnR5TGlz
dCYgdGFpbCA9IGlzU3RhdGljTWV0aG9kID8gc3RhdGljTWV0aG9kc1RhaWwgOiBpbnN0YW5jZU1l
dGhvZHNUYWlsOworCisgICAgICAgICAgICBpZiAodGFpbCkKKyAgICAgICAgICAgICAgICB0YWls
ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QobWV0aG9kTG9jYXRpb24sIHByb3BlcnR5LCB0
YWlsKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGhlYWQgPSBjb250ZXh0
LmNyZWF0ZVByb3BlcnR5TGlzdChtZXRob2RMb2NhdGlvbiwgcHJvcGVydHkpOworICAgICAgICAg
ICAgICAgIHRhaWwgPSBoZWFkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgY29uc3VtZU9yRmFpbChDTE9TRUJSQUNFLCAiRXhwZWN0ZWQgYSBjbG9zaW5nICd9JyBhZnRl
ciBhIGNsYXNzIGJvZHkiKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiBzdHJ1Y3QgTGFiZWxJ
bmZvIHsKQEAgLTE3OTksMTMgKzE5MTMsNiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVQcm9wZXJ0eSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcm9wZXJ0eShUcmVlQgogICAg
ICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUHJvcGVydHkoaWRlbnQsIG5vZGUsIFByb3Bl
cnR5Tm9kZTo6Q29uc3RhbnQsIGNvbXBsZXRlKTsKICAgICAgICAgfQogICAgICAgICBmYWlsSWZG
YWxzZSh3YXNJZGVudCwgIkV4cGVjdGVkIGFuIGlkZW50aWZpZXIgYXMgcHJvcGVydHkgbmFtZSIp
OwotICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBhY2Nlc3Nvck5hbWUgPSAwOwotICAgICAgICBU
cmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJzID0gMDsKLSAgICAgICAgVHJlZUZ1bmN0
aW9uQm9keSBib2R5ID0gMDsKLSAgICAgICAgdW5zaWduZWQgb3BlbkJyYWNlT2Zmc2V0ID0gMDsK
LSAgICAgICAgdW5zaWduZWQgY2xvc2VCcmFjZU9mZnNldCA9IDA7Ci0gICAgICAgIGludCBib2R5
U3RhcnRMaW5lID0gMDsKLSAgICAgICAgdW5zaWduZWQgYm9keVN0YXJ0Q29sdW1uID0gMDsKICAg
ICAgICAgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGU7CiAgICAgICAgIGlmICgqaWRlbnQgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+Z2V0KQogICAgICAgICAgICAgdHlwZSA9IFByb3BlcnR5Tm9kZTo6
R2V0dGVyOwpAQCAtMTgyMywxNiArMTkzMCwxNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcm9wZXJ0eShUcmVlQgog
ICAgICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgIEpTVG9rZW5M
b2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgICAgICBuZXh0KCk7CisgICAg
ICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKICAgICAgICAgaWYgKHR5
cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIpIHsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1h
dGNoKE9QRU5QQVJFTiksICJFeHBlY3RlZCBhIHBhcmFtZXRlciBsaXN0IGZvciBnZXR0ZXIgZGVm
aW5pdGlvbiIpOwotICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEdldHRlck1vZGUsIGZhbHNlLCBhY2Nlc3Nv
ck5hbWUsIHBhcmFtZXRlcnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNl
dCwgYm9keVN0YXJ0TGluZSwgYm9keVN0YXJ0Q29sdW1uKSksICJDYW5ub3QgcGFyc2UgZ2V0dGVy
IGRlZmluaXRpb24iKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5m
byhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBHZXR0ZXJNb2RlLCBmYWxzZSwgSlNQ
YXJzZXJDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBnZXR0ZXIg
ZGVmaW5pdGlvbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZmFpbElmRmFsc2Uo
bWF0Y2goT1BFTlBBUkVOKSwgIkV4cGVjdGVkIGEgcGFyYW1ldGVyIGxpc3QgZm9yIHNldHRlciBk
ZWZpbml0aW9uIik7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8o
Y29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgU2V0dGVyTW9kZSwgZmFsc2UsIGFjY2Vz
c29yTmFtZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zm
c2V0LCBib2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4pKSwgIkNhbm5vdCBwYXJzZSBzZXR0
ZXIgZGVmaW5pdGlvbiIpOworICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25J
bmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBK
U1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFzZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIHNldHRl
ciBkZWZpbml0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN0cmluZ1Byb3BlcnR5TmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVy
dHkobG9jYXRpb24sIHR5cGUsIGNvbXBsZXRlLCBzdHJpbmdQcm9wZXJ0eU5hbWUsIHBhcmFtZXRl
cnMsIGJvZHksIG9wZW5CcmFjZU9mZnNldCwgY2xvc2VCcmFjZU9mZnNldCwgYm9keVN0YXJ0TGlu
ZSwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lLCBib2R5U3RhcnRDb2x1bW4sIGdldHRlck9y
U2V0dGVyU3RhcnRPZmZzZXQpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJP
clNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgbG9j
YXRpb24sIHR5cGUsIGNvbXBsZXRlLCBudW1lcmljUHJvcGVydHlOYW1lLCBwYXJhbWV0ZXJzLCBi
b2R5LCBvcGVuQnJhY2VPZmZzZXQsIGNsb3NlQnJhY2VPZmZzZXQsIGJvZHlTdGFydExpbmUsIG1f
bGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgYm9keVN0YXJ0Q29sdW1uLCBnZXR0ZXJPclNldHRl
clN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9y
U2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUsIGNvbXBsZXRlLCBzdHJpbmdQcm9wZXJ0eU5h
bWUsIGluZm8sIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOworICAgICAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwg
bV9wYXJzZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUsIGNvbXBsZXRlLCBudW1lcmljUHJvcGVydHlO
YW1lLCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKICAgICB9CiAgICAgY2FzZSBO
VU1CRVI6IHsKICAgICAgICAgZG91YmxlIHByb3BlcnR5TmFtZSA9IG1fdG9rZW4ubV9kYXRhLmRv
dWJsZVZhbHVlOwpAQCAtMjE3MiwyMCArMjI4MCwyMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJl
cwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIG5ld0NvdW50Kys7CiAgICAgfQotICAgIAorCisg
ICAgYm9vbCBiYXNlSXNTdXBlciA9IGZhbHNlOwogICAgIGlmIChtYXRjaChGVU5DVElPTikpIHsK
LSAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5u
dWxsSWRlbnRpZmllcjsKLSAgICAgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyYW1ldGVy
cyA9IDA7Ci0gICAgICAgIFRyZWVGdW5jdGlvbkJvZHkgYm9keSA9IDA7Ci0gICAgICAgIHVuc2ln
bmVkIG9wZW5CcmFjZU9mZnNldCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VPZmZz
ZXQgPSAwOwotICAgICAgICBpbnQgYm9keVN0YXJ0TGluZSA9IDA7Ci0gICAgICAgIHVuc2lnbmVk
IGJvZHlTdGFydENvbHVtbiA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0
YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgICAgICBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsK
ICAgICAgICAgbmV4dCgpOwotICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8o
Y29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgbmFt
ZSwgcGFyYW1ldGVycywgYm9keSwgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJyYWNlT2Zmc2V0LCBi
b2R5U3RhcnRMaW5lLCBib2R5U3RhcnRDb2x1bW4pKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBl
eHByZXNzaW9uIik7Ci0gICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihs
b2NhdGlvbiwgbmFtZSwgYm9keSwgcGFyYW1ldGVycywgb3BlbkJyYWNlT2Zmc2V0LCBjbG9zZUJy
YWNlT2Zmc2V0LCBib2R5U3RhcnRMaW5lLCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUsIGJv
ZHlTdGFydENvbHVtbiwgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOworICAgICAgICBQYXJzZXJGdW5j
dGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CisgICAgICAgIGluZm8ubmFtZSA9ICZtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKKyAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNl
RnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1bmN0aW9uTW9k
ZSwgZmFsc2UsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5ub3Qg
cGFyc2UgZnVuY3Rpb24gZXhwcmVzc2lvbiIpOworICAgICAgICBiYXNlID0gY29udGV4dC5jcmVh
dGVGdW5jdGlvbkV4cHIobG9jYXRpb24sIGluZm8sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0KTsKKyAg
ICB9IGVsc2UgaWYgKG1hdGNoKFNVUEVSKSkgeworICAgICAgICBiYXNlID0gY29udGV4dC5zdXBl
ckV4cHIobG9jYXRpb24pOworICAgICAgICBiYXNlSXNTdXBlciA9IHRydWU7CisgICAgICAgIG5l
eHQoKTsKICAgICB9IGVsc2UKICAgICAgICAgYmFzZSA9IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24o
Y29udGV4dCk7CiAgICAgCkBAIC0yMjAxLDYgKzIzMDksOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4
cHJlcwogICAgICAgICAgICAgaW50IGluaXRpYWxBc3NpZ25tZW50cyA9IG1fYXNzaWdubWVudENv
dW50OwogICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gcHJvcGVydHkgPSBwYXJzZUV4cHJlc3Np
b24oY29udGV4dCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBw
YXJzZSBzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOworICAgICAgICAgICAgaWYgKGJhc2VJc1N1cGVy
KQorICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoaW5pdGlhbEFzc2lnbm1lbnRzIHx8IG1fYXNz
aWdubWVudENvdW50LCAiQ2Fubm90IGFzc2lnbiBhIHZhbHVlIHRvIHN1cGVyIik7CiAgICAgICAg
ICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVCcmFja2V0QWNjZXNzKGxvY2F0aW9uLCBiYXNlLCBw
cm9wZXJ0eSwgaW5pdGlhbEFzc2lnbm1lbnRzICE9IG1fYXNzaWdubWVudENvdW50LCBleHByZXNz
aW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIHRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAg
ICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgInN1YnNj
cmlwdCBleHByZXNzaW9uIik7CiAgICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291
bnQ7CkBAIC0yMjE5LDYgKzIzMjksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlcwogICAgICAg
ICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3Np
dGlvbigpOwogICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VB
cmd1bWVudHMoY29udGV4dCwgQWxsb3dTcHJlYWQpOwogICAgICAgICAgICAgICAgIGZhaWxJZkZh
bHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBpZiBiYXNlSXNTdXBlcjogZmFpbElmRmFsc2UoaXNDb25zdHJ1Y3Rv
ciwgIkNhbm5vdCBjYWxsIHN1cGVyKCkgaW4gdGhpcyBmdW5jdGlvbiIpLgogICAgICAgICAgICAg
ICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBiYXNlLCBh
cmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9z
aXRpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9u
TEhTQ291bnQ7CkBAIC0yMjM2LDggKzIzNDcsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGdvdG8gZW5kTWVtYmVyRXhwcmVzc2lvbjsK
ICAgICAgICAgfQorICAgICAgICBiYXNlSXNTdXBlciA9IGZhbHNlOwogICAgIH0KIGVuZE1lbWJl
ckV4cHJlc3Npb246CisgICAgZmFpbElmVHJ1ZShiYXNlSXNTdXBlciAmJiAhbmV3Q291bnQsICJD
YW5ub3QgcmVmZXJlbmNlIHN1cGVyIik7CiAgICAgd2hpbGUgKG5ld0NvdW50LS0pCiAgICAgICAg
IGJhc2UgPSBjb250ZXh0LmNyZWF0ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGV4cHJlc3Npb25T
dGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgcmV0dXJuIGJhc2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCA3NjRlM2QzLi42YTgxODFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJOb2Rlcy5oIgogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCiAjaW5jbHVkZSAiUGFyc2VyRXJy
b3IuaCIKKyNpbmNsdWRlICJQYXJzZXJGdW5jdGlvbkluZm8uaCIKICNpbmNsdWRlICJQYXJzZXJU
b2tlbnMuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlNvdXJjZVBy
b3ZpZGVyQ2FjaGUuaCIKQEAgLTc3LDcgKzc4LDcgQEAgQ09NUElMRV9BU1NFUlQoTGFzdFVudGFn
Z2VkVG9rZW4gPCA2NCwgTGVzc1RoYW42NFVudGFnZ2VkVG9rZW5zKTsKIAogZW51bSBTb3VyY2VF
bGVtZW50c01vZGUgeyBDaGVja0ZvclN0cmljdE1vZGUsIERvbnRDaGVja0ZvclN0cmljdE1vZGUg
fTsKIGVudW0gRnVuY3Rpb25SZXF1aXJlbWVudHMgeyBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBG
dW5jdGlvbk5lZWRzTmFtZSB9OwotZW51bSBGdW5jdGlvblBhcnNlTW9kZSB7IEZ1bmN0aW9uTW9k
ZSwgR2V0dGVyTW9kZSwgU2V0dGVyTW9kZSB9OworZW51bSBGdW5jdGlvblBhcnNlTW9kZSB7IEZ1
bmN0aW9uTW9kZSwgR2V0dGVyTW9kZSwgU2V0dGVyTW9kZSwgTWV0aG9kTW9kZSB9OwogZW51bSBE
ZWNvbnN0cnVjdGlvbktpbmQgewogICAgIERlY29uc3RydWN0VG9WYXJpYWJsZXMsCiAgICAgRGVj
b25zdHJ1Y3RUb1BhcmFtZXRlcnMsCkBAIC02OTIsNiArNjkzLDcgQEAgcHJpdmF0ZToKICAgICAK
ICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJz
ZVNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiwgU291cmNlRWxlbWVudHNNb2RlKTsKICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnQo
VHJlZUJ1aWxkZXImLCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGly
ZWN0aXZlTGl0ZXJhbExlbmd0aCA9IDApOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVN0YXRlbWVudCBwYXJzZUNsYXNzRGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImKTsKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VGdW5jdGlv
bkRlY2xhcmF0aW9uKFRyZWVCdWlsZGVyJik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlVmFyRGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImKTsKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VDb25zdERl
Y2xhcmF0aW9uKFRyZWVCdWlsZGVyJik7CkBAIC03MjUsNyArNzI3LDcgQEAgcHJpdmF0ZToKICAg
ICBlbnVtIFNwcmVhZE1vZGUgeyBBbGxvd1NwcmVhZCwgRG9udEFsbG93U3ByZWFkIH07CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVBcmd1bWVudHMg
cGFyc2VBcmd1bWVudHMoVHJlZUJ1aWxkZXImLCBTcHJlYWRNb2RlKTsKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBwYXJzZVByb3BlcnR5KFRyZWVCdWlsZGVy
JiwgYm9vbCBzdHJpY3QpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlT
X0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJik7
CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5j
dGlvbkJvZHkgcGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImLCBKU1BhcnNlckNvbnN0cnVj
dG9yS2luZCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5F
IFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRl
ciYpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFy
c2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImLCBpbnQmIGRlY2xhcmF0aW9ucywgVHJl
ZURlY29uc3RydWN0aW9uUGF0dGVybiYgbGFzdFBhdHRlcm4sIFRyZWVFeHByZXNzaW9uJiBsYXN0
SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVudFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYg
aW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVuZCk7CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJlZUNvbnN0RGVjbExpc3QgcGFyc2VDb25zdERl
Y2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYpOwpAQCAtNzMzLDcgKzczNSwxMCBAQCBwcml2YXRl
OgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNv
bnN0cnVjdGlvblBhdHRlcm4gY3JlYXRlQmluZGluZ1BhdHRlcm4oVHJlZUJ1aWxkZXImLCBEZWNv
bnN0cnVjdGlvbktpbmQsIGNvbnN0IElkZW50aWZpZXImLCBpbnQgZGVwdGgsIEpTVG9rZW4pOwog
ICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0
cnVjdGlvblBhdHRlcm4gcGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4oVHJlZUJ1aWxkZXImLCBE
ZWNvbnN0cnVjdGlvbktpbmQsIGludCBkZXB0aCA9IDApOwogICAgIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gdHJ5UGFy
c2VEZWNvbnN0cnVjdGlvblBhdHRlcm5FeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7Ci0gICAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0aW9u
SW5mbyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9k
ZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgY29uc3QgSWRlbnRpZmllciomLCBUcmVl
Rm9ybWFsUGFyYW1ldGVyTGlzdCYsIFRyZWVGdW5jdGlvbkJvZHkmLCB1bnNpZ25lZCYgb3BlbkJy
YWNlT2Zmc2V0LCB1bnNpZ25lZCYgY2xvc2VCcmFjZU9mZnNldCwgaW50JiBib2R5U3RhcnRMaW5l
LCB1bnNpZ25lZCYgYm9keVN0YXJ0Q29sdW1uKTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gTkVWRVJfSU5MSU5FIGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXIm
LCBGdW5jdGlvblJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUsIGJvb2wgbmFtZUlzSW5D
b250YWluaW5nU2NvcGUsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kLCBQYXJzZXJGdW5jdGlvbklu
Zm88VHJlZUJ1aWxkZXI+Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZF
Ul9JTkxJTkUgYm9vbCBwYXJzZUNsYXNzSW5mbyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9uUmVxdWly
ZW1lbnRzLCBjb25zdCBJZGVudGlmaWVyKiYsCisgICAgICAgIFRyZWVFeHByZXNzaW9uJiBwYXJl
bnRDbGFzcywgVHJlZUV4cHJlc3Npb24mIGNvbnN0cnVjdG9yLCBUcmVlUHJvcGVydHlMaXN0JiBp
bnN0YW5jZU1ldGhvZHMsIFRyZWVQcm9wZXJ0eUxpc3QmIHN0YXRpY01ldGhvZHMpOwogICAgIEFM
V0FZU19JTkxJTkUgaW50IGlzQmluYXJ5T3BlcmF0b3IoSlNUb2tlblR5cGUpOwogICAgIGJvb2wg
YWxsb3dBdXRvbWF0aWNTZW1pY29sb24oKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyRnVuY3Rpb25JbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlckZ1bmN0aW9uSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmUyMDgyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlckZ1bmN0aW9uSW5mby5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFBhcnNlckZ1bmN0aW9uSW5mb19oCisjZGVmaW5lIFBhcnNlckZ1bmN0
aW9uSW5mb19oCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+CitzdHJ1Y3QgUGFyc2VyRnVuY3Rpb25JbmZvIHsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBu
YW1lID0gMDsKKyAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6Rm9ybWFsUGFyYW1ldGVyTGlzdCBw
YXJhbWV0ZXJzID0gMDsKKyAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6RnVuY3Rpb25Cb2R5IGJv
ZHkgPSAwOworICAgIHVuc2lnbmVkIG9wZW5CcmFjZU9mZnNldCA9IDA7CisgICAgdW5zaWduZWQg
Y2xvc2VCcmFjZU9mZnNldCA9IDA7CisgICAgaW50IGJvZHlTdGFydExpbmUgPSAwOworICAgIGlu
dCBib2R5RW5kTGluZSA9IDA7CisgICAgdW5zaWduZWQgYm9keVN0YXJ0Q29sdW1uID0gMDsKK307
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlck1vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVz
LmgKaW5kZXggMDYxMWI4OC4uYjk5NjBiNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyTW9kZXMuaApAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51
bSBKU1BhcnNlclN0cmljdG5lc3MgeyBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlQnVpbHRpbiwgSlNQ
YXJzZVN0cmljdCB9OwogZW51bSBKU1BhcnNlck1vZGUgeyBKU1BhcnNlUHJvZ3JhbUNvZGUsIEpT
UGFyc2VGdW5jdGlvbkNvZGUgfTsKK2VudW0gY2xhc3MgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQg
eyBCYXNlLCBNYXliZURlcml2ZWQgfTsKIAogZW51bSBQcm9maWxlck1vZGUgeyBQcm9maWxlck9m
ZiwgUHJvZmlsZXJPbiB9OwogZW51bSBEZWJ1Z2dlck1vZGUgeyBEZWJ1Z2dlck9mZiwgRGVidWdn
ZXJPbiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJU
b2tlbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKaW5k
ZXggYTY3NThkMC4uNGQ4Yzk2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJUb2tlbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlclRva2Vucy5oCkBAIC03NSw2ICs3NSwxMCBAQCBlbnVtIEpTVG9rZW5UeXBlIHsKICAgICBG
SU5BTExZLAogICAgIERFQlVHR0VSLAogICAgIEVMU0UsCisgICAgQ0xBU1NUT0tFTiwKKyAgICBF
WFRFTkRTLAorICAgIFNUQVRJQ1RPS0VOLAorICAgIFNVUEVSLAogICAgIE9QRU5CUkFDRSA9IDAs
CiAgICAgQ0xPU0VCUkFDRSwKICAgICBPUEVOUEFSRU4sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCmluZGV4IGZkMTQ1MjEuLjBiODAxMzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCkBAIC0yNiwxMSArMjYs
MTIgQEAKICNpZm5kZWYgU3ludGF4Q2hlY2tlcl9oCiAjZGVmaW5lIFN5bnRheENoZWNrZXJfaAog
CisjaW5jbHVkZSAiUGFyc2VyRnVuY3Rpb25JbmZvLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKICNp
bmNsdWRlICJZYXJyU3ludGF4Q2hlY2tlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLSAgICAKKwog
Y2xhc3MgU3ludGF4Q2hlY2tlciB7CiBwdWJsaWM6CiAgICAgc3RydWN0IEJpbmFyeUV4cHJDb250
ZXh0IHsKQEAgLTcxLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgU3ludGF4Q2hlY2tl
ciBGdW5jdGlvbkJvZHlCdWlsZGVyOwogICAgIGVudW0geyBOb25lRXhwciA9IDAsCiAgICAgICAg
IFJlc29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4cHIsIE51bWJlckV4cHIsIFN0cmluZ0V4cHIsCi0g
ICAgICAgIFRoaXNFeHByLCBOdWxsRXhwciwgQm9vbEV4cHIsIFJlZ0V4cEV4cHIsIE9iamVjdExp
dGVyYWxFeHByLAorICAgICAgICBUaGlzRXhwciwgU3VwZXJFeHByLCBOdWxsRXhwciwgQm9vbEV4
cHIsIFJlZ0V4cEV4cHIsIE9iamVjdExpdGVyYWxFeHByLAogICAgICAgICBGdW5jdGlvbkV4cHIs
IEJyYWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhwciwKICAgICAgICAgTmV3RXhwciwgUHJlRXhw
ciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwKICAgICAgICAgQ29uZGl0aW9uYWxF
eHByLCBBc3NpZ25tZW50RXhwciwgVHlwZW9mRXhwciwKQEAgLTE0Miw2ICsxNDMsMTAgQEAgcHVi
bGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVVuYXJ5UGx1cyhjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlVm9pZChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlw
ZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgdGhpc0V4cHIoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gVGhpc0V4cHI7IH0KKyAgICBFeHByZXNzaW9u
VHlwZSBzdXBlckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gVGhpc0V4cHI7
IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVTdXBlckNhbGwoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvblR5cGUsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0
UG9zaXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYpIHsgcmV0dXJuIFN1cGVyRXhwcjsgfQor
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVN1cGVyQnJhY2tldEFjY2Vzcyhjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJikgeyByZXR1cm4gU3VwZXJFeHBy
OyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlU3VwZXJEb3RBY2Nlc3MoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29u
c3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYpIHsgcmV0dXJuIFN1cGVy
RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCkgeyByZXR1cm4gUmVzb2x2ZUV4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYpIHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUg
Y3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0dXJu
IE9iamVjdExpdGVyYWxFeHByOyB9CkBAIC0xNTksOCArMTY0LDggQEAgcHVibGljOgogICAgIEV4
cHJlc3Npb25UeXBlIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVy
biBDb25kaXRpb25hbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBc3NpZ25SZXNv
bHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9u
VHlwZSwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KICAgICBFeHBy
ZXNzaW9uVHlwZSBjcmVhdGVFbXB0eVZhckV4cHJlc3Npb24oY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgY29uc3QgSWRlbnRpZmllciYpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9Ci0gICAgRXhw
cmVzc2lvblR5cGUgY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNv
bnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkg
eyByZXR1cm4gRnVuY3Rpb25FeHByOyB9Ci0gICAgaW50IGNyZWF0ZUZ1bmN0aW9uQm9keShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgYm9v
bCkgeyByZXR1cm4gRnVuY3Rpb25Cb2R5UmVzdWx0OyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3Jl
YXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckZ1bmN0
aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIGludCkgeyByZXR1cm4gRnVuY3Rpb25FeHByOyB9Cisg
ICAgaW50IGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgYm9vbCwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQp
IHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsgfQogICAgIHZvaWQgc2V0RnVuY3Rpb25OYW1l
U3RhcnQoaW50LCBpbnQpIHsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHMoKSB7IHJldHVybiBB
cmd1bWVudHNSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKGludCkgeyByZXR1cm4g
QXJndW1lbnRzUmVzdWx0OyB9CkBAIC0xOTMsNyArMTk4LDggQEAgcHVibGljOgogICAgIGludCBj
cmVhdGVDbGF1c2UoaW50LCBpbnQpIHsgcmV0dXJuIENsYXVzZVJlc3VsdDsgfQogICAgIGludCBj
cmVhdGVDbGF1c2VMaXN0KGludCkgeyByZXR1cm4gQ2xhdXNlTGlzdFJlc3VsdDsgfQogICAgIGlu
dCBjcmVhdGVDbGF1c2VMaXN0KGludCwgaW50KSB7IHJldHVybiBDbGF1c2VMaXN0UmVzdWx0OyB9
Ci0gICAgaW50IGNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGNvbnN0IElkZW50aWZpZXIqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CisgICAgaW50IGNyZWF0ZUZ1bmNEZWNsU3Rh
dGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxT
eW50YXhDaGVja2VyPiYsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CisgICAgaW50
IGNyZWF0ZUNsYXNzRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJ
ZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBQcm9wZXJ0eUxpc3Qs
IFByb3BlcnR5TGlzdCwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAg
IGludCBjcmVhdGVCbG9ja1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGlu
dCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlRXhwclN0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBT
dGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlSWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7
IH0KQEAgLTIxOCwxNCArMjI0LDE0IEBAIHB1YmxpYzoKICAgICBpbnQgY3JlYXRlRGVidWdnZXIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3Vs
dDsgfQogICAgIGludCBjcmVhdGVDb25zdFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgYXBw
ZW5kQ29uc3REZWNsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgY29uc3QgSWRlbnRpZmll
ciosIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9Ci0gICAgUHJvcGVydHkgY3JlYXRl
R2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5v
ZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KQorICAgIFByb3BlcnR5IGNyZWF0ZUdl
dHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2Rl
OjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBjb25zdCBQ
YXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChuYW1lKTsKICAgICAgICAgaWYgKCFzdHJpY3QpCiAgICAgICAgICAgICByZXR1
cm4gUHJvcGVydHkodHlwZSk7CiAgICAgICAgIHJldHVybiBQcm9wZXJ0eShuYW1lLCB0eXBlKTsK
ICAgICB9Ci0gICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSogdm0s
IFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVy
dHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBkb3VibGUgbmFtZSwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpCisgICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JT
ZXR0ZXJQcm9wZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBkb3Vi
bGUgbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWdu
ZWQpCiAgICAgewogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAgICAgICAgIHJldHVybiBQcm9w
ZXJ0eSh0eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25J
ZGVudGlmaWVycy5oCmluZGV4IDU2OWVlNGYuLmU3ZmUwYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtMjIwLDYgKzIyMCw4
IEBACiAgICAgbWFjcm8oeWllbGQpCiAKICNkZWZpbmUgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5U
SUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShtYWNybykgXAorICAgIG1hY3JvKGhvbWVPYmplY3Qp
IFwKKyAgICBtYWNybyhjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpIFwKICAgICBtYWNybyhpdGVy
YXRvcikgXAogICAgIG1hY3JvKGl0ZXJhdG9yTmV4dCkgXAogICAgIG1hY3JvKHJlc29sdmUpIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCA4YjIxZDdk
Li5hZGRkNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CkBAIC00NzEsNyArNDcxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAot
ICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0
YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBm
YWxzZSwgZmFsc2UpOyB9CisgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25z
dCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwg
aXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgdHJ1ZSAvKiB0aGlzIGlzIGFsd2F5cyBpbml0
aWFsaXplZCAqLyk7IH0KIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1f
dW5saW5rZWRFdmFsQ29kZUJsb2NrLT5udW1WYXJpYWJsZXMoKTsgfQogICAgIHVuc2lnbmVkIG51
bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLT5u
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgfQpAQCAtNTI2LDcgKzUyNiw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgY2xlYXJDb2RlKCk7CiAKLSAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5m
bygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2Vz
RXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlKTsgfQorICAgIEV4ZWN1dGFibGVJ
bmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNB
Y3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UsIHRy
dWUgLyogdGhpcyBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgKi8pOyB9CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245268</attachid>
            <date>2015-01-23 18:05:35 -0800</date>
            <delta_ts>2015-01-27 19:33:44 -0800</delta_ts>
            <desc>Updated for ToT</desc>
            <filename>native-class-5.patch</filename>
            <type>text/plain</type>
            <size>56683</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTc5MDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyAr
NjEsOCBAQAogICAgIGZ1bmN0aW9uLT5maW5pc2hQYXJzaW5nKGV4ZWN1dGFibGUtPnBhcmFtZXRl
cnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5mdW5jdGlvbk1vZGUoKSk7CiAg
ICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2UoZnVuY3Rpb24tPmZlYXR1cmVzKCksIGZ1bmN0aW9u
LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKTsKICAgICAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBG
dW5jdGlvbkNvZGUsIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwg
ZnVuY3Rpb24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24p
KTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsCisgICAgICAgIEV4ZWN1dGFi
bGVJbmZvKGZ1bmN0aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rpb24tPnVzZXNFdmFsKCks
IGZ1bmN0aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBmdW5j
dGlvbktpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24sIGV4ZWN1dGFibGUtPmNvbnN0cnVj
dG9yS2luZElzQmFzZSgpKSk7CiAgICAgYXV0byBnZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxC
eXRlY29kZUdlbmVyYXRvcj4odm0sIGZ1bmN0aW9uLmdldCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9k
ZSwgcHJvZmlsZXJNb2RlKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAg
ICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKQpAQCAtODQsNiAr
ODUsNyBAQAogICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChub2RlLT5pc0luU3RyaWN0Q29udGV4
dCgpKQogICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAgICAsIG1faXNCdWls
dGluRnVuY3Rpb24oa2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbikKKyAgICAsIG1fY29u
c3RydWN0b3JLaW5kSXNCYXNlKG5vZGUtPmNvbnN0cnVjdG9yS2luZElzQmFzZSgpKQogICAgICwg
bV9uYW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShub2RlLT5pbmZlcnJl
ZE5hbWUoKSkKICAgICAsIG1fcGFyYW1ldGVycyhub2RlLT5wYXJhbWV0ZXJzKCkpCkBAIC0yMDUs
NiArMjA3LDcgQEAKICAgICAsIG1faXNDb25zdHJ1Y3RvcihpbmZvLm1faXNDb25zdHJ1Y3RvcikK
ICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCiAgICAgLCBtX2lzQnVpbHRpbkZ1
bmN0aW9uKGluZm8ubV9pc0J1aWx0aW5GdW5jdGlvbikKKyAgICAsIG1fY29uc3RydWN0b3JLaW5k
SXNCYXNlKGluZm8ubV9jb25zdHJ1Y3RvcktpbmRJc0Jhc2UpCiAgICAgLCBtX2ZpcnN0TGluZSgw
KQogICAgICwgbV9saW5lQ291bnQoMCkKICAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDE3OTAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMiArNjYsMTQgQEAK
IHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbzsKIAogc3RydWN0IEV4
ZWN1dGFibGVJbmZvIHsKLSAgICBFeGVjdXRhYmxlSW5mbyhib29sIG5lZWRzQWN0aXZhdGlvbiwg
Ym9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0cmljdE1vZGUsIGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9v
bCBpc0J1aWx0aW5GdW5jdGlvbikKKyAgICBFeGVjdXRhYmxlSW5mbyhib29sIG5lZWRzQWN0aXZh
dGlvbiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0cmljdE1vZGUsIGJvb2wgaXNDb25zdHJ1Y3Rv
ciwgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbiwKKyAgICAgICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRJ
c0Jhc2UpCiAgICAgICAgIDogbV9uZWVkc0FjdGl2YXRpb24obmVlZHNBY3RpdmF0aW9uKQogICAg
ICAgICAsIG1fdXNlc0V2YWwodXNlc0V2YWwpCiAgICAgICAgICwgbV9pc1N0cmljdE1vZGUoaXNT
dHJpY3RNb2RlKQogICAgICAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQogICAg
ICAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oaXNCdWlsdGluRnVuY3Rpb24pCisgICAgICAgICwg
bV9jb25zdHJ1Y3RvcktpbmRJc0Jhc2UoY29uc3RydWN0b3JLaW5kSXNCYXNlKQogICAgIHsKICAg
ICB9CiAgICAgYm9vbCBtX25lZWRzQWN0aXZhdGlvbiA6IDE7CkBAIC03OSw2ICs4MSw3IEBACiAg
ICAgYm9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7CiAgICAgYm9vbCBtX2lzQ29uc3RydWN0b3IgOiAx
OwogICAgIGJvb2wgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgYm9vbCBtX2NvbnN0cnVj
dG9yS2luZElzQmFzZSA6IDE7CiB9OwogCiBlbnVtIFVubGlua2VkRnVuY3Rpb25LaW5kIHsKQEAg
LTExNyw2ICsxMjAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIEpTUGFyc2VTdHJpY3Q7CiAgICAg
ICAgIHJldHVybiBKU1BhcnNlTm9ybWFsOwogICAgIH0KKyAgICBib29sIGNvbnN0cnVjdG9yS2lu
ZElzQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0b3JLaW5kSXNCYXNlOyB9CiAKICAg
ICB1bnNpZ25lZCBmaXJzdExpbmVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGluZU9m
ZnNldDsgfQogICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNv
dW50OyB9CkBAIC0xNjksNiArMTczLDcgQEAKICAgICBib29sIG1faXNJblN0cmljdENvbnRleHQg
OiAxOwogICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CiAgICAgYm9vbCBtX2lz
QnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAgICBib29sIG1fY29uc3RydWN0b3JLaW5kSXNCYXNlIDog
MTsKIAogICAgIElkZW50aWZpZXIgbV9uYW1lOwogICAgIElkZW50aWZpZXIgbV9pbmZlcnJlZE5h
bWU7CkBAIC0zNDEsNyArMzQ2LDggQEAKICAgICBib29sIGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uOyB9CiAKICAgICBi
b29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0aW5GdW5jdGlv
bjsgfQotICAgIAorICAgIGJvb2wgY29uc3RydWN0b3JLaW5kSXNCYXNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb25zdHJ1Y3RvcktpbmRJc0Jhc2U7IH0KKwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKQog
ICAgIHsKICAgICAgICAgbV9qdW1wVGFyZ2V0cy5zaHJpbmtUb0ZpdCgpOwpAQCAtNTMyLDYgKzUz
OCw3IEBACiAgICAgYm9vbCBtX2lzQ29uc3RydWN0b3IgOiAxOwogICAgIGJvb2wgbV9oYXNDYXB0
dXJlZFZhcmlhYmxlcyA6IDE7CiAgICAgYm9vbCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAg
ICBib29sIG1fY29uc3RydWN0b3JLaW5kSXNCYXNlIDogMTsKICAgICB1bnNpZ25lZCBtX2ZpcnN0
TGluZTsKICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKICAgICB1bnNpZ25lZCBtX2VuZENvbHVt
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzkwMzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDM0LDcgKzQzNCwxNyBAQAogICAgIGFkZENhbGxlZShmdW5jdGlvbk5vZGUsIGNh
bGxlZVJlZ2lzdGVyKTsKIAogICAgIGlmIChpc0NvbnN0cnVjdG9yKCkpIHsKKyAgICAgICAgUmVm
UHRyPExhYmVsPiBhZnRlckNyZWF0ZVRoaXMgPSBjb25zdHJ1Y3RvcktpbmRJc0Jhc2UoKSA/IG51
bGxwdHIgOiBuZXdMYWJlbCgpOworICAgICAgICBpZiAoYWZ0ZXJDcmVhdGVUaGlzKSB7CisgICAg
ICAgICAgICBSZWdpc3RlcklEIGNhbGxlZShKU1N0YWNrOjpDYWxsZWUpOworICAgICAgICAgICAg
ZW1pdExvYWQodGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgZW1p
dEp1bXBJZkZhbHNlKGVtaXRFcXVhbGl0eU9wKG9wX3N0cmljdGVxLCBuZXdUZW1wb3JhcnkoKSwg
dGhpc1JlZ2lzdGVyKCksCisgICAgICAgICAgICAgICAgZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5
KCksICZjYWxsZWUsIHByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWRQcml2
YXRlTmFtZSkpLAorICAgICAgICAgICAgICAgIGFmdGVyQ3JlYXRlVGhpcy5nZXQoKSk7CisgICAg
ICAgIH0KICAgICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lzdGVyKTsKKyAgICAgICAg
aWYgKGFmdGVyQ3JlYXRlVGhpcykKKyAgICAgICAgICAgIGVtaXRMYWJlbChhZnRlckNyZWF0ZVRo
aXMuZ2V0KCkpOwogICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzVGhpcygpIHx8IGNv
ZGVCbG9jay0+dXNlc0V2YWwoKSkgewogICAgICAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogICAgICAgICBlbWl0T3Bj
b2RlKG9wX3RvX3RoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTc5MDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjksNyArMjY5LDggQEAKICAgICAgICAgUGFyc2VyQXJlbmEmIHBh
cnNlckFyZW5hKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZU5vZGUtPnBhcnNlckFyZW5hKCk7IH0K
ICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7
IHJldHVybiAqbV92bS0+cHJvcGVydHlOYW1lczsgfQogCi0gICAgICAgIGJvb2wgaXNDb25zdHJ1
Y3RvcigpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCk7IH0KKyAgICAgICAg
Ym9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKTsgfQorICAgICAgICBib29sIGNvbnN0cnVjdG9yS2luZElzQmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrLT5jb25zdHJ1Y3RvcktpbmRJc0Jhc2UoKTsgfQogCiAgICAgICAg
IFBhcnNlckVycm9yIGdlbmVyYXRlKCk7CiAKQEAgLTI5MCw3ICsyOTEsOCBAQAogCiAgICAgICAg
IC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAgICAgICAgIFJlZ2lzdGVy
SUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3RlcjsgfQotICAgICAgICAK
KyAgICAgICAgYm9vbCBoYXNTdXBlcmNsYXNzKCk7CisKICAgICAgICAgUmVnaXN0ZXJJRCogc2Nv
cGVSZWdpc3RlcigpIHsgcmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsgfQogCiAgICAgICAgIC8vIFJl
dHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIHRlbXBvcmFyeSByZWdpc3Rlci4gUmVnaXN0ZXJzIHJl
dHVybmVkIGJ5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNzkwMzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0Nyw2ICsxNDcsNjIgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gU3VwZXJOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCogU3VwZXJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIGlmIChkc3Qg
PT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBS
ZWdpc3RlcklEIGNhbGxlZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsK
KworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBob21lT2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgJmNhbGxlZSwgZ2VuZXJhdG9yLnByb3BlcnR5
TmFtZXMoKS5ob21lT2JqZWN0UHJpdmF0ZU5hbWUpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBw
cm90b1BhcmVudCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIGhvbWVPYmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29y
ZVByb3RvKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIHByb3RvUGFyZW50LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlO
YW1lcygpLmNvbnN0cnVjdG9yKTsKK30KKworc3RhdGljIFJlZ2lzdGVySUQqIGVtaXRTdXBlckJh
c2VGb3JDYWxsZWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKK3sKKyAgICBSZWdpc3Rl
cklEIGNhbGxlZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBob21lT2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgJmNhbGxlZSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMo
KS5ob21lT2JqZWN0UHJpdmF0ZU5hbWUpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5
SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBob21lT2JqZWN0LmdldCgpLCBnZW5lcmF0b3Iu
cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90byk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBTdXBlckJyYWNrZXRBY2Nlc3Nv
ck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKG1fc3Vic2NyaXB0KTsKKyAgICBpZiAoZHN0
ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UmVnaXN0ZXJJRCBjYWxsZWU7CisgICAgY2FsbGVlLnNldEluZGV4KEpTU3RhY2s6OkNhbGxlZSk7
CisKKyAgICAKKworICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChkc3QsICZjYWxsZWUgLyogZ2VuZXJhdG9yLnNjb3BlUmVnaXN0ZXIoKSAqLyk7Cit9CisKKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdXBlckRvdEFjY2Vzc29yTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIFN1cGVyRG90
QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQoreworICAgIFVOVVNFRF9QQVJBTShtX2lkZW50KTsKKyAgICBpZiAo
ZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgUmVnaXN0ZXJJRCBjYWxsZWU7CisgICAgY2FsbGVlLnNldEluZGV4KEpTU3RhY2s6OkNhbGxl
ZSk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaG9tZU9iamVjdCA9IGdlbmVyYXRvci5lbWl0
R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksICZjYWxsZWUsIGdlbmVyYXRvci5wcm9w
ZXJ0eU5hbWVzKCkuaG9tZU9iamVjdFByaXZhdGVOYW1lKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZVZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgaG9tZU9iamVjdC5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNj
b3JlUHJvdG8pOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlVmFsdWUuZ2V0KCksIG1faWRlbnQpOworfQorCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIFJlc29sdmVOb2RlOjppc1B1cmUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvcikgY29uc3QKQEAgLTI3MywyNiArMzI5LDI1IEBACiAKIFJlZ2lz
dGVySUQqIE9iamVjdExpdGVyYWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgICBpZiAoIW1fbGlzdCkgewotICAg
ICAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQotICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3T2JqZWN0KGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCkpOwotICAgICB9Ci0gICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX2xpc3QpOworICAgIGlmICghbV9saXN0KSB7CisgICAgICAgIGlm
IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROZXdPYmplY3QoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSk7CisgICAgfQorICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmog
PSBnZW5lcmF0b3IuZW1pdE5ld09iamVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKG5ld09iai5nZXQoKSwgbV9saXN0KTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3BlcnR5TGlzdE5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3T2JqID0gZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpOwotICAgIAotICAgIGdlbmVyYXRvci5lbWl0TmV3T2JqZWN0KG5l
d09iai5nZXQoKSk7Ci0gICAgCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5ld09iaiA9IGRzdDsK
KwogICAgIC8vIEZhc3QgY2FzZTogdGhpcyBsb29wIGp1c3QgaGFuZGxlcyByZWd1bGFyIHZhbHVl
IHByb3BlcnRpZXMuCiAgICAgUHJvcGVydHlMaXN0Tm9kZSogcCA9IHRoaXM7CiAgICAgZm9yICg7
IHAgJiYgcC0+bV9ub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudDsgcCA9IHAt
Pm1fbmV4dCkKLSAgICAgICAgZW1pdFB1dENvbnN0YW50UHJvcGVydHkoZ2VuZXJhdG9yLCBuZXdP
YmouZ2V0KCksICpwLT5tX25vZGUpOworICAgICAgICBlbWl0Q29uc3RhbnRQcm9wZXJ0eShnZW5l
cmF0b3IsIG5ld09iai5nZXQoKSwgcC0+bV9ub2RlKTsKIAogICAgIC8vIFdlcmUgdGhlcmUgYW55
IGdldC9zZXQgcHJvcGVydGllcz8KICAgICBpZiAocCkgewpAQCAtMzE4LDEwICszNzMsMTAgQEAK
IAogICAgICAgICAgICAgLy8gSGFuZGxlIHJlZ3VsYXIgdmFsdWVzLgogICAgICAgICAgICAgaWYg
KG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KSB7Ci0gICAgICAgICAgICAg
ICAgZW1pdFB1dENvbnN0YW50UHJvcGVydHkoZ2VuZXJhdG9yLCBuZXdPYmouZ2V0KCksICpub2Rl
KTsKKyAgICAgICAgICAgICAgICBlbWl0Q29uc3RhbnRQcm9wZXJ0eShnZW5lcmF0b3IsIG5ld09i
ai5nZXQoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
Ci0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobm9kZS0+bV9hc3NpZ24pOwogCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEg
Z2V0L3NldCBwcm9wZXJ0eSwgZmluZCBpdHMgZW50cnkgaW4gdGhlIG1hcC4KQEAgLTM1OSwyNyAr
NDE0LDQ4IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCisgICAgICAgICAg
ICAvLyBGSVhNRTogU2V0IHN1cGVyIG9uIGdldHRlciAmIHNldHRlci4KKwogICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQdXRHZXR0ZXJTZXR0ZXIobmV3T2JqLmdldCgpLCAqbm9kZS0+bmFtZSgp
LCBnZXR0ZXJSZWcuZ2V0KCksIHNldHRlclJlZy5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBuZXdP
YmouZ2V0KCkpOworICAgIHJldHVybiBkc3Q7CiB9CiAKLXZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6
ZW1pdFB1dENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogbmV3T2JqLCBQcm9wZXJ0eU5vZGUmIG5vZGUpCitzdGF0aWMgdm9pZCBlbWl0UHV0
SG9tZU9iamVjdChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBmdW5j
dGlvbiwgUmVnaXN0ZXJJRCogaG9tZU9iamVjdCkKIHsKLSAgICBpZiAobm9kZS5uYW1lKCkpIHsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKG5ld09iaiwgKm5vZGUubmFtZSgp
LCBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbikpOworICAgIGdlbmVyYXRvci5lbWl0
UHV0QnlJZChmdW5jdGlvbiwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ob21lT2JqZWN0UHJp
dmF0ZU5hbWUsIGhvbWVPYmplY3QpOworfQorCit2b2lkIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRD
b25zdGFudFByb3BlcnR5KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IG5ld09iaiwgUHJvcGVydHlOb2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5uYW1lKCkpIHsK
KyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5v
ZGUtPm1fYXNzaWduKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKG5ld09i
aiwgKm5vZGUtPm5hbWUoKSwgdmFsdWUuZ2V0KCkpOworICAgICAgICAvLyBGSVhNRTogRVM2IHNw
ZWMgc2F5cyB3ZSBzaG91bGQgb25seSBzdG9yZSBob21lT2JqZWN0IHdoZW4gdGhlIGZ1bmN0aW9u
IGhhcyAic3VwZXIiCisgICAgICAgIC8vIGJ1dCB3ZSBjYW4ndCBlYXNpbHkgZGV0ZXJtaW5lIGl0
IGhlcmUgc2luY2Ugd2UgbGF6aWx5IGV2YWx1YXRlIHRoZSBmdW5jdGlvbiBib2R5LgorICAgICAg
ICBpZiAobV9pc01ldGhvZExpc3QpCisgICAgICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5l
cmF0b3IsIHZhbHVlLmdldCgpLCBuZXdPYmopOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9k
ZS5tX2V4cHJlc3Npb24pOwotICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlWYWwobmV3T2Jq
LCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLm1fYXNzaWduKSk7
CisgICAgQVNTRVJUKCFtX2lzTWV0aG9kTGlzdCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBy
b3BlcnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLT5tX2V4cHJlc3Npb24pOworICAg
IGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlWYWwobmV3T2JqLCBwcm9wZXJ0eU5hbWUuZ2V0KCks
IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLT5tX2Fzc2lnbikpOwogfQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJhY2tldEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
eworICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSBnZW5lcmF0ZSB0aGUgcHJvZmlsZXIgaW5mbz8KKyAgICAgICAgaWYgKG1fc3Vic2Ny
aXB0LT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZCA9IHN0
YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCktPnZhbHVlKCk7CisgICAgICAgICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9yKSwgaWQpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9yKSwgZ2VuZXJh
dG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KSk7CisgICAgfQogICAgIGlmIChtX2Jhc2UtPmlzUmVz
b2x2ZU5vZGUoKSAKICAgICAgICAgJiYgZ2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHNS
ZWdpc3RlcihzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSkK
ICAgICAgICAgJiYgIWdlbmVyYXRvci5zeW1ib2xUYWJsZSgpLnNsb3dBcmd1bWVudHMoKSkgewpA
QCAtNDI0LDcgKzUwMCw3IEBACiAgICAgfQogCiBub25Bcmd1bWVudHNQYXRoOgotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCkgPyBlbWl0U3VwZXJC
YXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5
SWQoZmluYWxEZXN0LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKQEAgLTUxMSw3ICs1ODcsMTIgQEAK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIp
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1l
bnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKLSAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CisgICAgaWYgKG1fZXhwci0+aXNT
dXBlck5vZGUoKSkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsKKyAgICAgICAgUmVnaXN0
ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QocmV0dXJuVmFsdWUuZ2V0KCksIGZ1
bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVy
YXRvci50aGlzUmVnaXN0ZXIoKSwgcmV0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CiAg
ICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgp
LCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBl
UHJvZmlsZXIoKSkgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZh
bHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0
cik7CkBAIC01NjIsMTMgKzY0MywxNyBAQAogCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2Jhc2UpOworICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3VwZXJO
b2RlKCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBiYXNlSXNTdXBlciA/IGVtaXRT
dXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9yKSA6IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2Up
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X3N1YnNjcmlwdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNz
aW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChn
ZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgp
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxB
cmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKKyAgICBpZiAoYmFzZUlzU3Vw
ZXIpCisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCkpOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwog
ICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQo
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCkt
PnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0
dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBu
dWxscHRyKTsKQEAgLTU4NCw5ICs2NjksMTQgQEAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVu
Y3Rpb24gPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5j
dGlvbi5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwg
bV9hcmdzKTsKLSAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwgbV9iYXNlKTsKKyAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9k
ZSgpOworICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7Cisg
ICAgZWxzZQorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgbV9iYXNlKTsKKwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3Vi
ZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5k
KCkpOwotICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CisgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGZ1bmN0aW9uLmdldCgpLCBiYXNlSXNTdXBlciA/IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2Vu
ZXJhdG9yKSA6IGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwogICAgIFJl
Z2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVu
Y3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQ
cm9maWxlcigpKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFs
dWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRy
KTsKQEAgLTkyOCw2ICsxMDE4LDggQEAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgIGlmIChtX2Jh
c2UtPmlzU3VwZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBlbWl0VGhyb3dSZWZlcmVuY2VFcnJv
cihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHkiKTsKICAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwogfQogCkBAIC05MzgsNiArMTAzMCw4IEBACiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAKICAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7CisgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBl
ciBwcm9wZXJ0eSIpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIG1faWRlbnQpOwogfQogCkBAIC0y
NzUzLDcgKzI4NDcsNTUgQEAKIHsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROZXdGdW5jdGlv
bkV4cHJlc3Npb24oZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdGhpcyk7CiB9Ci0g
ICAgCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDbGFzc0RlY2xOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIENsYXNzRGVjbE5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
Cit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNsYXNzSGVyaXRhZ2U7CisgICAgaWYgKG1fcGFy
ZW50Q2xhc3NFeHByZXNzaW9uKSB7CisgICAgICAgIGNsYXNzSGVyaXRhZ2UgPSBnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjbGFzc0hlcml0YWdl
LmdldCgpLCBtX3BhcmVudENsYXNzRXhwcmVzc2lvbik7CisgICAgfQorCisgICAgLy8gRklYTUU6
IFdoZW4gYmFzZSBjbGFzcycgY29uc3R1cmN0b3IgaXMgbmV2ZXIgY2FsbGVkLCB3ZSBuZWVkIHRv
IHJldHVybiBhbiAidW5pbml0aWFsaXplZCIgb2JqZWN0LgorICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBjb25zdHJ1Y3RvciA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fY29uc3RydWN0b3JEZWNs
YXJhdGlvbik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvdHlwZSA9IGdlbmVyYXRvci5l
bWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGNvbnN0cnVjdG9yLmdldCgpLCBn
ZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAgaWYgKCFjbGFzc0hlcml0
YWdlICYmICFtX3N0YXRpY01ldGhvZHMgJiYgIW1faW5zdGFuY2VNZXRob2RzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoY2xhc3NIZXJpdGFnZSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJvdG9QYXJlbnQgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJl
ZlB0cjxMYWJlbD4gY2xhc3NIZXJpdGFnZUlzTnVsbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwor
ICAgICAgICBSZWZQdHI8TGFiZWw+IHByb3RvUGFyZW50SXNTZXQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRV
bmFyeU9wKG9wX2VxX251bGwsIHByb3RvUGFyZW50LmdldCgpLCBjbGFzc0hlcml0YWdlLmdldCgp
KSwgY2xhc3NIZXJpdGFnZUlzTnVsbC5nZXQoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IFRocm93
IFR5cGVFcnJvciBpZiBpc0NvbnN0cnVjdG9yKHBhcmVudENsYXNzKSBpcyBmYWxzZSBvciBpdCdz
IGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLgorICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQocHJv
dG9QYXJlbnQuZ2V0KCksIGNsYXNzSGVyaXRhZ2UuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlKTsKKyAgICAgICAgLy8gRklYTUU6IFRocm93IFR5cGVFcnJvciBpZiBU
eXBlKHByb3RvUGFyZW50KSBpcyBub3QgT2JqZWN0IG9yIG51bGwuCisKKyAgICAgICAgLy8gRVM2
IGRyYWZ0IGRvZXNuJ3Qgc3RvcmUgaG9tZU9iamVjdCBvbiB0aGUgY29uc3RydWN0b3IgYnV0IHRo
aXMgd291bGQgbWFrZSBzdXBwb3J0aW5nICJuZXcgc3VwZXIiIGluIGNvbnN0cnVjdG9yIGN1bWJl
cnNvbWUuCisgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgY29uc3RydWN0b3Iu
Z2V0KCksIHByb3RvdHlwZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0
QnlJZChjb25zdHJ1Y3Rvci5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvcktpbmRJc0Rlcml2ZWRQcml2YXRlTmFtZSwKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzQm9vbGVhbih0cnVlKSkpOworCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRv
ci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b1BhcmVudC5nZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChwcm90b1BhcmVudElzU2V0LmdldCgpKTsKKworICAg
ICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNsYXNzSGVyaXRhZ2VJc051bGwuZ2V0KCkpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQocHJvdG90eXBlLmdldCgpLCBnZW5lcmF0
b3IucHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgY2xhc3NIZXJpdGFnZS5nZXQoKSk7
CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChwcm90b1BhcmVudElzU2V0LmdldCgpKTsK
KyAgICB9CisKKyAgICBpZiAobV9zdGF0aWNNZXRob2RzKQorICAgICAgICBnZW5lcmF0b3IuZW1p
dE5vZGUoY29uc3RydWN0b3IuZ2V0KCksIG1fc3RhdGljTWV0aG9kcyk7CisKKyAgICBpZiAobV9p
bnN0YW5jZU1ldGhvZHMpCisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShwcm90b3R5cGUuZ2V0
KCksIG1faW5zdGFuY2VNZXRob2RzKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0KIFJl
Z2lzdGVySUQqIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNpb24gMTc5MDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2Niw2ICsxNjYsMzQgQEAKICAgICAgICAgdXNlc1RoaXMoKTsKICAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgVGhpc05vZGUobG9jYXRpb24pOwogICAgIH0KKyAgICBF
eHByZXNzaW9uTm9kZSogc3VwZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24p
CisgICAgeworICAgICAgICAvLyBGSVhNRTogQWRkIGFuZCBjYWxsIHVzZXNTdXBlcigpOworICAg
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdXBlck5vZGUobG9jYXRpb24pOworICAg
IH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlU3VwZXJDYWxsKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50cywgY29uc3QgSlNUZXh0UG9z
aXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBlbmQpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oYXJndW1lbnRzKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRpdm90KTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFN1cGVyTm9kZShsb2NhdGlvbik7CisgICAgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBj
cmVhdGVTdXBlckJyYWNrZXRBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKKyAg
ICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShzdGFydCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkaXZvdCk7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShlbmQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdXBlckJyYWNr
ZXRBY2Nlc3Nvck5vZGUobG9jYXRpb24sIHByb3BlcnR5KTsKKyAgICB9CisgICAgRXhwcmVzc2lv
bk5vZGUqIGNyZWF0ZVN1cGVyRG90QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVu
ZCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdGFydCk7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShkaXZvdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShlbmQpOworICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBTdXBlckRvdEFjY2Vzc29yTm9kZShsb2NhdGlvbiwgKnByb3Bl
cnR5KTsKKyAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBzdGFydCkKICAgICB7CiAgICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5h
bWVzLT5hcmd1bWVudHMgPT0gKmlkZW50KQpAQCAtMjgyLDkgKzMxMCw5IEBACiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rp
b25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVu
ZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCisgICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3Jl
YXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVu
c2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0
b3JLaW5kIHRoaXNNb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YSkgRnVuY3Rpb25Cb2R5Tm9kZShtX3BhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2Nh
dGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25Cb2R5Tm9kZShtX3BhcnNlckFyZW5h
LCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgaW5T
dHJpY3RDb250ZXh0LCB0aGlzTW9kZSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRGdW5jdGlvbk5h
bWVTdGFydChGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQpCkBA
IC0yOTksMTcgKzMyNywxNCBAQAogICAgICAgICBpbmZvLmJvZHktPnNldExvYyhpbmZvLmJvZHlT
dGFydExpbmUsIGluZm8uYm9keUVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlv
bi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBpbmZvLmJvZHktPnNldEluZmVycmVkTmFtZSgq
bmFtZSk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JT
ZXRTdGFydE9mZnNldCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3Bl
cnR5Tm9kZSgqbmFtZSwgbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24s
IG1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLAotICAgICAgICAgICAgaW5mby5i
b2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGlu
Zm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENv
bHVtbiksIGluZm8ucGFyYW1ldGVycyksIHR5cGUpOworICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKm5hbWUsIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0V4
cHJOb2RlKGxvY2F0aW9uLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgaW5m
by5ib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQs
IGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFy
dENvbHVtbiksIGluZm8ucGFyYW1ldGVycyksIHR5cGUpOwogICAgIH0KICAgICAKICAgICBORVZF
Ul9JTkxJTkUgUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2
bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwgZG91YmxlIG5hbWUsIGNvbnN0IFBh
cnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZ2V0T3JTZXRTdGFy
dE9mZnNldCkKICAgICB7CiAgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0
TGluZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxp
bmVTdGFydE9mZnNldCk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3Rh
cnQoZ2V0T3JTZXRTdGFydE9mZnNldCk7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKHZt
LCBuYW1lKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2Rl
KGlkZW50LCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgdm0tPnBy
b3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLAotICAgICAgICAgICAgaW5mby5ib2R5LCBtX3Nv
dXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VC
cmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGlu
Zm8ucGFyYW1ldGVycyksIHR5cGUpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
KSBQcm9wZXJ0eU5vZGUocGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJ
ZGVudGlmaWVyKHZtLCBuYW1lKSwgbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9j
YXRpb24sIHZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgaW5mby5ib2R5LCBtX3Nv
dXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VC
cmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGlu
Zm8ucGFyYW1ldGVycyksIHR5cGUpOwogICAgIH0KIAogICAgIEFyZ3VtZW50c05vZGUqIGNyZWF0
ZUFyZ3VtZW50cygpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXJndW1lbnRzTm9kZSgp
OyB9CkBAIC0zNTMsNiArMzc4LDE0IEBACiAgICAgICAgIHJldHVybiBkZWNsOwogICAgIH0KIAor
ICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUNsYXNzRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9uTm9k
ZSogY29uc3RydWN0b3JEZWNsYXJhdGlvbiwKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHBhcmVu
dENsYXNzRXhwcmVzc2lvbiwgUHJvcGVydHlMaXN0Tm9kZSogaW5zdGFuY2VNZXRob2RzLCBQcm9w
ZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkK
KyAgICB7CisgICAgICAgIENsYXNzRGVjbE5vZGUqIGRlY2wgPSBuZXcgKG1fcGFyc2VyQXJlbmEp
IENsYXNzRGVjbE5vZGUobG9jYXRpb24sIG5hbWUsIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24sIHBh
cmVudENsYXNzRXhwcmVzc2lvbiwgaW5zdGFuY2VNZXRob2RzLCBzdGF0aWNNZXRob2RzKTsKKyAg
ICAgICAgZGVjbC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZz
ZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgIHJldHVybiBkZWNsOworICAg
IH0KKwogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJsb2NrU3RhdGVtZW50KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEpTQzo6U291cmNlRWxlbWVudHMqIGVsZW1lbnRzLCBpbnQg
c3RhcnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7CiAgICAgICAgIEJsb2NrTm9kZSogYmxvY2sg
PSBuZXcgKG1fcGFyc2VyQXJlbmEpIEJsb2NrTm9kZShsb2NhdGlvbiwgZWxlbWVudHMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJ
KHJldmlzaW9uIDE3OTAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNv
bnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDIzIEBACiAgICAgewog
ICAgIH0KIAorICAgIGlubGluZSBTdXBlck5vZGU6OlN1cGVyTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQorICAg
IHsKKyAgICB9CisKKyAgICBpbmxpbmUgU3VwZXJCcmFja2V0QWNjZXNzb3JOb2RlOjpTdXBlckJy
YWNrZXRBY2Nlc3Nvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIHN1YnNjcmlwdCkKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikK
KyAgICAgICAgLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpCisgICAgeworICAgIH0KKworICAgIGlu
bGluZSBTdXBlckRvdEFjY2Vzc29yTm9kZTo6U3VwZXJEb3RBY2Nlc3Nvck5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgICAg
IDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCisgICAgICAgICwgbV9pZGVudChpZGVudCkKKyAg
ICB7CisgICAgfQorCiBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAg
ICAgICAgICwgbV9pZGVudChpZGVudCkKQEAgLTE2OCw2ICsxODUsNyBAQAogICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fbm9kZShub2RlKQogICAgICAgICAs
IG1fbmV4dCgwKQorICAgICAgICAsIG1faXNNZXRob2RMaXN0KGZhbHNlKQogICAgIHsKICAgICB9
CiAKQEAgLTE3NSw2ICsxOTMsNyBAQAogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9u
KQogICAgICAgICAsIG1fbm9kZShub2RlKQogICAgICAgICAsIG1fbmV4dCgwKQorICAgICAgICAs
IG1faXNNZXRob2RMaXN0KGZhbHNlKQogICAgIHsKICAgICAgICAgbGlzdC0+bV9uZXh0ID0gdGhp
czsKICAgICB9CkBAIC03NjgsNiArNzg3LDE5IEBACiAgICAgICAgIG1fYm9keS0+ZmluaXNoUGFy
c2luZyhzb3VyY2UsIHBhcmFtZXRlciwgaWRlbnQsIEZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAg
IH0KIAorICAgIGlubGluZSBDbGFzc0RlY2xOb2RlOjpDbGFzc0RlY2xOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25O
b2RlKiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uLAorICAgICAgICBFeHByZXNzaW9uTm9kZSogcGFy
ZW50Q2xhc3NFeHByZXNzaW9uLCBQcm9wZXJ0eUxpc3ROb2RlKiBpbnN0YW5jZU1ldGhvZHMsIFBy
b3BlcnR5TGlzdE5vZGUqIHN0YXRpY01ldGhvZHMpCisgICAgICAgIDogU3RhdGVtZW50Tm9kZShs
b2NhdGlvbikKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICAgICAgLCBtX2NvbnN0cnVjdG9y
RGVjbGFyYXRpb24oY29uc3RydWN0b3JEZWNsYXJhdGlvbikKKyAgICAgICAgLCBtX3BhcmVudENs
YXNzRXhwcmVzc2lvbihwYXJlbnRDbGFzc0V4cHJlc3Npb24pCisgICAgICAgICwgbV9pbnN0YW5j
ZU1ldGhvZHMoaW5zdGFuY2VNZXRob2RzKQorICAgICAgICAsIG1fc3RhdGljTWV0aG9kcyhzdGF0
aWNNZXRob2RzKQorICAgIHsKKyAgICAgICAgaWYgKGluc3RhbmNlTWV0aG9kcykKKyAgICAgICAg
ICAgIGluc3RhbmNlTWV0aG9kcy0+c2V0SXNNZXRob2RMaXN0KCk7CisgICAgfQorCiAgICAgaW5s
aW5lIENhc2VDbGF1c2VOb2RlOjpDYXNlQ2xhdXNlTm9kZShFeHByZXNzaW9uTm9kZSogZXhwciwg
U291cmNlRWxlbWVudHMqIHN0YXRlbWVudHMpCiAgICAgICAgIDogbV9leHByKGV4cHIpCiAgICAg
ICAgICwgbV9zdGF0ZW1lbnRzKHN0YXRlbWVudHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gMTc5MDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCwxMiArMTY4LDEzIEBA
CiAgICAgICAgIHBhdHRlcm5zKClbaV0tPmRlcmVmKCk7CiB9CiAKLUZ1bmN0aW9uQm9keU5vZGU6
OkZ1bmN0aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVk
IHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0cmljdENvbnRleHQp
CitGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFBhcnNlckFyZW5hJiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVu
ZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29s
IGlzSW5TdHJpY3RDb250ZXh0LCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3Rvcktp
bmQpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0aW9uKQogICAgICwgbV9zdGFydENvbHVt
bihzdGFydENvbHVtbikKICAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKICAgICAsIG1fc3Rh
cnRTdGFydE9mZnNldChzdGFydExvY2F0aW9uLnN0YXJ0T2Zmc2V0KQogICAgICwgbV9pc0luU3Ry
aWN0Q29udGV4dChpc0luU3RyaWN0Q29udGV4dCkKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kSXNC
YXNlKGNvbnN0cnVjdG9yS2luZCA9PSBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFzZSkKIHsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTc5
MDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjMsNiArMTYzLDcgQEAKICAgICAgICAgdmlydHVhbCBib29sIGlzU3VidHJhY3Qo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCb29sZWFu
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzU3ByZWFk
RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1N1cGVyTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYs
IExhYmVsKiwgTGFiZWwqLCBGYWxsVGhyb3VnaE1vZGUpOwogCkBAIC00MjgsNiArNDI5LDM1IEBA
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKICAgICB9OwogCisgICAgY2xhc3MgU3Vw
ZXJOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFN1cGVyTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1cGVyTm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOworICAgIH07CisKKyAgICBj
bGFzcyBTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5v
ZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VwZXJCcmFja2V0QWNjZXNzb3JOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOworCisgICAgICAgIEV4cHJlc3Np
b25Ob2RlKiBtX3N1YnNjcmlwdDsKKyAgICB9OworCisgICAgY2xhc3MgU3VwZXJEb3RBY2Nlc3Nv
ck5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU3VwZXJEb3RBY2Nlc3Nvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRl
bnRpZmllciYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRl
OworCisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1faWRlbnQ7CisgICAgfTsKKwogICAgIGNs
YXNzIFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpOwpAQCAtNTA0LDEyICs1MzQsMTYgQEAK
ICAgICAgICAgUHJvcGVydHlMaXN0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0
eU5vZGUqKTsKICAgICAgICAgUHJvcGVydHlMaXN0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBQcm9wZXJ0eU5vZGUqLCBQcm9wZXJ0eUxpc3ROb2RlKik7CiAKLSAgICBwcml2YXRlOgorICAg
ICAgICB2b2lkIHNldElzTWV0aG9kTGlzdCgpIHsgbV9pc01ldGhvZExpc3QgPSB0cnVlOyB9CisK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGVtaXRQdXRDb25z
dGFudFByb3BlcnR5KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIFByb3BlcnR5Tm9k
ZSYpOwogCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBlbWl0Q29uc3RhbnRQcm9wZXJ0eShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqLCBQcm9wZXJ0eU5vZGUqKTsKKwogICAgICAg
ICBQcm9wZXJ0eU5vZGUqIG1fbm9kZTsKICAgICAgICAgUHJvcGVydHlMaXN0Tm9kZSogbV9uZXh0
OworICAgICAgICBib29sIG1faXNNZXRob2RMaXN0OwogICAgIH07CiAKICAgICBjbGFzcyBPYmpl
Y3RMaXRlcmFsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC0xNTI3LDcgKzE1NjEs
NyBAQAogICAgIHB1YmxpYzoKICAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFEZWxldGFibGU6Om9w
ZXJhdG9yIG5ldzsKIAotICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFBhcnNlckFyZW5hJiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0cmljdENv
bnRleHQpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVk
IHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0cmljdENvbnRleHQs
IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMq
IHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KIApAQCAt
MTU1NSw2ICsxNTg5LDcgQEAKIAogICAgICAgICBpbnQgc3RhcnRTdGFydE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRTdGFydE9mZnNldDsgfQogICAgICAgICBib29sIGlzSW5TdHJpY3RD
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29udGV4dDsgfQorICAgICAgICBi
b29sIGNvbnN0cnVjdG9yS2luZElzQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0b3JL
aW5kSXNCYXNlOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVu
dDsKQEAgLTE1NjcsNyArMTYwMiw4IEBACiAgICAgICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOwog
ICAgICAgICBTb3VyY2VDb2RlIG1fc291cmNlOwogICAgICAgICBpbnQgbV9zdGFydFN0YXJ0T2Zm
c2V0OwotICAgICAgICBib29sIG1faXNJblN0cmljdENvbnRleHQ7CisgICAgICAgIGJvb2wgbV9p
c0luU3RyaWN0Q29udGV4dCA6IDE7CisgICAgICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRJc0Jh
c2UgOiAxOwogICAgIH07CiAKICAgICBjbGFzcyBGdW5jdGlvbk5vZGUgZmluYWwgOiBwdWJsaWMg
U2NvcGVOb2RlIHsKQEAgLTE3MjQsNiArMTc2MCwyMiBAQAogICAgICAgICBGdW5jdGlvbkJvZHlO
b2RlKiBtX2JvZHk7CiAgICAgfTsKIAorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW5oZXJpdCBm
cm9tIFRocm93YWJsZUV4cHJlc3Npb25EYXRhLgorICAgIGNsYXNzIENsYXNzRGVjbE5vZGUgZmlu
YWwgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBDbGFzc0Rl
Y2xOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNz
aW9uTm9kZSogY29uc3RydWN0b3JEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgIEV4cHJlc3Npb25O
b2RlKiBwYXJlbnRDbGFzcywgUHJvcGVydHlMaXN0Tm9kZSogaW5zdGFuY2VNZXRob2RzLCBQcm9w
ZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZp
cnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIG92ZXJyaWRlOworCisgICAgICAgIElkZW50aWZpZXIgbV9uYW1lOworICAgICAgICBFeHBy
ZXNzaW9uTm9kZSogbV9jb25zdHJ1Y3RvckRlY2xhcmF0aW9uOworICAgICAgICBFeHByZXNzaW9u
Tm9kZSogbV9wYXJlbnRDbGFzc0V4cHJlc3Npb247CisgICAgICAgIFByb3BlcnR5TGlzdE5vZGUq
IG1faW5zdGFuY2VNZXRob2RzOworICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBtX3N0YXRpY01l
dGhvZHM7CisgICAgfTsKKwogICAgIGNsYXNzIENhc2VDbGF1c2VOb2RlIDogcHVibGljIFBhcnNl
ckFyZW5hRnJlZWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgQ2FzZUNsYXVzZU5vZGUoRXhw
cmVzc2lvbk5vZGUqLCBTb3VyY2VFbGVtZW50cyogPSAwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9uIDE3OTAzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1MCw2ICsx
MTUwLDEwIEBACiAgICAgY2FzZSBDT05TVFRPS0VOOgogICAgICAgICByZXN1bHQgPSBwYXJzZUNv
bnN0RGVjbGFyYXRpb24oY29udGV4dCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xBU1NU
T0tFTjoKKyAgICAgICAgZmFpbElmRmFsc2UobV9zdGF0ZW1lbnREZXB0aCA9PSAxLCAiQ2xhc3Mg
ZGVjbGFyYXRpb24gaXMgbm90IGFsbG93ZWQgaW4gYSBsZXhpY2FsbHkgbmVzdGVkIHN0YXRlbWVu
dCIpOworICAgICAgICByZXN1bHQgPSBwYXJzZUNsYXNzRGVjbGFyYXRpb24oY29udGV4dCk7Cisg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRlVOQ1RJT046CiAgICAgICAgIGZhaWxJZkZhbHNlSWZT
dHJpY3QobV9zdGF0ZW1lbnREZXB0aCA9PSAxLCAiU3RyaWN0IG1vZGUgZG9lcyBub3QgYWxsb3cg
ZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIGEgbGV4aWNhbGx5IG5lc3RlZCBzdGF0ZW1lbnQiKTsK
ICAgICAgICAgcmVzdWx0ID0gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKGNvbnRleHQpOwpAQCAt
MTI0MCw3ICsxMjQ0LDcgQEAKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvbkJvZHkgUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBKU1BhcnNlckNvbnN0cnVjdG9y
S2luZCBjb25zdHJ1Y3RvcktpbmQpCiB7CiAgICAgSlNUb2tlbkxvY2F0aW9uIHN0YXJ0TG9jYXRp
b24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IHRva2VuQ29s
dW1uKCk7CkBAIC0xMjQ4LDE0ICsxMjUyLDE0IEBACiAKICAgICBpZiAobWF0Y2goQ0xPU0VCUkFD
RSkpIHsKICAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5Db2x1bW4oKTsKLSAgICAg
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2Vu
TG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2Vu
TG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpLCBjb25zdHJ1
Y3RvcktpbmQpOwogICAgIH0KICAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3Rh
dGVtZW50RGVwdGgpOwogICAgIG1fc3RhdGVtZW50RGVwdGggPSAwOwogICAgIHR5cGVuYW1lIFRy
ZWVCdWlsZGVyOjpGdW5jdGlvbkJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyKGNvbnN0X2Nhc3Q8Vk0q
PihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CiAgICAgZmFpbElmRmFsc2UocGFyc2VTb3VyY2VFbGVt
ZW50cyhib2R5QnVpbGRlciwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwgIkNhbm5vdCBwYXJzZSBib2R5
IG9mIHRoaXMgZnVuY3Rpb24iKTsKICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVt
bigpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9u
LCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1vZGUoKSk7
CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRv
a2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpLCBjb25z
dHJ1Y3RvcktpbmQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciogc3RyaW5nRm9yRnVuY3Rpb25N
b2RlKEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUpCkBAIC0xMjY3LDEzICsxMjcxLDE1IEBACiAgICAg
ICAgIHJldHVybiAic2V0dGVyIjsKICAgICBjYXNlIEZ1bmN0aW9uTW9kZToKICAgICAgICAgcmV0
dXJuICJmdW5jdGlvbiI7CisgICAgY2FzZSBNZXRob2RNb2RlOgorICAgICAgICByZXR1cm4gIm1l
dGhvZCI7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rp
b25JbmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJl
bWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2Nv
cGUsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mIGluZm8pCit0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZv
KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMs
IEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIEpT
UGFyc2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgUGFyc2VyRnVuY3Rpb25JbmZv
PFRyZWVCdWlsZGVyPiYgaW5mbykKIHsKICAgICBBdXRvUG9wU2NvcGVSZWYgZnVuY3Rpb25TY29w
ZSh0aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAgZnVuY3Rpb25TY29wZS0+c2V0SXNGdW5jdGlvbigp
OwpAQCAtMTI4OCw3ICsxMjk0LDcgQEAKICAgICAgICAgICAgIGZhaWxJZkZhbHNlSWZTdHJpY3Qo
ZnVuY3Rpb25TY29wZS0+ZGVjbGFyZVZhcmlhYmxlKGluZm8ubmFtZSksICInIiwgaW5mby5uYW1l
LT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkICIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShtb2Rl
KSwgIiBuYW1lIGluIHN0cmljdCBtb2RlIik7CiAgICAgfSBlbHNlIGlmIChyZXF1aXJlbWVudHMg
PT0gRnVuY3Rpb25OZWVkc05hbWUpIHsKICAgICAgICAgaWYgKG1hdGNoKE9QRU5QQVJFTikgJiYg
bW9kZSA9PSBGdW5jdGlvbk1vZGUpCi0gICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkZ1bmN0aW9u
IHN0YXRlbWVudHMgbXVzdCBoYXZlIGEgbmFtZSIpOworICAgICAgICAgICAgc2VtYW50aWNGYWls
KHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShtb2RlKSwgIiBtdXN0IGhhdmUgYSBuYW1lIik7CiAgICAg
ICAgIHNlbWFudGljRmFpbHVyZUR1ZVRvS2V5d29yZChzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9k
ZSksICIgbmFtZSIpOwogICAgICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9rZW4oKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTMyNiw3ICsxMzMyLDcgQEAKICAgICAgICAgICAgIGVuZExv
Y2F0aW9uLnN0YXJ0T2Zmc2V0IC0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogICAgICAg
ICB1bnNpZ25lZCBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxp
bmVTdGFydE9mZnNldDsKIAotICAgICAgICBpbmZvLmJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0
aW9uQm9keShzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgaW5mby5ib2R5U3RhcnRDb2x1bW4s
IGJvZHlFbmRDb2x1bW4sIGNhY2hlZEluZm8tPnN0cmljdE1vZGUpOworICAgICAgICBpbmZvLmJv
ZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlv
biwgaW5mby5ib2R5U3RhcnRDb2x1bW4sIGJvZHlFbmRDb2x1bW4sIGNhY2hlZEluZm8tPnN0cmlj
dE1vZGUsIGNvbnN0cnVjdG9yS2luZCk7CiAgICAgICAgIAogICAgICAgICBmdW5jdGlvblNjb3Bl
LT5yZXN0b3JlRnJvbVNvdXJjZVByb3ZpZGVyQ2FjaGUoY2FjaGVkSW5mbyk7CiAgICAgICAgIGZh
aWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVW
YXJpYWJsZUluZm8pLCAiUGFyc2VyIGVycm9yIik7CkBAIC0xMzQ5LDcgKzEzNTUsNyBAQAogICAg
IH0KICAgICBtX2xhc3RGdW5jdGlvbk5hbWUgPSBsYXN0RnVuY3Rpb25OYW1lOwogICAgIFBhcnNl
clN0YXRlIG9sZFN0YXRlID0gc2F2ZVN0YXRlKCk7Ci0gICAgaW5mby5ib2R5ID0gcGFyc2VGdW5j
dGlvbkJvZHkoY29udGV4dCk7CisgICAgaW5mby5ib2R5ID0gcGFyc2VGdW5jdGlvbkJvZHkoY29u
dGV4dCwgY29uc3RydWN0b3JLaW5kKTsKICAgICByZXN0b3JlU3RhdGUob2xkU3RhdGUpOwogICAg
IGZhaWxJZkZhbHNlKGluZm8uYm9keSwgIkNhbm5vdCBwYXJzZSB0aGUgYm9keSBvZiB0aGlzICIs
IHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShtb2RlKSk7CiAgICAgY29udGV4dC5zZXRFbmRPZmZzZXQo
aW5mby5ib2R5LCBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCkpOwpAQCAtMTM5OCwxMiArMTQwNCwx
MjMgQEAKICAgICB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFydCA9IHRva2VuU3RhcnQoKTsK
ICAgICBuZXh0KCk7CiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwot
ICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRz
TmFtZSwgRnVuY3Rpb25Nb2RlLCB0cnVlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5j
dGlvbiIpOworICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5j
dGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCB0cnVlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2lu
ZDo6QmFzZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKICAgICBmYWls
SWZGYWxzZShpbmZvLm5hbWUsICJGdW5jdGlvbiBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUi
KTsKICAgICBmYWlsSWZGYWxzZUlmU3RyaWN0KGRlY2xhcmVWYXJpYWJsZShpbmZvLm5hbWUpLCAi
Q2Fubm90IGRlY2xhcmUgYSBmdW5jdGlvbiBuYW1lZCAnIiwgaW5mby5uYW1lLT5pbXBsKCksICIn
IGluIHN0cmljdCBtb2RlIik7CiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0
ZW1lbnQobG9jYXRpb24sIGluZm8sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0KTsKIH0KIAordGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzc0RlY2xhcmF0aW9uKFRyZWVC
dWlsZGVyJiBjb250ZXh0KQoreworICAgIEFTU0VSVChtYXRjaChDTEFTU1RPS0VOKSk7CisgICAg
SlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CisgICAgSlNUZXh0UG9z
aXRpb24gY2xhc3NTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOworICAgIHVuc2lnbmVkIGNs
YXNzU3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgdW5zaWduZWQgY2xhc3NFbmRMaW5lID0g
MDsKKyAgICBuZXh0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSA9IDA7CisgICAgVHJl
ZUV4cHJlc3Npb24gcGFyZW50Q2xhc3MgPSAwOworICAgIFRyZWVFeHByZXNzaW9uIGNvbnN0cnVj
dG9yID0gMDsKKyAgICBUcmVlUHJvcGVydHlMaXN0IGluc3RhbmNlTWV0aG9kcyA9IDA7CisgICAg
VHJlZVByb3BlcnR5TGlzdCBzdGF0aWNNZXRob2RzID0gMDsKKy8vICAgIFRyZWVGb3JtYWxQYXJh
bWV0ZXJMaXN0IGNvbnN0cnVjdG9yUGFyYW1ldGVycyA9IDA7CisgICAgZmFpbElmRmFsc2UoKHBh
cnNlQ2xhc3NJbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBuYW1lLCBwYXJlbnRDbGFz
cywgY29uc3RydWN0b3IsIGluc3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9kcykpLCAiQ2Fubm90
IHBhcnNlIHRoaXMgY2xhc3MiKTsKKyAgICBmYWlsSWZGYWxzZShuYW1lLCAiQ2xhc3Mgc3RhdGVt
ZW50cyBtdXN0IGhhdmUgYSBuYW1lIik7CisgICAgZmFpbElmRmFsc2UoZGVjbGFyZVZhcmlhYmxl
KG5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBjbGFzcyBuYW1lZCAnIiwgbmFtZS0+aW1wbCgpLCAi
JyIpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjcmVhdGUgYSBNaXJhbmRhIGZ1bmN0aW9u
IGhlcmUuCisgICAgZmFpbElmRmFsc2UoY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSBhIGNs
YXNzIHdpdGhvdXQgY29uc3RydWN0b3IiKTsKKworICAgIEpTVGV4dFBvc2l0aW9uIGNsYXNzRW5k
ID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKKworICAgIFRyZWVFeHByZXNzaW9uIGNsYXNzRGVj
bHJhdGlvbiA9IGNvbnRleHQuY3JlYXRlQXNzaWduUmVzb2x2ZShsb2NhdGlvbiwgKm5hbWUsIGNv
bnN0cnVjdG9yLCBjbGFzc1N0YXJ0LCBjbGFzc1N0YXJ0ICsgMSwgY2xhc3NFbmQpOworICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZUNsYXNzRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgKm5hbWUsIGNs
YXNzRGVjbHJhdGlvbiwgcGFyZW50Q2xhc3MsIGluc3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9k
cywgY2xhc3NTdGFydExpbmUsIGNsYXNzRW5kTGluZSk7CisKKy8vICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGxvY2F0aW9uLCBuYW1lLCBjb25zdHJ1Y3RvciwgY29u
c3RydWN0b3JQYXJhbWV0ZXJzLCAwLCAwLCAwLCAwLCAwLCAwKTsKKy8vICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUVtcHR5U3RhdGVtZW50KGxvY2F0aW9uKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VDbGFzc0luZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9u
UmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywgY29uc3QgSWRlbnRpZmllciomIG5hbWUsCisgICAg
VHJlZUV4cHJlc3Npb24mIHBhcmVudENsYXNzLCBUcmVlRXhwcmVzc2lvbiYgY29uc3RydWN0b3Is
IFRyZWVQcm9wZXJ0eUxpc3QmIGluc3RhbmNlTWV0aG9kcywgVHJlZVByb3BlcnR5TGlzdCYgc3Rh
dGljTWV0aG9kcykKK3sKKyAgICBBdXRvUG9wU2NvcGVSZWYgY2xhc3NTY29wZSh0aGlzLCBwdXNo
U2NvcGUoKSk7CisgICAgY2xhc3NTY29wZS0+c2V0U3RyaWN0TW9kZSgpOworCisgICAgaWYgKG1h
dGNoKElERU5UKSkgeworICAgICAgICBuYW1lID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAg
ICAgIG5leHQoKTsKKyAgICAgICAgZmFpbElmRmFsc2UoY2xhc3NTY29wZS0+ZGVjbGFyZVZhcmlh
YmxlKG5hbWUpLCAiJyIsIG5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgY2xhc3MgbmFt
ZSIpOworICAgIH0gZWxzZSBpZiAocmVxdWlyZW1lbnRzID09IEZ1bmN0aW9uTmVlZHNOYW1lKSB7
CisvKiAgICAgICAgaWYgKG1hdGNoKE9QRU5CUkFDS0VUKSB8fCBtYXRjaChFWFRFTkRTKSkKKyAg
ICAgICAgICAgIHNlbWFudGljRmFpbCgiY2xhc3Mgc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBuYW1l
Iik7Ki8KKyAgICAgICAgc2VtYW50aWNGYWlsdXJlRHVlVG9LZXl3b3JkKCJjbGFzcyBuYW1lIik7
CisgICAgICAgIGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKGNvbnN1bWUoRVhURU5EUykpIHsKKyAgICAgICAgcGFyZW50
Q2xhc3MgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICBmYWlsSWZG
YWxzZShwYXJlbnRDbGFzcywgIkNhbm5vdCBwYXJzZSB0aGUgcGFyZW50IGNsYXNzIG5hbWUiKTsK
KyAgICB9CisKKyAgICBjb25zdW1lT3JGYWlsKE9QRU5CUkFDRSwgIkV4cGVjdGVkIGFuIG9wZW5p
bmcgJ3snIGF0IHRoZSBzdGFydCBvZiBhIGNsYXNzIGJvZHkiKTsKKworICAgIFRyZWVQcm9wZXJ0
eUxpc3QgaW5zdGFuY2VNZXRob2RzVGFpbCA9IDA7CisgICAgVHJlZVByb3BlcnR5TGlzdCBzdGF0
aWNNZXRob2RzVGFpbCA9IDA7CisgICAgd2hpbGUgKCFtYXRjaChDTE9TRUJSQUNFKSkgeworICAg
ICAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkKKyAgICAgICAgICAgIG5leHQoKTsKKworICAgICAg
ICBib29sIGlzU3RhdGljTWV0aG9kID0gbWF0Y2goU1RBVElDVE9LRU4pOworICAgICAgICBpZiAo
aXNTdGF0aWNNZXRob2QpCisgICAgICAgICAgICBuZXh0KCk7CisKKyAgICAgICAgLy8gRklYTUU6
IFNob3VsZCBiZSBhIGJpbmRpbmcgaWRlbnRpZmllci4KKyAgICAgICAgaWYgKCFtYXRjaChJREVO
VCkpIHsKKyAgICAgICAgICAgIGZhaWxXaXRoTWVzc2FnZSgiRXhwZWN0ZWQgYW4gaW5kZW50aWZp
ZXIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgSlNUb2tlbkxv
Y2F0aW9uIG1ldGhvZExvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CisgICAgICAgIHVuc2lnbmVk
IG1ldGhvZFN0YXJ0ID0gdG9rZW5TdGFydCgpOworICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88
VHJlZUJ1aWxkZXI+IGluZm87CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5m
byhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCBmYWxzZSwKKyAgICAg
ICAgICAgIHBhcmVudENsYXNzID8gSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQ6Ok1heWJlRGVyaXZl
ZCA6IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2Ug
dGhpcyBtZXRob2QiKTsKKyAgICAgICAgZmFpbElmRmFsc2UoaW5mby5uYW1lLCAibWV0aG9kIG11
c3QgaGF2ZSBhIG5hbWUiKTsKKyAgICAgICAgZmFpbElmRmFsc2UoZGVjbGFyZVZhcmlhYmxlKGlu
Zm8ubmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIG1ldGhvZCBuYW1lZCAnIiwgaW5mby5uYW1lLT5p
bXBsKCksICInIik7CisKKyAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yID0gIWlzU3RhdGljTWV0
aG9kICYmICppbmZvLm5hbWUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3I7Cisg
ICAgICAgIGlmIChpc0NvbnN0cnVjdG9yKQorICAgICAgICAgICAgaW5mby5uYW1lID0gbmFtZTsg
Ly8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8/CisKKyAgICAgICAgVHJlZUV4cHJlc3Npb24gbWV0
aG9kID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkV4cHIobWV0aG9kTG9jYXRpb24sIGluZm8sIG1l
dGhvZFN0YXJ0KTsKKyAgICAgICAgaWYgKGlzQ29uc3RydWN0b3IpIHsKKyAgICAgICAgICAgIHNl
bWFudGljRmFpbElmVHJ1ZShjb25zdHJ1Y3RvciwgIkNhbm5vdCBkZWNscmF0ZSBtdWx0aXBsZSBj
b25zdHJ1Y3RvcnMgaW4gYSBzaW5nbGUgY2xhc3MiKTsKKyAgICAgICAgICAgIGNvbnN0cnVjdG9y
ID0gbWV0aG9kOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IFN5bnRh
eCBlcnJvciB3aGVuIHN1cGVyKCkgaXMgY2FsbGVkCisgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJ
ZlRydWUoKmluZm8ubmFtZSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICJDYW5u
b3QgZGVjbHJhdGUgYSBzdGF0aWMgbWV0aG9kIG5hbWVkICciLCBpbmZvLm5hbWUtPmltcGwoKSwg
IiciKTsKKyAgICAgICAgICAgIFRyZWVQcm9wZXJ0eSBwcm9wZXJ0eSA9IGNvbnRleHQuY3JlYXRl
UHJvcGVydHkoaW5mby5uYW1lLCBtZXRob2QsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQsIC8qIGNv
bXBsZXRlICovIGZhbHNlKTsKKworICAgICAgICAgICAgVHJlZVByb3BlcnR5TGlzdCYgaGVhZCA9
IGlzU3RhdGljTWV0aG9kID8gc3RhdGljTWV0aG9kcyA6IGluc3RhbmNlTWV0aG9kczsKKyAgICAg
ICAgICAgIFRyZWVQcm9wZXJ0eUxpc3QmIHRhaWwgPSBpc1N0YXRpY01ldGhvZCA/IHN0YXRpY01l
dGhvZHNUYWlsIDogaW5zdGFuY2VNZXRob2RzVGFpbDsKKworICAgICAgICAgICAgaWYgKHRhaWwp
CisgICAgICAgICAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KG1ldGhv
ZExvY2F0aW9uLCBwcm9wZXJ0eSwgdGFpbCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBoZWFkID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QobWV0aG9kTG9jYXRpb24s
IHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICB0YWlsID0gaGVhZDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VCUkFDRSwgIkV4cGVj
dGVkIGEgY2xvc2luZyAnfScgYWZ0ZXIgYSBjbGFzcyBib2R5Iik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogc3RydWN0IExhYmVsSW5mbyB7CiAgICAgTGFiZWxJbmZvKGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBlbmQpCiAgICAgOiBtX2lkZW50KGlkZW50KQpAQCAtMTgxNSwxMCArMTkzMiwxMCBAQAog
ICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CiAgICAgICAgIGlm
ICh0eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyKSB7CiAgICAgICAgICAgICBmYWlsSWZGYWxz
ZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3IgZ2V0dGVy
IGRlZmluaXRpb24iKTsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5m
byhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBHZXR0ZXJNb2RlLCBmYWxzZSwgaW5m
bykpLCAiQ2Fubm90IHBhcnNlIGdldHRlciBkZWZpbml0aW9uIik7CisgICAgICAgICAgICBmYWls
SWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50
cywgR2V0dGVyTW9kZSwgZmFsc2UsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZv
KSksICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoKE9QRU5QQVJFTiksICJFeHBlY3RlZCBhIHBh
cmFtZXRlciBsaXN0IGZvciBzZXR0ZXIgZGVmaW5pdGlvbiIpOwotICAgICAgICAgICAgZmFpbElm
RmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMs
IFNldHRlck1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRp
b24iKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0
LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBTZXR0ZXJNb2RlLCBmYWxzZSwgSlNQYXJzZXJDb25z
dHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBzZXR0ZXIgZGVmaW5pdGlv
biIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChzdHJpbmdQcm9wZXJ0eU5hbWUpCiAgICAgICAg
ICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGxvY2F0aW9u
LCB0eXBlLCBjb21wbGV0ZSwgc3RyaW5nUHJvcGVydHlOYW1lLCBpbmZvLCBnZXR0ZXJPclNldHRl
clN0YXJ0T2Zmc2V0KTsKQEAgLTIxNjMsMTQgKzIyODAsMTkgQEAKICAgICAgICAgbmV3Q291bnQr
KzsKICAgICB9CiAKKyAgICBib29sIGJhc2VJc1N1cGVyID0gZmFsc2U7CiAgICAgaWYgKG1hdGNo
KEZVTkNUSU9OKSkgewogICAgICAgICB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFydCA9IHRv
a2VuU3RhcnQoKTsKICAgICAgICAgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKCk7CiAgICAgICAg
IG5leHQoKTsKICAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwog
ICAgICAgICBpbmZvLm5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7
Ci0gICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlv
bk5vUmVxdWlyZW1lbnRzLCBGdW5jdGlvbk1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFy
c2UgZnVuY3Rpb24gZXhwcmVzc2lvbiIpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5j
dGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25Nb2RlLCBm
YWxzZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJz
ZSBmdW5jdGlvbiBleHByZXNzaW9uIik7CiAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUZ1
bmN0aW9uRXhwcihsb2NhdGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOworICAgIH0g
ZWxzZSBpZiAobWF0Y2goU1VQRVIpKSB7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LnN1cGVyRXhw
cihsb2NhdGlvbik7CisgICAgICAgIGJhc2VJc1N1cGVyID0gdHJ1ZTsKKyAgICAgICAgbmV4dCgp
OwogICAgIH0gZWxzZQogICAgICAgICBiYXNlID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250
ZXh0KTsKICAgICAKQEAgLTIxODYsNiArMjMwOCw4IEBACiAgICAgICAgICAgICBpbnQgaW5pdGlh
bEFzc2lnbm1lbnRzID0gbV9hc3NpZ25tZW50Q291bnQ7CiAgICAgICAgICAgICBUcmVlRXhwcmVz
c2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgICAgIGZh
aWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHN1YnNjcmlwdCBleHByZXNzaW9uIik7
CisgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgICAgICAgICAgZmFpbElmVHJ1
ZShpbml0aWFsQXNzaWdubWVudHMgfHwgbV9hc3NpZ25tZW50Q291bnQsICJDYW5ub3QgYXNzaWdu
IGEgdmFsdWUgdG8gc3VwZXIiKTsKICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUJy
YWNrZXRBY2Nlc3MobG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBpbml0aWFsQXNzaWdubWVudHMg
IT0gbV9hc3NpZ25tZW50Q291bnQsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgdG9r
ZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xP
U0VCUkFDS0VULCAiXSIsICJlbmQiLCAic3Vic2NyaXB0IGV4cHJlc3Npb24iKTsKICAgICAgICAg
ICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKQEAgLTIyMDQsNiArMjMyOCw3IEBACiAg
ICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVu
ZFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBw
YXJzZUFyZ3VtZW50cyhjb250ZXh0LCBBbGxvd1NwcmVhZCk7CiAgICAgICAgICAgICAgICAgZmFp
bElmRmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IGlmIGJhc2VJc1N1cGVyOiBmYWlsSWZGYWxzZShpc0NvbnN0
cnVjdG9yLCAiQ2Fubm90IGNhbGwgc3VwZXIoKSBpbiB0aGlzIGZ1bmN0aW9uIikuCiAgICAgICAg
ICAgICAgICAgYmFzZSA9IGNvbnRleHQubWFrZUZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGJh
c2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fbm9uTEhTQ291bnQg
PSBub25MSFNDb3VudDsKQEAgLTIyMjEsOCArMjM0NiwxMCBAQAogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgZ290byBlbmRNZW1iZXJFeHByZXNzaW9uOwogICAgICAgICB9CisgICAgICAg
IGJhc2VJc1N1cGVyID0gZmFsc2U7CiAgICAgfQogZW5kTWVtYmVyRXhwcmVzc2lvbjoKKyAgICBm
YWlsSWZUcnVlKGJhc2VJc1N1cGVyICYmICFuZXdDb3VudCwgIkNhbm5vdCByZWZlcmVuY2Ugc3Vw
ZXIiKTsKICAgICB3aGlsZSAobmV3Q291bnQtLSkKICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3Jl
YXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgZXhwcmVzc2lvblN0YXJ0LCBsYXN0VG9rZW5FbmRQ
b3NpdGlvbigpKTsKICAgICByZXR1cm4gYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTc5MDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQAogCiBlbnVt
IFNvdXJjZUVsZW1lbnRzTW9kZSB7IENoZWNrRm9yU3RyaWN0TW9kZSwgRG9udENoZWNrRm9yU3Ry
aWN0TW9kZSB9OwogZW51bSBGdW5jdGlvblJlcXVpcmVtZW50cyB7IEZ1bmN0aW9uTm9SZXF1aXJl
bWVudHMsIEZ1bmN0aW9uTmVlZHNOYW1lIH07Ci1lbnVtIEZ1bmN0aW9uUGFyc2VNb2RlIHsgRnVu
Y3Rpb25Nb2RlLCBHZXR0ZXJNb2RlLCBTZXR0ZXJNb2RlIH07CitlbnVtIEZ1bmN0aW9uUGFyc2VN
b2RlIHsgRnVuY3Rpb25Nb2RlLCBHZXR0ZXJNb2RlLCBTZXR0ZXJNb2RlLCBNZXRob2RNb2RlIH07
CiBlbnVtIERlY29uc3RydWN0aW9uS2luZCB7CiAgICAgRGVjb25zdHJ1Y3RUb1ZhcmlhYmxlcywK
ICAgICBEZWNvbnN0cnVjdFRvUGFyYW1ldGVycywKQEAgLTY5Myw2ICs2OTMsNyBAQAogICAgIAog
ICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNl
U291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImLCBTb3VyY2VFbGVtZW50c01vZGUpOwogICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZVN0YXRlbWVudChU
cmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3RpdmUsIHVuc2lnbmVkKiBkaXJl
Y3RpdmVMaXRlcmFsTGVuZ3RoID0gMCk7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZW50IHBhcnNlQ2xhc3NEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOwogICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUZ1bmN0aW9u
RGVjbGFyYXRpb24oVHJlZUJ1aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VWYXJEZWNsYXJhdGlvbihUcmVlQnVpbGRlciYpOwogICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUNvbnN0RGVj
bGFyYXRpb24oVHJlZUJ1aWxkZXImKTsKQEAgLTcyNiw3ICs3MjcsNyBAQAogICAgIGVudW0gU3By
ZWFkTW9kZSB7IEFsbG93U3ByZWFkLCBEb250QWxsb3dTcHJlYWQgfTsKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUFyZ3VtZW50cyBwYXJzZUFyZ3Vt
ZW50cyhUcmVlQnVpbGRlciYsIFNwcmVhZE1vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVByb3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImLCBib29sIHN0
cmljdCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRy
ZWVGdW5jdGlvbkJvZHkgcGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZ1bmN0aW9uQm9keSBw
YXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kKTsK
ICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZvcm1h
bFBhcmFtZXRlckxpc3QgcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJik7CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xh
cmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBUcmVlRGVjb25zdHJ1
Y3Rpb25QYXR0ZXJuJiBsYXN0UGF0dGVybiwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXpl
ciwgSlNUZXh0UG9zaXRpb24mIGlkZW50U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0U3RhcnQs
IEpTVGV4dFBvc2l0aW9uJiBpbml0RW5kKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IE5FVkVSX0lOTElORSBUcmVlQ29uc3REZWNsTGlzdCBwYXJzZUNvbnN0RGVjbGFyYXRpb25M
aXN0KFRyZWVCdWlsZGVyJik7CkBAIC03MzUsOCArNzM2LDkgQEAKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIHBh
cnNlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuKFRyZWVCdWlsZGVyJiwgRGVjb25zdHJ1Y3Rpb25LaW5k
LCBpbnQgZGVwdGggPSAwKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVS
X0lOTElORSBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIHRyeVBhcnNlRGVjb25zdHJ1Y3Rpb25Q
YXR0ZXJuRXhwcmVzc2lvbihUcmVlQnVpbGRlciYpOwogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRl
ciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSwgYm9vbCBuYW1lSXNJ
bkNvbnRhaW5pbmdTY29wZSwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYpOwotCisg
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1
bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBGdW5jdGlvblBh
cnNlTW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgSlNQYXJzZXJDb25zdHJ1Y3Rv
cktpbmQsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mKTsKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBhcnNlQ2xhc3NJbmZvKFRyZWVC
dWlsZGVyJiwgRnVuY3Rpb25SZXF1aXJlbWVudHMsIGNvbnN0IElkZW50aWZpZXIqJiwKKyAgICAg
ICAgVHJlZUV4cHJlc3Npb24mIHBhcmVudENsYXNzLCBUcmVlRXhwcmVzc2lvbiYgY29uc3RydWN0
b3IsIFRyZWVQcm9wZXJ0eUxpc3QmIGluc3RhbmNlTWV0aG9kcywgVHJlZVByb3BlcnR5TGlzdCYg
c3RhdGljTWV0aG9kcyk7CiAgICAgQUxXQVlTX0lOTElORSBpbnQgaXNCaW5hcnlPcGVyYXRvcihK
U1Rva2VuVHlwZSk7CiAgICAgYm9vbCBhbGxvd0F1dG9tYXRpY1NlbWljb2xvbigpOwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAkocmV2aXNp
b24gMTc5MDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKIGVudW0gSlNQYXJzZXJTdHJpY3Ru
ZXNzIHsgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZUJ1aWx0aW4sIEpTUGFyc2VTdHJpY3QgfTsKIGVu
dW0gSlNQYXJzZXJNb2RlIHsgSlNQYXJzZVByb2dyYW1Db2RlLCBKU1BhcnNlRnVuY3Rpb25Db2Rl
IH07CitlbnVtIGNsYXNzIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kIHsgQmFzZSwgTWF5YmVEZXJp
dmVkIH07CiAKIGVudW0gUHJvZmlsZXJNb2RlIHsgUHJvZmlsZXJPZmYsIFByb2ZpbGVyT24gfTsK
IGVudW0gRGVidWdnZXJNb2RlIHsgRGVidWdnZXJPZmYsIERlYnVnZ2VyT24gfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAx
NzkwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQAogICAgIHR5cGVkZWYgU3ludGF4Q2hlY2tl
ciBGdW5jdGlvbkJvZHlCdWlsZGVyOwogICAgIGVudW0geyBOb25lRXhwciA9IDAsCiAgICAgICAg
IFJlc29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4cHIsIE51bWJlckV4cHIsIFN0cmluZ0V4cHIsCi0g
ICAgICAgIFRoaXNFeHByLCBOdWxsRXhwciwgQm9vbEV4cHIsIFJlZ0V4cEV4cHIsIE9iamVjdExp
dGVyYWxFeHByLAorICAgICAgICBUaGlzRXhwciwgU3VwZXJFeHByLCBOdWxsRXhwciwgQm9vbEV4
cHIsIFJlZ0V4cEV4cHIsIE9iamVjdExpdGVyYWxFeHByLAogICAgICAgICBGdW5jdGlvbkV4cHIs
IEJyYWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhwciwKICAgICAgICAgTmV3RXhwciwgUHJlRXhw
ciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwKICAgICAgICAgQ29uZGl0aW9uYWxF
eHByLCBBc3NpZ25tZW50RXhwciwgVHlwZW9mRXhwciwKQEAgLTE0Myw2ICsxNDMsMTAgQEAKICAg
ICBFeHByZXNzaW9uVHlwZSBjcmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBl
IGNyZWF0ZVZvaWQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0
dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIHRoaXNFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIFRoaXNFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgc3Vw
ZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIFRoaXNFeHByOyB9CisgICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlU3VwZXJDYWxsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25UeXBlLCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiwgY29uc3QgSlNUZXh0UG9zaXRpb24mKSB7IHJldHVybiBTdXBlckV4cHI7IH0KKyAgICBFeHBy
ZXNzaW9uVHlwZSBjcmVhdGVTdXBlckJyYWNrZXRBY2Nlc3MoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvblR5cGUsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9z
aXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYpIHsgcmV0dXJuIFN1cGVyRXhwcjsgfQorICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZVN1cGVyRG90QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IElkZW50aWZpZXIqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mKSB7IHJldHVybiBTdXBlckV4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGNvbnN0IElkZW50aWZpZXIqLCBpbnQpIHsgcmV0dXJuIFJlc29sdmVFeHByOyB9CiAgICAgRXhw
cmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7
IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9i
amVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7IHJldHVybiBPYmplY3RM
aXRlcmFsRXhwcjsgfQpAQCAtMTYxLDcgKzE2NSw3IEBACiAgICAgRXhwcmVzc2lvblR5cGUgY3Jl
YXRlQXNzaWduUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVy
JiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEFzc2lnbm1lbnRFeHBy
OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRW1wdHlWYXJFeHByZXNzaW9uKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKSB7IHJldHVybiBBc3NpZ25tZW50RXhw
cjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCBpbnQp
IHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGJv
b2wpIHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsgfQorICAgIGludCBjcmVhdGVGdW5jdGlv
bkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
LCBpbnQsIGJvb2wsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kKSB7IHJldHVybiBGdW5jdGlvbkJv
ZHlSZXN1bHQ7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZVN0YXJ0KGludCwgaW50KSB7IH0K
ICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gQXJndW1lbnRzUmVzdWx0OyB9CiAg
ICAgaW50IGNyZWF0ZUFyZ3VtZW50cyhpbnQpIHsgcmV0dXJuIEFyZ3VtZW50c1Jlc3VsdDsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5oCShyZXZpc2lvbiAxNzkwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25JZGVudGlmaWVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNiArMjIwLDggQEAK
ICAgICBtYWNybyh5aWVsZCkKIAogI2RlZmluZSBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklF
UlNfRUFDSF9QUk9QRVJUWV9OQU1FKG1hY3JvKSBcCisgICAgbWFjcm8oaG9tZU9iamVjdCkgXAor
ICAgIG1hY3JvKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCkgXAogICAgIG1hY3JvKGl0ZXJhdG9y
KSBcCiAgICAgbWFjcm8oaXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8ocmVzb2x2ZSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24g
MTc5MDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NjcsNyArNDY3LDcgQEAKIAogICAgIHZvaWQgY2xlYXJDb2RlKCk7
CiAKLSAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4
ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUo
KSwgZmFsc2UsIGZhbHNlKTsgfQorICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkg
Y29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFs
KCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UsIHRydWUgLyogQ29uc3RydWN0b3JLaW5k
IGlzICJiYXNlIiAqLyk7IH0KIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJu
IG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLT5udW1WYXJpYWJsZXMoKTsgfQogICAgIHVuc2lnbmVk
IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fdW5saW5rZWRFdmFsQ29kZUJsb2Nr
LT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgfQpAQCAtNTIyLDcgKzUyMiw3IEBACiAKICAgICB2
b2lkIGNsZWFyQ29kZSgpOwogCi0gICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBj
b25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwo
KSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSk7IH0KKyAgICBFeGVjdXRhYmxlSW5mbyBl
eGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZh
dGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlLCB0cnVlIC8q
IENvbnN0cnVjdG9yS2luZCBpcyAiYmFzZSIgKi8pOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245506</attachid>
            <date>2015-01-27 19:33:44 -0800</date>
            <delta_ts>2015-02-26 20:19:45 -0800</delta_ts>
            <desc>Diff against my patch on 140918</desc>
            <filename>native-class-6.patch</filename>
            <type>text/plain</type>
            <size>49921</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suY3BwCmluZGV4IDc0MGEyNDQuLjc3NDJiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtNjEsNyArNjEsOCBA
QCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhdGVGdW5jdGlvbkNvZGVC
bG9jayhWTSYgdm0sIFVubGlua2VkRnVuYwogICAgIGZ1bmN0aW9uLT5maW5pc2hQYXJzaW5nKGV4
ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5m
dW5jdGlvbk1vZGUoKSk7CiAgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2UoZnVuY3Rpb24tPmZl
YXR1cmVzKCksIGZ1bmN0aW9uLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKTsKICAgICAKLSAgICBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT5u
ZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rpb24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5pc1N0cmlj
dE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0gVW5saW5r
ZWRCdWlsdGluRnVuY3Rpb24pKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1
bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUs
CisgICAgICAgIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwgZnVu
Y3Rpb24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2Rl
Rm9yQ29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24sIGV4
ZWN1dGFibGUtPmNvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCgpKSk7CiAgICAgYXV0byBnZW5l
cmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUdlbmVyYXRvcj4odm0sIGZ1bmN0aW9uLmdl
dCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlKSk7CiAgICAgZXJyb3IgPSBn
ZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJv
cjo6RXJyb3JOb25lKQpAQCAtODQsNiArODUsNyBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdAog
ICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChub2RlLT5pc0luU3RyaWN0Q29udGV4dCgpKQogICAg
ICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAgICAsIG1faXNCdWlsdGluRnVuY3Rp
b24oa2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbikKKyAgICAsIG1fY29uc3RydWN0b3JL
aW5kTWF5YmVEZXJpdmVkKG5vZGUtPmNvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCgpKQogICAg
ICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShub2RlLT5pbmZl
cnJlZE5hbWUoKSkKICAgICAsIG1fcGFyYW1ldGVycyhub2RlLT5wYXJhbWV0ZXJzKCkpCkBAIC0y
MDUsNiArMjA3LDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1faXNDb25zdHJ1
Y3RvcihpbmZvLm1faXNDb25zdHJ1Y3RvcikKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMo
ZmFsc2UpCiAgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGluZm8ubV9pc0J1aWx0aW5GdW5jdGlv
bikKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKGluZm8ubV9jb25zdHJ1Y3Rv
cktpbmRNYXliZURlcml2ZWQpCiAgICAgLCBtX2ZpcnN0TGluZSgwKQogICAgICwgbV9saW5lQ291
bnQoMCkKICAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCBmMTE3MDBmLi5jMjYz
OTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaApAQCAtNjYsMTIgKzY2LDEzIEBAIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENh
bGxMaW5rSW5mbzsKIAogc3RydWN0IEV4ZWN1dGFibGVJbmZvIHsKLSAgICBFeGVjdXRhYmxlSW5m
byhib29sIG5lZWRzQWN0aXZhdGlvbiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0cmljdE1vZGUs
IGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbikKKyAgICBFeGVjdXRh
YmxlSW5mbyhib29sIG5lZWRzQWN0aXZhdGlvbiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0cmlj
dE1vZGUsIGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbiwgYm9vbCBj
b25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQpCiAgICAgICAgIDogbV9uZWVkc0FjdGl2YXRpb24o
bmVlZHNBY3RpdmF0aW9uKQogICAgICAgICAsIG1fdXNlc0V2YWwodXNlc0V2YWwpCiAgICAgICAg
ICwgbV9pc1N0cmljdE1vZGUoaXNTdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNDb25zdHJ1Y3Rv
cihpc0NvbnN0cnVjdG9yKQogICAgICAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oaXNCdWlsdGlu
RnVuY3Rpb24pCisgICAgICAgICwgbV9jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQoY29uc3Ry
dWN0b3JLaW5kTWF5YmVEZXJpdmVkKQogICAgIHsKICAgICB9CiAgICAgYm9vbCBtX25lZWRzQWN0
aXZhdGlvbiA6IDE7CkBAIC03OSw2ICs4MCw3IEBAIHN0cnVjdCBFeGVjdXRhYmxlSW5mbyB7CiAg
ICAgYm9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7CiAgICAgYm9vbCBtX2lzQ29uc3RydWN0b3IgOiAx
OwogICAgIGJvb2wgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgYm9vbCBtX2NvbnN0cnVj
dG9yS2luZE1heWJlRGVyaXZlZCA6IDE7CiB9OwogCiBlbnVtIFVubGlua2VkRnVuY3Rpb25LaW5k
IHsKQEAgLTExNyw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gSlNQYXJz
ZVN0cmljdDsKICAgICAgICAgcmV0dXJuIEpTUGFyc2VOb3JtYWw7CiAgICAgfQorICAgIGJvb2wg
Y29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3Rv
cktpbmRNYXliZURlcml2ZWQ7IH0KIAogICAgIHVuc2lnbmVkIGZpcnN0TGluZU9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lT2Zmc2V0OyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KQEAgLTE2OSw2ICsxNzIsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9pc0luU3RyaWN0Q29udGV4dCA6IDE7CiAgICAgYm9vbCBtX2hhc0Nh
cHR1cmVkVmFyaWFibGVzIDogMTsKICAgICBib29sIG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOwor
ICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQgOiAxOwogCiAgICAgSWRlbnRp
ZmllciBtX25hbWU7CiAgICAgSWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsKQEAgLTM0MSw2ICsz
NDUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQogCiAgICAgYm9vbCBpc0J1
aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNCdWlsdGluRnVuY3Rpb247IH0KKyAg
ICBib29sIGNvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkOyB9CiAgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgp
CiAgICAgewpAQCAtNTMyLDYgKzUzNyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ29uc3Ry
dWN0b3IgOiAxOwogICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CiAgICAgYm9v
bCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAgICBib29sIG1fY29uc3RydWN0b3JLaW5kTWF5
YmVEZXJpdmVkIDogMTsKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZTsKICAgICB1bnNpZ25lZCBt
X2xpbmVDb3VudDsKICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5k
ZXggYzExNjU2NS4uNzY3Y2E1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTQzNCw3ICs0MzQsMTYg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25O
b2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAgICBhZGRDYWxsZWUoZnVuY3Rpb25Ob2RlLCBj
YWxsZWVSZWdpc3Rlcik7CiAKICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpKSB7CisgICAgICAgIFJl
ZlB0cjxMYWJlbD4gY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkID0gY29uc3RydWN0b3JLaW5kTWF5
YmVEZXJpdmVkKCkgPyBuZXdMYWJlbCgpIDogbnVsbHB0cjsKKyAgICAgICAgaWYgKGNvbnN0cnVj
dG9yS2luZElzRGVyaXZlZCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBjYWxsZWUoSlNTdGFj
azo6Q2FsbGVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB1bmRlZmluZWRSZWcg
PSBlbWl0TG9hZChuZXdUZW1wb3JhcnkoKSwganNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gaXNEZXJpdmVkUmVnID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5
KCksICZjYWxsZWUsIHByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWRQcml2
YXRlTmFtZSk7CisgICAgICAgICAgICBlbWl0SnVtcElmVHJ1ZShpc0Rlcml2ZWRSZWcuZ2V0KCks
IGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZC5nZXQoKSk7CisgICAgICAgIH0KICAgICAgICAgZW1p
dENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lzdGVyKTsKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2lu
ZElzRGVyaXZlZCkKKyAgICAgICAgICAgIGVtaXRMYWJlbChjb25zdHJ1Y3RvcktpbmRJc0Rlcml2
ZWQuZ2V0KCkpOwogICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzVGhpcygpIHx8IGNv
ZGVCbG9jay0+dXNlc0V2YWwoKSkgewogICAgICAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogICAgICAgICBlbWl0T3Bj
b2RlKG9wX3RvX3RoaXMpOwpAQCAtMTYyNiwxOSArMTYzNSwxMiBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5SW5kZXgoUmVnaXN0ZXJJRCogYmFzZSwgdW5zaWduZWQg
aW5kZXgsCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q3JlYXRlVGhpcyhS
ZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBuZXdUZW1w
b3JhcnkoKTsgCi0KLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgIGVtaXRPcGNvZGUob3BfZ2V0X2NhbGxlZSk7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOwotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCgwKTsKLQogICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKICAgICBtX3N0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuY3JlYXRlVGhpcyhtX3RoaXNSZWdp
c3Rlci5pbmRleCgpLCBiZWdpbiArIDMpOwogCi0gICAgZW1pdE9wY29kZShvcF9jcmVhdGVfdGhp
cyk7IAotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsg
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOyAKKyAgICBlbWl0T3Bj
b2RlKG9wX2NyZWF0ZV90aGlzKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV90aGlzUmVn
aXN0ZXIuaW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhpc1JlZ2lzdGVy
LmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICByZXR1cm4gZHN0
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCmluZGV4IDRlM2VhNjYuLjY5MDQzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAg
LTI2OSw3ICsyNjksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUGFyc2VyQXJlbmEmIHBh
cnNlckFyZW5hKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZU5vZGUtPnBhcnNlckFyZW5hKCk7IH0K
ICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7
IHJldHVybiAqbV92bS0+cHJvcGVydHlOYW1lczsgfQogCi0gICAgICAgIGJvb2wgaXNDb25zdHJ1
Y3RvcigpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCk7IH0KKyAgICAgICAg
Ym9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKTsgfQorICAgICAgICBib29sIGNvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQoKTsg
fQogCiAgICAgICAgIFBhcnNlckVycm9yIGdlbmVyYXRlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCBkMWIwMTA2
NC4uOTdjYmMxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMTQ3LDYgKzE0Nyw2MiBAQCBSZWdpc3RlcklEKiBUaGlz
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBTdXBlck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitSZWdpc3RlcklEKiBTdXBlck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0
b3IuaWdub3JlZFJlc3VsdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZ2lzdGVySUQg
Y2FsbGVlOworICAgIGNhbGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhv
bWVPYmplY3RQcml2YXRlTmFtZSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50
ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaG9tZU9i
amVjdC5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0KSwgcHJvdG9QYXJlbnQuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuY29u
c3RydWN0b3IpOworfQorCitzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdFN1cGVyQmFzZUZvckNhbGxl
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQoreworICAgIFJlZ2lzdGVySUQgY2FsbGVl
OworICAgIGNhbGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmpl
Y3RQcml2YXRlTmFtZSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGhvbWVPYmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkudW5kZXJzY29yZVByb3RvKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0obV9zdWJzY3JpcHQpOworICAgIGlmIChkc3QgPT0gZ2VuZXJh
dG9yLmlnbm9yZWRSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWdpc3RlcklE
IGNhbGxlZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworCisKKyAg
ICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCAmY2FsbGVl
IC8qIGdlbmVyYXRvci5zY29wZVJlZ2lzdGVyKCkgKi8pOworfQorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gU3VwZXJEb3RBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBTdXBlckRvdEFjY2Vzc29yTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0obV9pZGVudCk7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0
b3IuaWdub3JlZFJlc3VsdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZ2lzdGVySUQg
Y2FsbGVlOworICAgIGNhbGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhv
bWVPYmplY3RQcml2YXRlTmFtZSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2VWYWx1ZSA9
IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhvbWVPYmpl
Y3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKTsKKyAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KSwgYmFzZVZhbHVlLmdldCgpLCBtX2lkZW50KTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogYm9vbCBSZXNvbHZlTm9kZTo6aXNQdXJlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IpIGNvbnN0CkBAIC0yODUsNiArMzQxLDExIEBAIFJlZ2lzdGVySUQqIE9iamVjdExpdGVy
YWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eUxpc3ROb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbWl0UHV0
SG9tZU9iamVjdChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBmdW5j
dGlvbiwgUmVnaXN0ZXJJRCogaG9tZU9iamVjdCkKK3sKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5
SWQoZnVuY3Rpb24sIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuaG9tZU9iamVjdFByaXZhdGVO
YW1lLCBob21lT2JqZWN0KTsKK30KKwogUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKICAgICAvLyBGYXN0IGNhc2U6IHRoaXMgbG9vcCBqdXN0IGhhbmRsZXMgcmVndWxhciB2YWx1
ZSBwcm9wZXJ0aWVzLgpAQCAtMzIxLDYgKzM4Miw4IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG5vZGUtPm1fYXNzaWduKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5pc01l
dGhvZCgpKQorICAgICAgICAgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgdmFs
dWUsIGRzdCk7CiAKICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBnZXQvc2V0IHByb3BlcnR5LCBm
aW5kIGl0cyBlbnRyeSBpbiB0aGUgbWFwLgogICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm1fdHlw
ZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlciB8fCBub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2Rl
OjpTZXR0ZXIpOwpAQCAtMzY2LDE4ICs0MjksMzAgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUK
IAogdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3RhbnRQcm9wZXJ0eShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBuZXdPYmosIFByb3BlcnR5Tm9kZSYg
bm9kZSkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobm9kZS5tX2Fzc2lnbik7CisgICAgaWYgKG5vZGUuaXNNZXRob2QoKSkKKyAgICAgICAgZW1p
dFB1dEhvbWVPYmplY3QoZ2VuZXJhdG9yLCB2YWx1ZS5nZXQoKSwgbmV3T2JqKTsKICAgICBpZiAo
bm9kZS5uYW1lKCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKG5ld09i
aiwgKm5vZGUubmFtZSgpLCBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbikpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQobmV3T2JqLCAqbm9kZS5uYW1lKCksIHZh
bHVlLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUubV9leHByZXNzaW9uKTsK
LSAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5VmFsKG5ld09iaiwgcHJvcGVydHlOYW1lLmdl
dCgpLCBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbikpOworICAgIGdlbmVyYXRvci5l
bWl0RGlyZWN0UHV0QnlWYWwobmV3T2JqLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHZhbHVlLmdldCgp
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nv
ck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQnJh
Y2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgZ2VuZXJhdGUgdGhlIHByb2ZpbGVyIGluZm8/
CisgICAgICAgIGlmIChtX3N1YnNjcmlwdC0+aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWQgPSBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQp
LT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVy
YXRvciksIGlkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRC
eVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBlbWl0U3VwZXJCYXNlRm9yQ2Fs
bGVlKGdlbmVyYXRvciksIGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCkpOworICAgIH0K
KwogICAgIGlmIChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSAKICAgICAgICAgJiYgZ2VuZXJhdG9y
LndpbGxSZXNvbHZlVG9Bcmd1bWVudHNSZWdpc3RlcihzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+
KG1fYmFzZSktPmlkZW50aWZpZXIoKSkKICAgICAgICAgJiYgIWdlbmVyYXRvci5zeW1ib2xUYWJs
ZSgpLnNsb3dBcmd1bWVudHMoKSkgewpAQCAtNDIyLDcgKzQ5Nyw3IEBAIFJlZ2lzdGVySUQqIERv
dEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVyCiAgICAgfQogCiBub25Bcmd1bWVudHNQYXRoOgotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCkgPyBlbWl0U3VwZXJCYXNlRm9yQ2Fs
bGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgUmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmluYWxE
ZXN0LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKQEAgLTQ1Myw2ICs1MjgsNyBAQCBSZWdpc3RlcklE
KiBOZXdFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9leHByKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgIENhbGxBcmd1bWVu
dHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgZ2VuZXJhdG9yLmVtaXRN
b3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGZ1bmMuZ2V0KCkpOwogICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdENvbnN0cnVjdChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwg
ZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBk
aXZvdEVuZCgpKTsKIH0KIApAQCAtNTA5LDYgKzU4NSwxMiBAQCBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
ZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxB
cmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworICAgIGlmIChtX2V4cHItPmlzU3VwZXJOb2Rl
KCkpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgICAgIFJlZ2lzdGVySUQqIHJl
dCA9IGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgp
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGhp
c1JlZ2lzdGVyKCksIHJldCk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQogICAgIGdlbmVy
YXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgp
KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUu
Z2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCkt
PnR5cGVQcm9maWxlcigpKSB7CkBAIC01NjAsMTMgKzY0MiwxNyBAQCBSZWdpc3RlcklEKiBGdW5j
dGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsCiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7Cisg
ICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5vZGUoKTsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZSA9IGJhc2VJc1N1cGVyID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShn
ZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHBy
ZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVu
Y3Rpb24uZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3Is
IG1fYXJncyk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIGJhc2UuZ2V0KCkpOworICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci50aGlz
UmVnaXN0ZXIoKSk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7CiAgICAgUmVnaXN0ZXJJRCogcmV0
ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwg
Tm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJv
ZmlsZVR5cGVCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwpAQCAtNTgyLDkg
KzY2OCwxMyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaQogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBmdW5jdGlvbiA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qs
IGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJh
dG9yLCBtX2FyZ3MpOwotICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCBtX2Jhc2UpOworICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3Vw
ZXJOb2RlKCk7CisgICAgaWYgKGJhc2VJc1N1cGVyKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE1v
dmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnRoaXNSZWdpc3Rlcigp
KTsKKyAgICBlbHNlCisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBtX2Jhc2UpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
c3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9u
RW5kKCkpOwotICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CisgICAgZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNlSXNTdXBlciA/IGVtaXRTdXBlckJhc2VGb3JDYWxsZWUo
Z2VuZXJhdG9yKSA6IGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwogICAg
IFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwg
ZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5
cGVQcm9maWxlcigpKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJu
VmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxs
cHRyKTsKQEAgLTkyNiw2ICsxMDE2LDggQEAgUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3QKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwog
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOworICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCisgICAgICAgIHJl
dHVybiBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEg
c3VwZXIgcHJvcGVydHkiKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwogfQog
CkBAIC05MzYsNiArMTAyOCw4IEBAIFJlZ2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklECiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAKICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CisgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGVtaXRU
aHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9w
ZXJ0eSIpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIG1faWRlbnQpOwogfQogCkBAIC0yNzY0LDEx
ICsyODU4LDQxIEBAIHZvaWQgQ2xhc3NEZWNsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIAogUmVnaXN0ZXJJRCogQ2xhc3NF
eHByTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKLSAgICBBU1NFUlQoIW1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gY2xhc3NIZXJpdGFnZTsKKyAgICBpZiAobV9wYXJlbnRDbGFz
c0V4cHJlc3Npb24pIHsKKyAgICAgICAgY2xhc3NIZXJpdGFnZSA9IGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNsYXNzSGVyaXRhZ2UuZ2V0KCks
IG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKTsKKyAgICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gY29uc3RydWN0b3IgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2NvbnN0cnVjdG9yRXhw
cmVzc2lvbik7CisgICAgLy8gRklYTUU6IE1ha2UgdGhlIHByb3RvdHlwZSBub24tY29uZmlndXJh
YmxlICYgbm9uLXdyaXRhYmxlLgogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90b3R5cGUgPSBn
ZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBjb25zdHJ1Y3Rv
ci5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwogCisgICAgaWYg
KGNsYXNzSGVyaXRhZ2UpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50
ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBSZWZQdHI8TGFiZWw+IGNsYXNz
SGVyaXRhZ2VJc051bGwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgUmVmUHRyPExh
YmVsPiBwcm90b1BhcmVudElzU2V0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcF9lcV9udWxs
LCBwcm90b1BhcmVudC5nZXQoKSwgY2xhc3NIZXJpdGFnZS5nZXQoKSksIGNsYXNzSGVyaXRhZ2VJ
c051bGwuZ2V0KCkpOworCisgICAgICAgIC8vIEZJWE1FOiBUaHJvdyBUeXBlRXJyb3IgaWYgaXND
b25zdHJ1Y3RvcihwYXJlbnRDbGFzcykgaXMgZmFsc2Ugb3IgaXQncyBhIGdlbmVyYXRvciBmdW5j
dGlvbi4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHByb3RvUGFyZW50LmdldCgpLCBj
bGFzc0hlcml0YWdlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7
CisgICAgICAgIC8vIEZJWE1FOiBUaHJvdyBUeXBlRXJyb3IgaWYgVHlwZShwcm90b1BhcmVudCkg
aXMgbm90IE9iamVjdCBvciBudWxsLgorCisgICAgICAgIC8vIEVTNiBkcmFmdCBkb2Vzbid0IHN0
b3JlIGhvbWVPYmplY3Qgb24gdGhlIGNvbnN0cnVjdG9yIGJ1dCB0aGlzIHdvdWxkIG1ha2Ugc3Vw
cG9ydGluZyAibmV3IHN1cGVyIiBpbiBjb25zdHJ1Y3RvciBjdW1iZXJzb21lLgorICAgICAgICBl
bWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIGNvbnN0cnVjdG9yLmdldCgpLCBwcm90b3R5cGUu
Z2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQoY29uc3RydWN0b3Iu
Z2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3JLaW5kSXNEZXJpdmVk
UHJpdmF0ZU5hbWUsCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCBqc0Jvb2xlYW4odHJ1ZSkpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1p
dERpcmVjdFB1dEJ5SWQocHJvdG90eXBlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygp
LnVuZGVyc2NvcmVQcm90bywgcHJvdG9QYXJlbnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAocHJvdG9QYXJlbnRJc1NldC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChjbGFzc0hlcml0YWdlSXNOdWxsLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXREaXJlY3RQdXRCeUlkKHByb3RvdHlwZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMo
KS51bmRlcnNjb3JlUHJvdG8sIGNsYXNzSGVyaXRhZ2UuZ2V0KCkpOworCisgICAgICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwocHJvdG9QYXJlbnRJc1NldC5nZXQoKSk7CisgICAgfQorCiAgICAgaWYg
KG1fc3RhdGljTWV0aG9kcykKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNvbnN0cnVjdG9y
LmdldCgpLCBtX3N0YXRpY01ldGhvZHMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
QVNUQnVpbGRlci5oCmluZGV4IGMzY2MxZmYuLjY2NDE5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBAIC0xNjksNiArMTY5LDM0IEBAIHB1YmxpYzoKICAg
ICAgICAgdXNlc1RoaXMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgVGhp
c05vZGUobG9jYXRpb24pOwogICAgIH0KKyAgICBFeHByZXNzaW9uTm9kZSogc3VwZXJFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCisgICAgeworICAgICAgICAvLyBGSVhNRTog
QWRkIGFuZCBjYWxsIHVzZXNTdXBlcigpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFy
ZW5hKSBTdXBlck5vZGUobG9jYXRpb24pOworICAgIH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3Jl
YXRlU3VwZXJDYWxsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50c05v
ZGUqIGFyZ3VtZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCisgICAgeworICAgICAg
ICBVTlVTRURfUEFSQU0oYXJndW1lbnRzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKGRpdm90KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGVuZCk7
CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFN1cGVyTm9kZShsb2NhdGlvbik7
CisgICAgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVTdXBlckJyYWNrZXRBY2Nlc3MoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShw
cm9wZXJ0eSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdGFydCk7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShkaXZvdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShlbmQpOworICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUobG9jYXRpb24sIHBy
b3BlcnR5KTsKKyAgICB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVN1cGVyRG90QWNjZXNz
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIHByb3Bl
cnR5LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShzdGFydCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkaXZvdCk7CisgICAgICAgIFVOVVNF
RF9QQVJBTShlbmQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdXBlckRv
dEFjY2Vzc29yTm9kZShsb2NhdGlvbiwgKnByb3BlcnR5KTsKKyAgICB9CiAgICAgRXhwcmVzc2lv
bk5vZGUqIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29u
c3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCkKICAgICB7
CiAgICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmlkZW50KQpA
QCAtMjkzLDkgKzMyMSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKLSAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0
aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGluU3Ry
aWN0Q29udGV4dCkKKyAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGVGdW5jdGlvbkJvZHkoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBi
b29sIGluU3RyaWN0Q29udGV4dCwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JL
aW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25C
b2R5Tm9kZShtX3BhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRD
b2x1bW4sIGVuZENvbHVtbiwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25Cb2R5Tm9kZShtX3BhcnNlckFyZW5hLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgaW5TdHJpY3RDb250ZXh0
LCBjb25zdHJ1Y3RvcktpbmQpOwogICAgIH0KIAogICAgIHZvaWQgc2V0RnVuY3Rpb25OYW1lU3Rh
cnQoRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgaW50IGZ1bmN0aW9uTmFtZVN0YXJ0KQpAQCAtMzI4
LDExICszNTYsMTEgQEAgcHVibGljOgogICAgIEFyZ3VtZW50TGlzdE5vZGUqIGNyZWF0ZUFyZ3Vt
ZW50c0xpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGFyZykgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0
aW9uLCBhcmcpOyB9CiAgICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBBcmd1bWVudExpc3ROb2RlKiBhcmdzLCBF
eHByZXNzaW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFyZ3VtZW50
TGlzdE5vZGUobG9jYXRpb24sIGFyZ3MsIGFyZyk7IH0KIAotICAgIFByb3BlcnR5Tm9kZSogY3Jl
YXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9k
ZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wpCisgICAgUHJvcGVydHlOb2Rl
KiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Np
b25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwgYm9vbCBpc01ldGhv
ZCA9IGZhbHNlKQogICAgIHsKICAgICAgICAgaWYgKG5vZGUtPmlzRnVuY0V4cHJOb2RlKCkpCiAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihub2RlKS0+Ym9keSgpLT5zZXRJ
bmZlcnJlZE5hbWUoKnByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFByb3BlcnR5Tm9kZSgqcHJvcGVydHlOYW1lLCBub2RlLCB0eXBlKTsKKyAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUsIG5v
ZGUsIHR5cGUsIGlzTWV0aG9kKTsKICAgICB9CiAgICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9w
ZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgZG91YmxlIHByb3BlcnR5TmFt
ZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sKQog
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0
cnVjdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
LmgKaW5kZXggOTUwNDA5YS4uZGEzOGQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKQEAgLTEwMiw2ICsxMDIsMjMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgewogICAgIH0KIAorICAgIGlubGluZSBTdXBlck5vZGU6OlN1cGVyTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2Rl
KGxvY2F0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxpbmUgU3VwZXJCcmFja2V0QWNjZXNz
b3JOb2RlOjpTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCkKKyAgICAgICAgOiBFeHByZXNzaW9u
Tm9kZShsb2NhdGlvbikKKyAgICAgICAgLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpCisgICAgewor
ICAgIH0KKworICAgIGlubGluZSBTdXBlckRvdEFjY2Vzc29yTm9kZTo6U3VwZXJEb3RBY2Nlc3Nv
ck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCisgICAgICAgICwgbV9p
ZGVudChpZGVudCkKKyAgICB7CisgICAgfQorCiBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5v
ZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKQEAgLTE0OSwxMCArMTY2LDEx
IEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBQ
cm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeHByZXNz
aW9uTm9kZSogYXNzaWduLCBUeXBlIHR5cGUpCisgICAgaW5saW5lIFByb3BlcnR5Tm9kZTo6UHJv
cGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24s
IFR5cGUgdHlwZSwgYm9vbCBpc01ldGhvZCA9IGZhbHNlKQogICAgICAgICA6IG1fbmFtZSgmbmFt
ZSkKICAgICAgICAgLCBtX2Fzc2lnbihhc3NpZ24pCiAgICAgICAgICwgbV90eXBlKHR5cGUpCisg
ICAgICAgICwgbV9pc01ldGhvZChpc01ldGhvZCkKICAgICB7CiAgICAgfQogCkBAIC0xNjEsNiAr
MTc5LDcgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWUKICAgICAgICAgLCBtX2V4cHJlc3Npb24o
bmFtZSkKICAgICAgICAgLCBtX2Fzc2lnbihhc3NpZ24pCiAgICAgICAgICwgbV90eXBlKHR5cGUp
CisgICAgICAgICwgbV9pc01ldGhvZChmYWxzZSkKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCmluZGV4IDk2OTY5MjQuLjFiYWU2MDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCkBAIC0xNjgsMTIgKzE2OCwxMyBAQCBGdW5j
dGlvblBhcmFtZXRlcnM6On5GdW5jdGlvblBhcmFtZXRlcnMoKQogICAgICAgICBwYXR0ZXJucygp
W2ldLT5kZXJlZigpOwogfQogCi1GdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFBh
cnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWdu
ZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KQorRnVuY3Rpb25Cb2R5Tm9kZTo6
RnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQg
c3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwg
SlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKQogICAgIDogU3RhdGVtZW50
Tm9kZShlbmRMb2NhdGlvbikKICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAg
LCBtX2VuZENvbHVtbihlbmRDb2x1bW4pCiAgICAgLCBtX3N0YXJ0U3RhcnRPZmZzZXQoc3RhcnRM
b2NhdGlvbi5zdGFydE9mZnNldCkKICAgICAsIG1faXNJblN0cmljdENvbnRleHQoaXNJblN0cmlj
dENvbnRleHQpCisgICAgLCBtX2NvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZChjb25zdHJ1Y3Rv
cktpbmQgPT0gSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQ6Ok1heWJlRGVyaXZlZCkKIHsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IDA2ZjQzOWEuLjBhYTRkZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTE2Myw2ICsxNjMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzU3VidHJhY3QoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCb29sZWFuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzU3ByZWFkRXhwcmVzc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1cGVyTm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRC
eXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsKiwgTGFi
ZWwqLCBGYWxsVGhyb3VnaE1vZGUpOwogCkBAIC00MjgsNiArNDI5LDM2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKIAorICAgIGNsYXNz
IFN1cGVyTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgcHVibGljOgor
ICAgICAgICBTdXBlck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJik7CisKKyAgICBwcml2YXRl
OgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBlck5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKKyAgICB9OworCisg
ICAgY2xhc3MgU3VwZXJCcmFja2V0QWNjZXNzb3JOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KTsKKworICAg
IHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKKworICAgICAgICBFeHBy
ZXNzaW9uTm9kZSogbV9zdWJzY3JpcHQ7CisgICAgfTsKKworICAgIGNsYXNzIFN1cGVyRG90QWNj
ZXNzb3JOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFN1cGVyRG90QWNjZXNzb3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0
IElkZW50aWZpZXImKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVy
cmlkZTsKKworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX2lkZW50OworICAgIH07CisKKwog
ICAgIGNsYXNzIFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpOwpAQCAtNDgzLDIwICs1MTQs
MjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFR5cGUgeyBD
b25zdGFudCA9IDEsIEdldHRlciA9IDIsIFNldHRlciA9IDQgfTsKIAotICAgICAgICBQcm9wZXJ0
eU5vZGUoY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSk7CisgICAgICAg
IFByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBUeXBlLCBi
b29sIGlzTWV0aG9kKTsKICAgICAgICAgUHJvcGVydHlOb2RlKEV4cHJlc3Npb25Ob2RlKiBwcm9w
ZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSk7CiAgICAgICAgIAogICAgICAgICBFeHBy
ZXNzaW9uTm9kZSogZXhwcmVzc2lvbk5hbWUoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb247
IH0KICAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQogCi0gICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAg
ICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUp
OyB9CisgICAgICAgIGJvb2wgaXNNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2lzTWV0aG9kOyB9
CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlMaXN0Tm9kZTsK
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciogbV9uYW1lOwogICAgICAgICBFeHByZXNzaW9uTm9k
ZSogbV9leHByZXNzaW9uOwogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9hc3NpZ247Ci0gICAg
ICAgIFR5cGUgbV90eXBlOworICAgICAgICB1bnNpZ25lZCBtX3R5cGUgOiAzOworICAgICAgICB1
bnNpZ25lZCBtX2lzTWV0aG9kIDogMTsKICAgICB9OwogCiAgICAgY2xhc3MgUHJvcGVydHlMaXN0
Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC0xNTI3LDcgKzE1NjAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIFBhcnNlckFyZW5hRGVsZXRh
YmxlOjpvcGVyYXRvciBuZXc7CiAKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVu
YSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5T
dHJpY3RDb250ZXh0KTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RD
b250ZXh0LCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCk7CiAKICAgICAgICAgRnVuY3Rpb25QYXJh
bWV0ZXJzKiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9
CiAKQEAgLTE1NTUsNiArMTU4OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGludCBz
dGFydFN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFN0YXJ0T2Zmc2V0OyB9CiAg
ICAgICAgIGJvb2wgaXNJblN0cmljdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzSW5TdHJp
Y3RDb250ZXh0OyB9CisgICAgICAgIGJvb2wgY29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKCkg
eyByZXR1cm4gbV9jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQ7IH0KIAogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwpAQCAtMTU2Nyw3ICsxNjAxLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOwogICAgICAgICBTb3Vy
Y2VDb2RlIG1fc291cmNlOwogICAgICAgICBpbnQgbV9zdGFydFN0YXJ0T2Zmc2V0OwotICAgICAg
ICBib29sIG1faXNJblN0cmljdENvbnRleHQ7CisgICAgICAgIGJvb2wgbV9pc0luU3RyaWN0Q29u
dGV4dCA6IDE7CisgICAgICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQgOiAx
OwogICAgIH07CiAKICAgICBjbGFzcyBGdW5jdGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVO
b2RlIHsKQEAgLTE2MjIsNyArMTY1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKIAotICAgICAgICBJZGVudGlmaWVyIG1f
bmFtZTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbV9uYW1lOwogICAgICAgICBFeHByZXNz
aW9uTm9kZSogbV9jb25zdHJ1Y3RvckV4cHJlc3Npb247CiAgICAgICAgIEV4cHJlc3Npb25Ob2Rl
KiBtX3BhcmVudENsYXNzRXhwcmVzc2lvbjsKICAgICAgICAgUHJvcGVydHlMaXN0Tm9kZSogbV9p
bnN0YW5jZU1ldGhvZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5k
ZXggZDVhZGJjOS4uZmQzZWE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmNwcApAQCAtMTI0Niw3ICsxMjQ2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3IKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJvZHko
VHJlZUJ1aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVG
dW5jdGlvbkJvZHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWls
ZGVyJiBjb250ZXh0LCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQpCiB7
CiAgICAgSlNUb2tlbkxvY2F0aW9uIHN0YXJ0TG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAg
ICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IHRva2VuQ29sdW1uKCk7CkBAIC0xMjU0LDE0ICsxMjU0
LDE0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJvCiAKICAgICBpZiAobWF0Y2goQ0xPU0VCUkFD
RSkpIHsKICAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5Db2x1bW4oKTsKLSAgICAg
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2Vu
TG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2Vu
TG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpLCBjb25zdHJ1
Y3RvcktpbmQpOwogICAgIH0KICAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3Rh
dGVtZW50RGVwdGgpOwogICAgIG1fc3RhdGVtZW50RGVwdGggPSAwOwogICAgIHR5cGVuYW1lIFRy
ZWVCdWlsZGVyOjpGdW5jdGlvbkJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyKGNvbnN0X2Nhc3Q8Vk0q
PihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CiAgICAgZmFpbElmRmFsc2UocGFyc2VTb3VyY2VFbGVt
ZW50cyhib2R5QnVpbGRlciwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwgIkNhbm5vdCBwYXJzZSBib2R5
IG9mIHRoaXMgZnVuY3Rpb24iKTsKICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVt
bigpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9u
LCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1vZGUoKSk7
CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRv
a2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpLCBjb25z
dHJ1Y3RvcktpbmQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciogc3RyaW5nRm9yRnVuY3Rpb25N
b2RlKEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUpCkBAIC0xMjgzLDcgKzEyODMsOCBAQCBzdGF0aWMg
Y29uc3QgY2hhciogc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUp
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVC
dWlsZGVyJiBjb250ZXh0LCBGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIEZ1bmN0
aW9uUGFyc2VNb2RlIG1vZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIFBhcnNlckZ1
bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mIGluZm8pCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVy
JiBjb250ZXh0LCBGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFy
c2VNb2RlIG1vZGUsCisgICAgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgSlNQYXJzZXJD
b25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1
aWxkZXI+JiBpbmZvKQogewogICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRoaXMs
IHB1c2hTY29wZSgpKTsKICAgICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CkBAIC0x
MzM2LDcgKzEzMzcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZAogICAgICAgICAgICAgZW5k
TG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAgICAg
ICAgIHVuc2lnbmVkIGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1fbG9jYXRpb24u
bGluZVN0YXJ0T2Zmc2V0OwogCi0gICAgICAgIGluZm8uYm9keSA9IGNvbnRleHQuY3JlYXRlRnVu
Y3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpbmZvLmJvZHlTdGFydENvbHVt
biwgYm9keUVuZENvbHVtbiwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CisgICAgICAgIGluZm8u
Ym9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0
aW9uLCBpbmZvLmJvZHlTdGFydENvbHVtbiwgYm9keUVuZENvbHVtbiwgY2FjaGVkSW5mby0+c3Ry
aWN0TW9kZSwgY29uc3RydWN0b3JLaW5kKTsKICAgICAgICAgCiAgICAgICAgIGZ1bmN0aW9uU2Nv
cGUtPnJlc3RvcmVGcm9tU291cmNlUHJvdmlkZXJDYWNoZShjYWNoZWRJbmZvKTsKICAgICAgICAg
ZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJl
ZVZhcmlhYmxlSW5mbyksICJQYXJzZXIgZXJyb3IiKTsKQEAgLTEzNTksNyArMTM2MCw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VG
dW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAgICAgfQogICAgIG1fbGFzdEZ1bmN0aW9uTmFtZSA9IGxh
c3RGdW5jdGlvbk5hbWU7CiAgICAgUGFyc2VyU3RhdGUgb2xkU3RhdGUgPSBzYXZlU3RhdGUoKTsK
LSAgICBpbmZvLmJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsKKyAgICBpbmZvLmJv
ZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0LCBjb25zdHJ1Y3RvcktpbmQpOwogICAgIHJl
c3RvcmVTdGF0ZShvbGRTdGF0ZSk7CiAgICAgZmFpbElmRmFsc2UoaW5mby5ib2R5LCAiQ2Fubm90
IHBhcnNlIHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsK
ICAgICBjb250ZXh0LnNldEVuZE9mZnNldChpbmZvLmJvZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZz
ZXQoKSk7CkBAIC0xNDA4LDcgKzE0MDksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYQogICAg
IHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgIG5leHQo
KTsKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87Ci0gICAgZmFpbElm
RmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBGdW5j
dGlvbk1vZGUsIHRydWUsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7Cisg
ICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmVlZHNO
YW1lLCBGdW5jdGlvbk1vZGUsIHRydWUsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBp
bmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5jdGlvbiIpOwogICAgIGZhaWxJZkZhbHNlKGlu
Zm8ubmFtZSwgIkZ1bmN0aW9uIHN0YXRlbWVudHMgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgIGZh
aWxJZkZhbHNlSWZTdHJpY3QoZGVjbGFyZVZhcmlhYmxlKGluZm8ubmFtZSksICJDYW5ub3QgZGVj
bGFyZSBhIGZ1bmN0aW9uIG5hbWVkICciLCBpbmZvLm5hbWUtPmltcGwoKSwgIicgaW4gc3RyaWN0
IG1vZGUiKTsKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jRGVjbFN0YXRlbWVudChsb2Nh
dGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwpAQCAtMTQ1OCw4ICsxNDU5LDggQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9uIFBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQKICAgICBpZiAoY29uc3VtZShFWFRFTkRTKSkgewogICAg
ICAgICBwYXJlbnRDbGFzcyA9IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAg
ICAgIGZhaWxJZkZhbHNlKHBhcmVudENsYXNzLCAiQ2Fubm90IHBhcnNlIHRoZSBwYXJlbnQgY2xh
c3MgbmFtZSIpOwotICAgICAgICBmYWlsV2l0aE1lc3NhZ2UoIkluaGVyaXRhbmNlIGlzIG5vdCBz
dXBwb3J0ZWQgeWV0Iik7CiAgICAgfQorICAgIGNvbnN0IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5k
IGNvbnN0cnVjdG9yS2luZCA9IHBhcmVudENsYXNzID8gSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQ6
Ok1heWJlRGVyaXZlZCA6IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpCYXNlOwogCiAgICAgY29u
c3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0UsIFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJp
bmdzLCAiRXhwZWN0ZWQgb3BlbmluZyAneycgYXQgdGhlIHN0YXJ0IG9mIGEgY2xhc3MgYm9keSIp
OwogCkBAIC0xNDk1LDcgKzE0OTYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgICAg
ICAgICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVp
bGRlcj4gbWV0aG9kSW5mbzsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9u
SW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgbWV0
aG9kSW5mbykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CisgICAgICAgICAgICBmYWls
SWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1
bmN0aW9uTW9kZSwgZmFsc2UsIGNvbnN0cnVjdG9yS2luZCwgbWV0aG9kSW5mbykpLCAiQ2Fubm90
IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShtZXRob2RJbmZv
Lm5hbWUsICJtZXRob2QgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgICAgICAgICAgZmFpbElmRmFs
c2UoZGVjbGFyZVZhcmlhYmxlKG1ldGhvZEluZm8ubmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIG1l
dGhvZCBuYW1lZCAnIiwgbWV0aG9kSW5mby5uYW1lLT5pbXBsKCksICInIik7CiAKQEAgLTE1MTMs
NyArMTUxNCw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhwcmVz
c2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyhUCiAgICAgICAgICAgICAvLyBGSVhN
RTogU3ludGF4IGVycm9yIHdoZW4gc3VwZXIoKSBpcyBjYWxsZWQKICAgICAgICAgICAgIHNlbWFu
dGljRmFpbElmVHJ1ZShpc1N0YXRpY01ldGhvZCAmJiAqbWV0aG9kSW5mby5uYW1lID09IHByb3Bl
cnR5TmFtZXMucHJvdG90eXBlLAogICAgICAgICAgICAgICAgICJDYW5ub3QgZGVjbGFyZSBhIHN0
YXRpYyBtZXRob2QgbmFtZWQgJ3Byb3RvdHlwZSciKTsKLSAgICAgICAgICAgIHByb3BlcnR5ID0g
Y29udGV4dC5jcmVhdGVQcm9wZXJ0eShtZXRob2RJbmZvLm5hbWUsIG1ldGhvZCwgUHJvcGVydHlO
b2RlOjpDb25zdGFudCwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MpOworICAgICAgICAgICAgYm9v
bCBpc01ldGhvZCA9IHRydWU7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuY3JlYXRl
UHJvcGVydHkobWV0aG9kSW5mby5uYW1lLCBtZXRob2QsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQs
IGFsd2F5c1N0cmljdEluc2lkZUNsYXNzLCBpc01ldGhvZCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBUcmVlUHJvcGVydHlMaXN0JiB0YWlsID0gaXNTdGF0aWNNZXRob2QgPyBzdGF0aWNNZXRob2Rz
VGFpbCA6IGluc3RhbmNlTWV0aG9kc1RhaWw7CkBAIC0xOTgwLDEwICsxOTgyLDEwIEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUdldHRlclNldHRlcihUCiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBp
bmZvOwogICAgIGlmICh0eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyKSB7CiAgICAgICAgIGZh
aWxJZkZhbHNlKG1hdGNoKE9QRU5QQVJFTiksICJFeHBlY3RlZCBhIHBhcmFtZXRlciBsaXN0IGZv
ciBnZXR0ZXIgZGVmaW5pdGlvbiIpOwotICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlv
bkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgR2V0dGVyTW9kZSwgZmFsc2Us
IGluZm8pKSwgIkNhbm5vdCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOworICAgICAgICBmYWls
SWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50
cywgR2V0dGVyTW9kZSwgZmFsc2UsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZv
KSksICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBmYWlsSWZGYWxzZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIg
bGlzdCBmb3Igc2V0dGVyIGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNl
RnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUs
IGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRpb24iKTsKKyAgICAg
ICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1
aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFz
ZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7CiAgICAgfQogICAg
IGlmIChzdHJpbmdQcm9wZXJ0eU5hbWUpCiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdl
dHRlck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUsIHN0cmljdCwgc3RyaW5nUHJvcGVy
dHlOYW1lLCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKQEAgLTIxNzIsNyArMjE3
NCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlUHJpbWFyeUV4cHJlCiAgICAgICAgIG5leHQoKTsKICAgICAgICAg
UGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwogICAgICAgICBpbmZvLm5hbWUg
PSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7Ci0gICAgICAgIGZhaWxJZkZh
bHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBG
dW5jdGlvbk1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgZnVuY3Rpb24gZXhwcmVz
c2lvbiIpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwg
RnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgSlNQYXJzZXJDb25z
dHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBleHByZXNz
aW9uIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2NhdGlv
biwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAgIH0KICNpZiBFTkFCTEUoRVM2X0NM
QVNTX1NZTlRBWCkKQEAgLTIzMTUsNyArMjMxNywxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJl
cwogICAgICAgICBuZXdDb3VudCsrOwogICAgIH0KIAotICAgIGJhc2UgPSBwYXJzZVByaW1hcnlF
eHByZXNzaW9uKGNvbnRleHQpOworICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtYXRjaChTVVBFUik7
CisgICAgaWYgKGJhc2VJc1N1cGVyKSB7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LnN1cGVyRXhw
cihsb2NhdGlvbik7CisgICAgICAgIG5leHQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYmFzZSA9
IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgCiAgICAgZmFpbElmRmFsc2Uo
YmFzZSwgIkNhbm5vdCBwYXJzZSBiYXNlIGV4cHJlc3Npb24iKTsKICAgICB3aGlsZSAodHJ1ZSkg
ewpAQCAtMjMyOSw2ICsyMzM2LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMKICAgICAgICAg
ICAgIGludCBpbml0aWFsQXNzaWdubWVudHMgPSBtX2Fzc2lnbm1lbnRDb3VudDsKICAgICAgICAg
ICAgIFRyZWVFeHByZXNzaW9uIHByb3BlcnR5ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQpOwog
ICAgICAgICAgICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5ub3QgcGFyc2Ugc3Vic2NyaXB0
IGV4cHJlc3Npb24iKTsKKyAgICAgICAgICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgICAg
ICAgICBmYWlsSWZUcnVlKGluaXRpYWxBc3NpZ25tZW50cyB8fCBtX2Fzc2lnbm1lbnRDb3VudCwg
IkNhbm5vdCBhc3NpZ24gYSB2YWx1ZSB0byBzdXBlciIpOwogICAgICAgICAgICAgYmFzZSA9IGNv
bnRleHQuY3JlYXRlQnJhY2tldEFjY2Vzcyhsb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRp
YWxBc3NpZ25tZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHBy
ZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgaGFuZGxlUHJvZHVj
dGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJzdWJzY3JpcHQgZXhwcmVzc2lv
biIpOwogICAgICAgICAgICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwpAQCAtMjM0Nyw2
ICsyMzU2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMKICAgICAgICAgICAgICAgICBKU1Rl
eHRQb3NpdGlvbiBleHByZXNzaW9uRW5kID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAg
ICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRl
eHQsIEFsbG93U3ByZWFkKTsKICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMs
ICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogaWYgYmFzZUlzU3VwZXI6IGZhaWxJZkZhbHNlKGlzQ29uc3RydWN0b3IsICJDYW5ub3QgY2Fs
bCBzdXBlcigpIGluIHRoaXMgZnVuY3Rpb24iKS4KICAgICAgICAgICAgICAgICBiYXNlID0gY29u
dGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgYmFzZSwgYXJndW1lbnRzLCBleHBy
ZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwpAQCAt
MjM2NCw4ICsyMzc0LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBnb3RvIGVuZE1lbWJlckV4cHJlc3Npb247CiAgICAgICAgIH0KKyAg
ICAgICAgYmFzZUlzU3VwZXIgPSBmYWxzZTsKICAgICB9CiBlbmRNZW1iZXJFeHByZXNzaW9uOgor
ICAgIGZhaWxJZlRydWUoYmFzZUlzU3VwZXIgJiYgIW5ld0NvdW50LCAiQ2Fubm90IHJlZmVyZW5j
ZSBzdXBlciIpOwogICAgIHdoaWxlIChuZXdDb3VudC0tKQogICAgICAgICBiYXNlID0gY29udGV4
dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBleHByZXNzaW9uU3RhcnQsIGxhc3RUb2tl
bkVuZFBvc2l0aW9uKCkpOwogICAgIHJldHVybiBiYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmgKaW5kZXggZWJmYmUxYy4uOGU1NzQyNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5oCkBAIC03NDAsNyArNzQwLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUFyZ3VtZW50cyBwYXJzZUFy
Z3VtZW50cyhUcmVlQnVpbGRlciYsIFNwcmVhZE1vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImLCBib29s
IHN0cmljdCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkg
cGFyc2VHZXR0ZXJTZXR0ZXIoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCwgUHJvcGVydHlOb2Rl
OjpUeXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKLSAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZ1bmN0aW9uQm9keSBwYXJz
ZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRy
ZWVCdWlsZGVyJiwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQpOwogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJz
ZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlVmFyRGVjbGFyYXRpb25MaXN0KFRyZWVCdWls
ZGVyJiwgaW50JiBkZWNsYXJhdGlvbnMsIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4mIGxhc3RQ
YXR0ZXJuLCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBKU1RleHRQb3NpdGlvbiYg
aWRlbnRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGlu
aXRFbmQpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRy
ZWVDb25zdERlY2xMaXN0IHBhcnNlQ29uc3REZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImKTsK
QEAgLTc0OSw3ICs3NDksNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGFyc2VEZWNvbnN0
cnVjdGlvblBhdHRlcm4oVHJlZUJ1aWxkZXImLCBEZWNvbnN0cnVjdGlvbktpbmQsIGludCBkZXB0
aCA9IDApOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRy
ZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gdHJ5UGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm5FeHBy
ZXNzaW9uKFRyZWVCdWlsZGVyJik7CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgRnVuY3Rp
b25SZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmlu
Z1Njb3BlLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CisgICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhU
cmVlQnVpbGRlciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSwgYm9v
bCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQsIFBhcnNl
ckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mKTsKICNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVlQ2xh
c3NFeHByZXNzaW9uIHBhcnNlQ2xhc3MoVHJlZUJ1aWxkZXImLCBGdW5jdGlvblJlcXVpcmVtZW50
cyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyTW9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaApp
bmRleCAwNjExYjg4Li5iOTk2MGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlck1vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJNb2Rlcy5oCkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIEpT
UGFyc2VyU3RyaWN0bmVzcyB7IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VCdWlsdGluLCBKU1BhcnNl
U3RyaWN0IH07CiBlbnVtIEpTUGFyc2VyTW9kZSB7IEpTUGFyc2VQcm9ncmFtQ29kZSwgSlNQYXJz
ZUZ1bmN0aW9uQ29kZSB9OworZW51bSBjbGFzcyBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCB7IEJh
c2UsIE1heWJlRGVyaXZlZCB9OwogCiBlbnVtIFByb2ZpbGVyTW9kZSB7IFByb2ZpbGVyT2ZmLCBQ
cm9maWxlck9uIH07CiBlbnVtIERlYnVnZ2VyTW9kZSB7IERlYnVnZ2VyT2ZmLCBEZWJ1Z2dlck9u
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNr
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCmluZGV4
IDYzYjEzNDguLjM0NDY0OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU3ludGF4Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3lu
dGF4Q2hlY2tlci5oCkBAIC03Miw4ICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBTeW50
YXhDaGVja2VyIEZ1bmN0aW9uQm9keUJ1aWxkZXI7CiAgICAgZW51bSB7IE5vbmVFeHByID0gMCwK
ICAgICAgICAgUmVzb2x2ZUV2YWxFeHByLCBSZXNvbHZlRXhwciwgTnVtYmVyRXhwciwgU3RyaW5n
RXhwciwKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgQ2xhc3NFeHByLCBT
dXBlckV4cHIsIFN1cGVyQnJhY2tldEV4cHIsIFN1cGVyRG90RXhwciwKKyNlbmRpZgogICAgICAg
ICBUaGlzRXhwciwgTnVsbEV4cHIsIEJvb2xFeHByLCBSZWdFeHBFeHByLCBPYmplY3RMaXRlcmFs
RXhwciwKLSAgICAgICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4cHIsIEJyYWNrZXRFeHByLCBEb3RF
eHByLCBDYWxsRXhwciwKKyAgICAgICAgRnVuY3Rpb25FeHByLCBCcmFja2V0RXhwciwgRG90RXhw
ciwgQ2FsbEV4cHIsCiAgICAgICAgIE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4
cHIsIEJpbmFyeUV4cHIsCiAgICAgICAgIENvbmRpdGlvbmFsRXhwciwgQXNzaWdubWVudEV4cHIs
IFR5cGVvZkV4cHIsCiAgICAgICAgIERlbGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRp
bmdEZWNvbnN0cnVjdGlvbiwKQEAgLTE0Niw2ICsxNDksMTIgQEAgcHVibGljOgogICAgIEV4cHJl
c3Npb25UeXBlIGNyZWF0ZVVuYXJ5UGx1cyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRl
Vm9pZChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5h
cnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgdGhpc0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJikgeyByZXR1cm4gVGhpc0V4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBzdXBlckV4cHIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gVGhpc0V4cHI7IH0KKyNpZiBFTkFCTEUo
RVM2X0NMQVNTX1NZTlRBWCkKKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVTdXBlckNhbGwoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiwgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYpIHsgcmV0dXJu
IFN1cGVyRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVN1cGVyQnJhY2tldEFjY2Vz
cyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgY29uc3QgSlNUZXh0UG9z
aXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJikgeyBy
ZXR1cm4gU3VwZXJCcmFja2V0RXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVN1cGVy
RG90QWNjZXNzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9z
aXRpb24mKSB7IHJldHVybiBTdXBlckRvdEV4cHI7IH0KKyNlbmRpZgogICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmll
ciosIGludCkgeyByZXR1cm4gUmVzb2x2ZUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVh
dGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIE9iamVjdExp
dGVyYWxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHByOyB9CkBA
IC0xNjcsMTQgKzE3NiwxNCBAQCBwdWJsaWM6CiAgICAgQ2xhc3NFeHByZXNzaW9uIGNyZWF0ZUNs
YXNzRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVz
c2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBQcm9wZXJ0eUxpc3QsIFByb3BlcnR5TGlzdCkgeyBy
ZXR1cm4gQ2xhc3NFeHByOyB9CiAjZW5kaWYKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVGdW5j
dGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZv
PFN5bnRheENoZWNrZXI+JiwgaW50KSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KLSAgICBpbnQg
Y3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGludCwgaW50LCBib29sKSB7IHJldHVybiBGdW5jdGlvbkJvZHlSZXN1bHQ7IH0K
KyAgICBpbnQgY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBib29sLCBKU1BhcnNlckNvbnN0cnVjdG9yS2lu
ZCkgeyByZXR1cm4gRnVuY3Rpb25Cb2R5UmVzdWx0OyB9CiAgICAgdm9pZCBzZXRGdW5jdGlvbk5h
bWVTdGFydChpbnQsIGludCkgeyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50cygpIHsgcmV0dXJu
IEFyZ3VtZW50c1Jlc3VsdDsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHMoaW50KSB7IHJldHVy
biBBcmd1bWVudHNSZXN1bHQ7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVTcHJlYWRFeHBy
ZXNzaW9uKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQsIGludCwg
aW50KSB7IHJldHVybiBTcHJlYWRFeHByOyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50c0xpc3Qo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7IHJldHVybiBBcmd1bWVudHNMaXN0UmVzdWx0
OyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50c0xpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
aW50LCBpbnQpIHsgcmV0dXJuIEFyZ3VtZW50c0xpc3RSZXN1bHQ7IH0KLSAgICBQcm9wZXJ0eSBj
cmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBpbnQsIFByb3BlcnR5Tm9kZTo6
VHlwZSB0eXBlLCBib29sIGNvbXBsZXRlKQorICAgIFByb3BlcnR5IGNyZWF0ZVByb3BlcnR5KGNv
bnN0IElkZW50aWZpZXIqIG5hbWUsIGludCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wg
Y29tcGxldGUsIGJvb2wgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIGlmICghY29tcGxldGUpCiAg
ICAgICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCA1NjllZTRmLi5kNmVmYjYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKQEAgLTIyMCw2ICsyMjAsOCBAQAogICAgIG1hY3JvKHlpZWxkKQogCiAjZGVmaW5lIEpT
Q19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUobWFjcm8pIFwK
KyAgICBtYWNybyhjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpIFwKKyAgICBtYWNybyhob21lT2Jq
ZWN0KSBcCiAgICAgbWFjcm8oaXRlcmF0b3IpIFwKICAgICBtYWNybyhpdGVyYXRvck5leHQpIFwK
ICAgICBtYWNybyhyZXNvbHZlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgKaW5kZXggNzQzZTc5ZC4uZTNhY2QxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtNDY3LDcgKzQ2Nyw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgY2xlYXJDb2RlKCk7CiAKLSAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygp
IGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZh
bCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlKTsgfQorICAgIEV4ZWN1dGFibGVJbmZv
IGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3Rp
dmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UsIGZhbHNl
KTsgfQogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gbV91bmxpbmtlZEV2
YWxDb2RlQmxvY2stPm51bVZhcmlhYmxlcygpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZGdW5j
dGlvbkRlY2xzKCkgeyByZXR1cm4gbV91bmxpbmtlZEV2YWxDb2RlQmxvY2stPm51bWJlck9mRnVu
Y3Rpb25EZWNscygpOyB9CkBAIC01MjIsNyArNTIyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBj
bGVhckNvZGUoKTsKIAotICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3Qg
eyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlz
U3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UpOyB9CisgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0
YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24o
KSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgZmFsc2UpOyB9CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247489</attachid>
            <date>2015-02-26 20:19:45 -0800</date>
            <delta_ts>2015-04-27 02:23:23 -0700</delta_ts>
            <desc>Added op_check_tdz in 64-bit LLint &amp; Baseline JIT</desc>
            <filename>native-class-7.patch</filename>
            <type>text/plain</type>
            <size>57842</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
Lmpzb24JKHJldmlzaW9uIDE4MDY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIsNyBAQAogICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX3RoaXMiLCAibGVuZ3RoIiA6IDQgfSwKICAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9jYWxsZWUiLCAibGVuZ3RoIiA6IDMgfSwKICAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvX3RoaXMiLCAibGVuZ3RoIiA6IDQgfSwKKyAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2NoZWNrX3RkeiIsICJsZW5ndGgiIDogMiB9LAogICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfbmV3X29iamVjdCIsICJsZW5ndGgiIDogNCB9LAogICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfbmV3X2FycmF5IiwgImxlbmd0aCIgOiA1IH0sCiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9uZXdfYXJyYXlfd2l0aF9zaXplIiwgImxlbmd0aCIgOiA0IH0s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuaAkocmV2aXNpb24gMTgwNjUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgIGNhc2Ugb3BfdG9fdGhpczoK
KyAgICBjYXNlIG9wX2NoZWNrX3RkejoKICAgICBjYXNlIG9wX3BvcF9zY29wZToKICAgICBjYXNl
IG9wX3Byb2ZpbGVfd2lsbF9jYWxsOgogICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDoKQEAg
LTM2NSw2ICszNjYsNyBAQAogICAgIGNhc2Ugb3BfbW92OgogICAgIGNhc2Ugb3BfbmV3X29iamVj
dDoKICAgICBjYXNlIG9wX3RvX3RoaXM6CisgICAgY2FzZSBvcF9jaGVja190ZHo6CiAgICAgY2Fz
ZSBvcF9nZXRfY2FsbGVlOgogICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKICAgICBjYXNlIG9w
X2dldF9zY29wZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAxODA2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgyLDYgKzc4MiwxMiBAQAog
ICAgICAgICAgICAgb3V0LnByaW50KCIgIiwgKCsraXQpLT51LnRvVGhpc1N0YXR1cyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NoZWNrX3Rkejogewor
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmlu
dExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJj
aGVja190ZHoiLCByMCk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNh
c2Ugb3BfbmV3X29iamVjdDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNhcGFjaXR5ID0gKCsraXQp
LT51Lm9wZXJhbmQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4MDY1MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDcgKzYxLDggQEAKICAgICBmdW5jdGlvbi0+ZmluaXNoUGFyc2luZyhleGVjdXRh
YmxlLT5wYXJhbWV0ZXJzKCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+ZnVuY3Rp
b25Nb2RlKCkpOwogICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKGZ1bmN0aW9uLT5mZWF0dXJl
cygpLCBmdW5jdGlvbi0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSk7CiAgICAgCi0gICAgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6
Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhmdW5jdGlvbi0+bmVlZHNB
Y3RpdmF0aW9uKCksIGZ1bmN0aW9uLT51c2VzRXZhbCgpLCBmdW5jdGlvbi0+aXNTdHJpY3RNb2Rl
KCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwgZnVuY3Rpb25LaW5kID09IFVubGlua2VkQnVp
bHRpbkZ1bmN0aW9uKSk7CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0g
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2RlLAorICAg
ICAgICBFeGVjdXRhYmxlSW5mbyhmdW5jdGlvbi0+bmVlZHNBY3RpdmF0aW9uKCksIGZ1bmN0aW9u
LT51c2VzRXZhbCgpLCBmdW5jdGlvbi0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCwgZnVuY3Rpb25LaW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uLCBleGVjdXRh
YmxlLT5jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQoKSkpOwogICAgIGF1dG8gZ2VuZXJhdG9y
KHN0ZDo6bWFrZV91bmlxdWU8Qnl0ZWNvZGVHZW5lcmF0b3I+KHZtLCBmdW5jdGlvbi5nZXQoKSwg
cmVzdWx0LCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkpOwogICAgIGVycm9yID0gZ2VuZXJh
dG9yLT5nZW5lcmF0ZSgpOwogICAgIGlmIChlcnJvci5pc1ZhbGlkKCkpCkBAIC04NCw2ICs4NSw3
IEBACiAgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KG5vZGUtPmlzSW5TdHJpY3RDb250ZXh0KCkp
CiAgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGZhbHNlKQogICAgICwgbV9pc0J1aWx0aW5G
dW5jdGlvbihraW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uKQorICAgICwgbV9jb25zdHJ1
Y3RvcktpbmRNYXliZURlcml2ZWQobm9kZS0+Y29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKCkp
CiAgICAgLCBtX25hbWUobm9kZS0+aWRlbnQoKSkKICAgICAsIG1faW5mZXJyZWROYW1lKG5vZGUt
PmluZmVycmVkTmFtZSgpKQogICAgICwgbV9wYXJhbWV0ZXJzKG5vZGUtPnBhcmFtZXRlcnMoKSkK
QEAgLTIwNSw2ICsyMDcsNyBAQAogICAgICwgbV9pc0NvbnN0cnVjdG9yKGluZm8ubV9pc0NvbnN0
cnVjdG9yKQogICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAgICAsIG1faXNC
dWlsdGluRnVuY3Rpb24oaW5mby5tX2lzQnVpbHRpbkZ1bmN0aW9uKQorICAgICwgbV9jb25zdHJ1
Y3RvcktpbmRNYXliZURlcml2ZWQoaW5mby5tX2NvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCkK
ICAgICAsIG1fZmlyc3RMaW5lKDApCiAgICAgLCBtX2xpbmVDb3VudCgwKQogICAgICwgbV9lbmRD
b2x1bW4oVUlOVF9NQVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTgwNjUxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDEyICs2NiwxMyBAQAogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExp
bmtJbmZvOwogCiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm8gewotICAgIEV4ZWN1dGFibGVJbmZvKGJv
b2wgbmVlZHNBY3RpdmF0aW9uLCBib29sIHVzZXNFdmFsLCBib29sIGlzU3RyaWN0TW9kZSwgYm9v
bCBpc0NvbnN0cnVjdG9yLCBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKQorICAgIEV4ZWN1dGFibGVJ
bmZvKGJvb2wgbmVlZHNBY3RpdmF0aW9uLCBib29sIHVzZXNFdmFsLCBib29sIGlzU3RyaWN0TW9k
ZSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGlzQnVpbHRpbkZ1bmN0aW9uLCBib29sIGNvbnN0
cnVjdG9yS2luZE1heWJlRGVyaXZlZCkKICAgICAgICAgOiBtX25lZWRzQWN0aXZhdGlvbihuZWVk
c0FjdGl2YXRpb24pCiAgICAgICAgICwgbV91c2VzRXZhbCh1c2VzRXZhbCkKICAgICAgICAgLCBt
X2lzU3RyaWN0TW9kZShpc1N0cmljdE1vZGUpCiAgICAgICAgICwgbV9pc0NvbnN0cnVjdG9yKGlz
Q29uc3RydWN0b3IpCiAgICAgICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihpc0J1aWx0aW5GdW5j
dGlvbikKKyAgICAgICAgLCBtX2NvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZChjb25zdHJ1Y3Rv
cktpbmRNYXliZURlcml2ZWQpCiAgICAgewogICAgIH0KICAgICBib29sIG1fbmVlZHNBY3RpdmF0
aW9uIDogMTsKQEAgLTc5LDYgKzgwLDcgQEAKICAgICBib29sIG1faXNTdHJpY3RNb2RlIDogMTsK
ICAgICBib29sIG1faXNDb25zdHJ1Y3RvciA6IDE7CiAgICAgYm9vbCBtX2lzQnVpbHRpbkZ1bmN0
aW9uIDogMTsKKyAgICBib29sIG1fY29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkIDogMTsKIH07
CiAKIGVudW0gVW5saW5rZWRGdW5jdGlvbktpbmQgewpAQCAtMTE3LDYgKzExOSw3IEBACiAgICAg
ICAgICAgICByZXR1cm4gSlNQYXJzZVN0cmljdDsKICAgICAgICAgcmV0dXJuIEpTUGFyc2VOb3Jt
YWw7CiAgICAgfQorICAgIGJvb2wgY29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKCkgY29uc3Qg
eyByZXR1cm4gbV9jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQ7IH0KIAogICAgIHVuc2lnbmVk
IGZpcnN0TGluZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lT2Zmc2V0OyB9CiAg
ICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KQEAg
LTE2OSw2ICsxNzIsNyBAQAogICAgIGJvb2wgbV9pc0luU3RyaWN0Q29udGV4dCA6IDE7CiAgICAg
Ym9vbCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKICAgICBib29sIG1faXNCdWlsdGluRnVu
Y3Rpb24gOiAxOworICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQgOiAxOwog
CiAgICAgSWRlbnRpZmllciBtX25hbWU7CiAgICAgSWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsK
QEAgLTM0MSw2ICszNDUsNyBAQAogICAgIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KIAogICAgIGJvb2wg
aXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9uOyB9
CisgICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQoKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZDsgfQogICAgIAogICAgIHZvaWQgc2hyaW5rVG9G
aXQoKQogICAgIHsKQEAgLTUzMiw2ICs1MzcsNyBAQAogICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9y
IDogMTsKICAgICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwogICAgIGJvb2wgbV9p
c0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgYm9vbCBtX2NvbnN0cnVjdG9yS2luZE1heWJlRGVy
aXZlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9maXJzdExpbmU7CiAgICAgdW5zaWduZWQgbV9saW5l
Q291bnQ7CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMTgwNjUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw3ICs0MDQsMjYgQEAK
ICAgICBhZGRDYWxsZWUoZnVuY3Rpb25Ob2RlLCBjYWxsZWVSZWdpc3Rlcik7CiAKICAgICBpZiAo
aXNDb25zdHJ1Y3RvcigpKSB7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAg
IGJvb2wgbWF5YmVEZXJpdmVkID0gY29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKCk7CisgICAg
ICAgIFJlZlB0cjxMYWJlbD4gY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkOworICAgICAgICBtX25l
d1RhcmdldFJlZ2lzdGVyID0gYWRkVmFyKCk7CisgICAgICAgIGVtaXRNb3ZlKG1fbmV3VGFyZ2V0
UmVnaXN0ZXIsICZtX3RoaXNSZWdpc3Rlcik7CisgICAgICAgIGlmIChtYXliZURlcml2ZWQpIHsK
KyAgICAgICAgICAgIFJlZ2lzdGVySUQgY2FsbGVlKEpTU3RhY2s6OkNhbGxlZSk7CisgICAgICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXNEZXJpdmVkUmVnID0gZW1pdEdldEJ5SWQobmV3VGVt
cG9yYXJ5KCksICZjYWxsZWUsIHByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvcktpbmRJc0Rlcml2
ZWRQcml2YXRlTmFtZSk7CisgICAgICAgICAgICBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQgPSBu
ZXdMYWJlbCgpOworICAgICAgICAgICAgZW1pdEp1bXBJZlRydWUoaXNEZXJpdmVkUmVnLmdldCgp
LCBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQuZ2V0KCkpOworICAgICAgICB9CisjZW5kaWYKICAg
ICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lzdGVyKTsKKyNpZiBFTkFCTEUoRVM2X0NM
QVNTX1NZTlRBWCkKKyAgICAgICAgaWYgKG1heWJlRGVyaXZlZCkgeworICAgICAgICAgICAgUmVm
UHRyPExhYmVsPiBjb25zdHJ1Y3RvcktpbmRJc0Jhc2U7CisgICAgICAgICAgICBlbWl0TGFiZWwo
Y29uc3RydWN0b3JLaW5kSXNEZXJpdmVkLmdldCgpKTsKKyAgICAgICAgICAgIGVtaXRNb3ZlKCZt
X3RoaXNSZWdpc3RlciwgYWRkQ29uc3RhbnRFbXB0eVZhbHVlKCkpOworICAgICAgICB9CisjZW5k
aWYKICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uTm9kZS0+dXNlc1RoaXMoKSB8fCBjb2RlQmxvY2st
PnVzZXNFdmFsKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAgICAgZW1pdE9wY29kZShvcF90
b190aGlzKTsKQEAgLTE1NzQsNiArMTU5MywxMiBAQAogICAgIHJldHVybiBkc3Q7CiB9CiAKK3Zv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRURFpDaGVjayhSZWdpc3RlcklEKiB0YXJnZXQpCit7
CisgICAgZW1pdE9wY29kZShvcF9jaGVja190ZHopOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCh0YXJnZXQtPmluZGV4KCkpOworfQorCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdE5ld09iamVjdChSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgc2l6ZV90IGJlZ2luID0gaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTgwNjUxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNyArMjY5LDggQEAKICAgICAgICAgUGFyc2VyQXJlbmEm
IHBhcnNlckFyZW5hKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZU5vZGUtPnBhcnNlckFyZW5hKCk7
IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25z
dCB7IHJldHVybiAqbV92bS0+cHJvcGVydHlOYW1lczsgfQogCi0gICAgICAgIGJvb2wgaXNDb25z
dHJ1Y3RvcigpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCk7IH0KKyAgICAg
ICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29u
c3RydWN0b3IoKTsgfQorICAgICAgICBib29sIGNvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQo
KTsgfQogCiAgICAgICAgIFBhcnNlckVycm9yIGdlbmVyYXRlKCk7CiAKQEAgLTI5MCw3ICsyOTEs
OCBAQAogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAg
ICAgICAgIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3Rl
cjsgfQotICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCogbmV3VGFyZ2V0KCkgeyByZXR1cm4g
bV9uZXdUYXJnZXRSZWdpc3RlcjsgfQorCiAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlUmVnaXN0
ZXIoKSB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIHRo
ZSBuZXh0IGF2YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyByZXR1cm5lZCBi
eQpAQCAtNDUyLDYgKzQ1NCw3IEBACiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmFyeU5vRHN0
T3AoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIHNyYyk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dENyZWF0ZVRoaXMoUmVnaXN0ZXJJRCogZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0VERaQ2hlY2so
UmVnaXN0ZXJJRCopOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3T2JqZWN0KFJlZ2lzdGVy
SUQqIGRzdCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdBcnJheShSZWdpc3RlcklEKiBk
c3QsIEVsZW1lbnROb2RlKiwgdW5zaWduZWQgbGVuZ3RoKTsgLy8gc3RvcHMgYXQgZmlyc3QgZWxp
c2lvbgogCkBAIC03NzAsNiArNzczLDcgQEAKICAgICAgICAgUmVnaXN0ZXJJRCogbV9lbXB0eVZh
bHVlUmVnaXN0ZXIgeyBudWxscHRyIH07CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fZ2xvYmFsT2Jq
ZWN0UmVnaXN0ZXIgeyBudWxscHRyIH07CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWxBcmd1
bWVudHNSZWdpc3RlciB7IG51bGxwdHIgfTsKKyAgICAgICAgUmVnaXN0ZXJJRCogbV9uZXdUYXJn
ZXRSZWdpc3RlciB7IG51bGxwdHIgfTsKIAogICAgICAgICBWZWN0b3I8SWRlbnRpZmllciwgMTY+
IG1fd2F0Y2hhYmxlVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJ
RCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTgw
NjUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDEwIEBACiAgICAgaWYgKGRzdCA9PSBn
ZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICByZXR1cm4gMDsKIAorI2lmIEVOQUJM
RShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2soZ2VuZXJhdG9y
LnRoaXNSZWdpc3RlcigpKTsKKyNlbmRpZgorCiAgICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZ2Vu
ZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBnZW5lcmF0b3IudGhpc1JlZ2lz
dGVyKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCksIFBy
b2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKQEAgLTE0Nyw2
ICsxNTEsNjYgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdXBlck5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBTdXBl
ck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCit7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5z
ZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVP
YmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAm
Y2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50ID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaG9tZU9iamVjdC5nZXQoKSwgZ2VuZXJhdG9y
LnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pOworICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcHJvdG9QYXJlbnQu
Z2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOworfQorCitzdGF0
aWMgUmVnaXN0ZXJJRCogZW1pdFN1cGVyQmFzZUZvckNhbGxlZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yKQoreworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5zZXRJbmRl
eChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmplY3Qg
PSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAmY2FsbGVl
LCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7CisgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhv
bWVPYmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3Rv
KTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN1cGVyQnJhY2tldEFj
Y2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lz
dGVySUQqIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
bV9zdWJzY3JpcHQpOworICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWdpc3RlcklEIGNhbGxlZTsKKyAgICBjYWxsZWUu
c2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworCisKKyAgICByZXR1cm4gZ2VuZXJhdG9yLm1v
dmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCAmY2FsbGVlIC8qIGdlbmVyYXRvci5zY29wZVJl
Z2lzdGVyKCkgKi8pOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3Vw
ZXJEb3RBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CitSZWdpc3RlcklEKiBTdXBlckRvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0obV9pZGVudCk7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5z
ZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVP
YmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAm
Y2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2VWYWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJ
ZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhvbWVPYmplY3QuZ2V0KCksIGdlbmVyYXRvci5w
cm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZVZhbHVlLmdldCgp
LCBtX2lkZW50KTsKK30KKworI2VuZGlmCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGJv
b2wgUmVzb2x2ZU5vZGU6OmlzUHVyZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKSBjb25z
dApAQCAtMjg1LDYgKzM0OSwxMyBAQAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUHJvcGVydHlMaXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisjaWYg
RU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdFB1dEhvbWVP
YmplY3QoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZnVuY3Rpb24s
IFJlZ2lzdGVySUQqIGhvbWVPYmplY3QpCit7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGZ1
bmN0aW9uLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSwg
aG9tZU9iamVjdCk7Cit9CisjZW5kaWYKKwogUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKICAgICAvLyBGYXN0IGNhc2U6IHRoaXMgbG9vcCBqdXN0IGhhbmRsZXMgcmVndWxhciB2
YWx1ZSBwcm9wZXJ0aWVzLgpAQCAtMzIxLDYgKzM5MiwxMCBAQAogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLT5t
X2Fzc2lnbik7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgICAgICBpZiAo
bm9kZS0+aXNNZXRob2QoKSkKKyAgICAgICAgICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5l
cmF0b3IsIHZhbHVlLCBkc3QpOworI2VuZGlmCiAKICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBn
ZXQvc2V0IHByb3BlcnR5LCBmaW5kIGl0cyBlbnRyeSBpbiB0aGUgbWFwLgogICAgICAgICAgICAg
QVNTRVJUKG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlciB8fCBub2RlLT5tX3R5
cGUgPT0gUHJvcGVydHlOb2RlOjpTZXR0ZXIpOwpAQCAtMzY2LDE4ICs0NDEsMzQgQEAKIAogdm9p
ZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3RhbnRQcm9wZXJ0eShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBuZXdPYmosIFByb3BlcnR5Tm9kZSYgbm9kZSkK
IHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9k
ZS5tX2Fzc2lnbik7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgaWYgKG5vZGUu
aXNNZXRob2QoKSkKKyAgICAgICAgZW1pdFB1dEhvbWVPYmplY3QoZ2VuZXJhdG9yLCB2YWx1ZS5n
ZXQoKSwgbmV3T2JqKTsKKyNlbmRpZgogICAgIGlmIChub2RlLm5hbWUoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQobmV3T2JqLCAqbm9kZS5uYW1lKCksIGdlbmVyYXRv
ci5lbWl0Tm9kZShub2RlLm1fYXNzaWduKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0
UHV0QnlJZChuZXdPYmosICpub2RlLm5hbWUoKSwgdmFsdWUuZ2V0KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobm9kZS5tX2V4cHJlc3Npb24pOwotICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0
UHV0QnlWYWwobmV3T2JqLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9kZShu
b2RlLm1fYXNzaWduKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeVZhbChuZXdPYmos
IHByb3BlcnR5TmFtZS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gQnJhY2tldEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewor
I2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2Rl
KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBnZW5lcmF0ZSB0aGUgcHJvZmlsZXIg
aW5mbz8KKyAgICAgICAgaWYgKG1fc3Vic2NyaXB0LT5pc1N0cmluZygpKSB7CisgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZCA9IHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNj
cmlwdCktPnZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGVtaXRTdXBlckJhc2VGb3JDYWxsZWUo
Z2VuZXJhdG9yKSwgaWQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dEdldEJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGVtaXRTdXBlckJhc2VG
b3JDYWxsZWUoZ2VuZXJhdG9yKSwgZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KSk7Cisg
ICAgfQorI2VuZGlmCisKICAgICBpZiAobV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkgCiAgICAgICAg
ICYmIGdlbmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRzUmVnaXN0ZXIoc3RhdGljX2Nhc3Q8
UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpCiAgICAgICAgICYmICFnZW5lcmF0
b3Iuc3ltYm9sVGFibGUoKS5zbG93QXJndW1lbnRzKCkpIHsKQEAgLTQyMiw3ICs1MTMsMTEgQEAK
ICAgICB9CiAKIG5vbkFyZ3VtZW50c1BhdGg6CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgp
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCkgPyBl
bWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5vZGUobV9i
YXNlKTsKKyNlbHNlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9iYXNlKTsKKyNlbmRpZgogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiBmaW5h
bERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVySUQq
IHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0KCksIG1faWRl
bnQpOwpAQCAtNTEwLDYgKzYwNSwxNCBAQAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVy
blZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAg
ICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworI2lmIEVO
QUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChtX2V4cHItPmlzU3VwZXJOb2RlKCkpIHsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IGdlbmVyYXRvci5uZXdUYXJnZXQoKSk7CisgICAgICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVy
YXRvci5lbWl0Q29uc3RydWN0KHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGhpc1JlZ2lzdGVy
KCksIHJldCk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorI2VuZGlmCiAgICAgZ2VuZXJh
dG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkp
OwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5n
ZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZv
dCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+
dHlwZVByb2ZpbGVyKCkpIHsKQEAgLTU2MSwxMyArNjY0LDI1IEBACiAKIFJlZ2lzdGVySUQqIEZ1
bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBiYXNlSXNTdXBlciA/IGVtaXRTdXBlckJhc2VGb3JDYWxs
ZWUoZ2VuZXJhdG9yKSA6IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworI2Vsc2UKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworI2Vu
ZGlmCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fc3Vic2NyaXB0KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJl
c3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0
KCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5U
QVgpCisgICAgaWYgKGJhc2VJc1N1cGVyKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2Fs
bEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsKKyAg
ICBlbHNlCisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBiYXNlLmdldCgpKTsKKyNlbHNlCiAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOworI2VuZGlmCiAgICAgUmVnaXN0
ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlv
bi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2Zp
bGVyKCkpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5n
ZXQoKSwgUHJvZmlsZVR5cGVCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwpA
QCAtNTgzLDkgKzY5OCwyMSBAQAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0
dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgp
KTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwor
I2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jh
c2UtPmlzU3VwZXJOb2RlKCk7CisgICAgaWYgKGJhc2VJc1N1cGVyKQorICAgICAgICBnZW5lcmF0
b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnRoaXNS
ZWdpc3RlcigpKTsKKyAgICBlbHNlCisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2Jhc2UpOworI2Vsc2UKICAgICBnZW5lcmF0b3IuZW1p
dE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9iYXNlKTsKKyNlbmRpZgogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4
cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOworI2lmIEVOQUJMRShFUzZfQ0xB
U1NfU1lOVEFYKQorICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgYmFz
ZUlzU3VwZXIgPyBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsKKyNlbHNlCiAgICAgZ2VuZXJhdG9yLmVtaXRH
ZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lk
ZW50KTsKKyNlbmRpZgogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChy
ZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAo
Z2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90
SGF2ZUdsb2JhbElELCBudWxscHRyKTsKQEAgLTkyNyw2ICsxMDU0LDEwIEBACiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKIAogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9iYXNlLT5p
c1N1cGVyTm9kZSgpKQorICAgICAgICByZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2Vu
ZXJhdG9yLCAiQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5Iik7CisjZW5kaWYKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwogfQogCkBAIC05MzcsNiArMTA2OCwxMCBAQAog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChtX2Jh
c2UtPmlzU3VwZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBlbWl0VGhyb3dSZWZlcmVuY2VFcnJv
cihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHkiKTsKKyNlbmRpZgog
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwgcjAuZ2V0KCksIG1faWRlbnQpOwogfQogCkBAIC0yNzk0LDExICsyOTI5LDQx
IEBACiAKIFJlZ2lzdGVySUQqIENsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgQVNTRVJUKCFtX3Bh
cmVudENsYXNzRXhwcmVzc2lvbik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNsYXNzSGVyaXRh
Z2U7CisgICAgaWYgKG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKSB7CisgICAgICAgIGNsYXNzSGVy
aXRhZ2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
Tm9kZShjbGFzc0hlcml0YWdlLmdldCgpLCBtX3BhcmVudENsYXNzRXhwcmVzc2lvbik7CisgICAg
fQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvbnN0cnVjdG9yID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKGRzdCwgbV9jb25zdHJ1Y3RvckV4cHJlc3Npb24pOworICAgIC8vIEZJWE1FOiBNYWtlIHRo
ZSBwcm90b3R5cGUgbm9uLWNvbmZpZ3VyYWJsZSAmIG5vbi13cml0YWJsZS4KICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvdG90eXBlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgY29uc3RydWN0b3IuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVz
KCkucHJvdG90eXBlKTsKIAorICAgIGlmIChjbGFzc0hlcml0YWdlKSB7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBwcm90b1BhcmVudCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAg
ICAgICAgUmVmUHRyPExhYmVsPiBjbGFzc0hlcml0YWdlSXNOdWxsID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gcHJvdG9QYXJlbnRJc1NldCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0
b3IuZW1pdFVuYXJ5T3Aob3BfZXFfbnVsbCwgcHJvdG9QYXJlbnQuZ2V0KCksIGNsYXNzSGVyaXRh
Z2UuZ2V0KCkpLCBjbGFzc0hlcml0YWdlSXNOdWxsLmdldCgpKTsKKworICAgICAgICAvLyBGSVhN
RTogVGhyb3cgVHlwZUVycm9yIGlmIGlzQ29uc3RydWN0b3IocGFyZW50Q2xhc3MpIGlzIGZhbHNl
IG9yIGl0J3MgYSBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0
QnlJZChwcm90b1BhcmVudC5nZXQoKSwgY2xhc3NIZXJpdGFnZS5nZXQoKSwgZ2VuZXJhdG9yLnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgICAgICAvLyBGSVhNRTogVGhyb3cgVHlwZUVy
cm9yIGlmIFR5cGUocHJvdG9QYXJlbnQpIGlzIG5vdCBPYmplY3Qgb3IgbnVsbC4KKworICAgICAg
ICAvLyBFUzYgZHJhZnQgZG9lc24ndCBzdG9yZSBob21lT2JqZWN0IG9uIHRoZSBjb25zdHJ1Y3Rv
ciBidXQgdGhpcyB3b3VsZCBtYWtlIHN1cHBvcnRpbmcgIm5ldyBzdXBlciIgaW4gY29uc3RydWN0
b3IgY3VtYmVyc29tZS4KKyAgICAgICAgZW1pdFB1dEhvbWVPYmplY3QoZ2VuZXJhdG9yLCBjb25z
dHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBlLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRE
aXJlY3RQdXRCeUlkKGNvbnN0cnVjdG9yLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygp
LmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZFByaXZhdGVOYW1lLAorICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNCb29sZWFuKHRydWUpKSk7
CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKHByb3RvdHlwZS5nZXQoKSwg
Z2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIHByb3RvUGFyZW50Lmdl
dCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHByb3RvUGFyZW50SXNTZXQuZ2V0KCkp
OworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoY2xhc3NIZXJpdGFnZUlzTnVsbC5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCks
IGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBjbGFzc0hlcml0YWdl
LmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHByb3RvUGFyZW50SXNTZXQu
Z2V0KCkpOworICAgIH0KKwogICAgIGlmIChtX3N0YXRpY01ldGhvZHMpCiAgICAgICAgIGdlbmVy
YXRvci5lbWl0Tm9kZShjb25zdHJ1Y3Rvci5nZXQoKSwgbV9zdGF0aWNNZXRob2RzKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTgwNjUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAy
LDcgQEAKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9jYWxsZWUpCiAgICAgICAgIERFRklORV9P
UChvcF9jcmVhdGVfdGhpcykKICAgICAgICAgREVGSU5FX09QKG9wX3RvX3RoaXMpCisgICAgICAg
IERFRklORV9PUChvcF9jaGVja190ZHopCiAgICAgICAgIERFRklORV9PUChvcF9pbml0X2xhenlf
cmVnKQogICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX2FyZ3VtZW50cykKICAgICAgICAgREVG
SU5FX09QKG9wX2RlYnVnKQpAQCAtMzc2LDYgKzM3Nyw3IEBACiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9jb25zdHJ1Y3RfdmFyYXJncykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2NvbnN0cnVjdCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3RvX3RoaXMpCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190ZHopCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9jcmVhdGVfdGhpcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2RpdikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2VxKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCShyZXZpc2lvbiAxODA2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjksNiArNDY5LDcgQEAKICAgICAgICAgdm9p
ZCBlbWl0X29wX2dldF9jYWxsZWUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2NyZWF0ZV90aGlzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b190aGlz
KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9jaGVja190ZHooSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9kZWxfYnlfaWQoSW5zdHJ1Y3Rpb24qKTsKQEAgLTU3Miw2ICs1NzMsNyBAQAog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90b190aGlzKEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NoZWNrX3RkeihJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9kaXYoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZXEoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHJldmlzaW9uIDE4MDY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyOSw2ICs3MjksMTQgQEAKICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tf
dGR6KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSk7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dGR6VmFsdWUo
KSksIHJlZ1QxKTsKKyAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCkpOwor
fQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfY2FsbGVlKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CkBAIC04MDYsNiArODE0LDE0IEBACiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
IAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RkeihJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfdGR6X2Vycm9yKTsKKyAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fcHJp
bWl0aXZlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHJldmlzaW9uIDE4MDY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02ODUsNiArNjg1
LDIxIEBACiAgICAgZGlzcGF0Y2goNCkKIAogCitfbGxpbnRfb3BfY2hlY2tfdGR6OgorICAgIHRy
YWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbigxLCB0MCkKKyAgICBicW5l
cSBbY2ZyLCB0MCwgOF0sIFZhbHVlRW1wdHksIC5vcE5vdFREWgorIyAgICBicW5lcSB0MCwgVmFs
dWVFbXB0eSwgLm9wTm90VERaCisjICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQorIyAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QxXSwgdDEKKyMgICAgbG9hZHAgSlNHbG9i
YWxPYmplY3Q6Om1fdGR6VmFsdWVbdDFdLCB0MQorIyAgICBicG5lcSB0MCwgdDEsIC5vcE5vdFRE
WgorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX3Rocm93X3Rkel9lcnJvcikKKworLm9wTm90
VERaOgorICAgIGRpc3BhdGNoKDIpCisKKwogX2xsaW50X29wX25ld19vYmplY3Q6CiAgICAgdHJh
Y2VFeGVjdXRpb24oKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDMsIHQwKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE4MDY1MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjksNiArMTY5LDM2IEBACiAgICAgICAgIHVzZXNUaGlzKCk7CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFRoaXNOb2RlKGxvY2F0aW9uKTsKICAgICB9CisjaWYg
RU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgRXhwcmVzc2lvbk5vZGUqIHN1cGVyRXhwcihj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IEFkZCBhbmQgY2FsbCB1c2VzU3VwZXIoKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgU3VwZXJOb2RlKGxvY2F0aW9uKTsKKyAgICB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZVN1cGVyQ2FsbChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBBcmd1bWVudHNO
b2RlKiBhcmd1bWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQorICAgIHsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50cyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdGFydCk7
CisgICAgICAgIFVOVVNFRF9QQVJBTShkaXZvdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShlbmQp
OworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdXBlck5vZGUobG9jYXRpb24p
OworICAgIH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlU3VwZXJCcmFja2V0QWNjZXNzKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBwcm9wZXJ0eSwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0o
cHJvcGVydHkpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RhcnQpOworICAgICAgICBVTlVTRURf
UEFSQU0oZGl2b3QpOworICAgICAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgU3VwZXJCcmFja2V0QWNjZXNzb3JOb2RlKGxvY2F0aW9uLCBw
cm9wZXJ0eSk7CisgICAgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVTdXBlckRvdEFjY2Vz
cyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBwcm9w
ZXJ0eSwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCisgICAgeworICAgICAgICBVTlVTRURf
UEFSQU0oc3RhcnQpOworICAgICAgICBVTlVTRURfUEFSQU0oZGl2b3QpOworICAgICAgICBVTlVT
RURfUEFSQU0oZW5kKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgU3VwZXJE
b3RBY2Nlc3Nvck5vZGUobG9jYXRpb24sICpwcm9wZXJ0eSk7CisgICAgfQorI2VuZGlmCiAgICAg
RXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFy
dCkKICAgICB7CiAgICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0g
KmlkZW50KQpAQCAtMjkzLDkgKzMyMyw5IEBACiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2Nh
dGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0
cmljdENvbnRleHQpCisgICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwg
Ym9vbCBpblN0cmljdENvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9y
S2luZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9u
Qm9keU5vZGUobV9wYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0
Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uQm9keU5vZGUobV9wYXJzZXJBcmVuYSwgc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29udGV4
dCwgY29uc3RydWN0b3JLaW5kKTsKICAgICB9CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZVN0
YXJ0KEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBmdW5jdGlvbk5hbWVTdGFydCkKQEAgLTMy
OCwxMSArMzU4LDExIEBACiAgICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlz
dChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYXJnKSB7
IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIGFy
Zyk7IH0KICAgICBBcmd1bWVudExpc3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MsIEV4cHJlc3Np
b25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXJndW1lbnRMaXN0Tm9k
ZShsb2NhdGlvbiwgYXJncywgYXJnKTsgfQogCi0gICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9w
ZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2Rl
LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCkKKyAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0
ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUq
IG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLCBib29sIGlzTWV0aG9kID0gZmFs
c2UpCiAgICAgewogICAgICAgICBpZiAobm9kZS0+aXNGdW5jRXhwck5vZGUoKSkKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KG5vZGUpLT5ib2R5KCktPnNldEluZmVycmVk
TmFtZSgqcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkg
UHJvcGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUpOworICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKnByb3BlcnR5TmFtZSwgbm9kZSwgdHlw
ZSwgaXNNZXRob2QpOwogICAgIH0KICAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KFZN
KiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBkb3VibGUgcHJvcGVydHlOYW1lLCBFeHBy
ZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
LmgJKHJldmlzaW9uIDE4MDY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDI1IEBACiAgICAg
ewogICAgIH0KIAorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlubGluZSBTdXBl
ck5vZGU6OlN1cGVyTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQorICAgICAg
ICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxpbmUg
U3VwZXJCcmFja2V0QWNjZXNzb3JOb2RlOjpTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCkKKyAg
ICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKKyAgICAgICAgLCBtX3N1YnNjcmlwdChz
dWJzY3JpcHQpCisgICAgeworICAgIH0KKworICAgIGlubGluZSBTdXBlckRvdEFjY2Vzc29yTm9k
ZTo6U3VwZXJEb3RBY2Nlc3Nvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRp
b24pCisgICAgICAgICwgbV9pZGVudChpZGVudCkKKyAgICB7CisgICAgfQorI2VuZGlmCisKIGlu
bGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFy
dCkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2lkZW50
KGlkZW50KQpAQCAtMTQ5LDEwICsxNjgsMTEgQEAKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5l
IFByb3BlcnR5Tm9kZTo6UHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJl
c3Npb25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSkKKyAgICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQ
cm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGFzc2ln
biwgVHlwZSB0eXBlLCBib29sIGlzTWV0aG9kID0gZmFsc2UpCiAgICAgICAgIDogbV9uYW1lKCZu
YW1lKQogICAgICAgICAsIG1fYXNzaWduKGFzc2lnbikKICAgICAgICAgLCBtX3R5cGUodHlwZSkK
KyAgICAgICAgLCBtX2lzTWV0aG9kKGlzTWV0aG9kKQogICAgIHsKICAgICB9CiAKQEAgLTE2MSw2
ICsxODEsNyBAQAogICAgICAgICAsIG1fZXhwcmVzc2lvbihuYW1lKQogICAgICAgICAsIG1fYXNz
aWduKGFzc2lnbikKICAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2lzTWV0aG9k
KGZhbHNlKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuY3BwCShyZXZpc2lvbiAxODA2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDEyICsxNjcsMTMgQEAKICAgICAg
ICAgcGF0dGVybnMoKVtpXS0+ZGVyZWYoKTsKIH0KIAotRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rp
b25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2Nh
dGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRD
b2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKK0Z1bmN0
aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0
cmljdENvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCkKICAg
ICA6IFN0YXRlbWVudE5vZGUoZW5kTG9jYXRpb24pCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0
Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1uKQogICAgICwgbV9zdGFydFN0YXJ0
T2Zmc2V0KHN0YXJ0TG9jYXRpb24uc3RhcnRPZmZzZXQpCiAgICAgLCBtX2lzSW5TdHJpY3RDb250
ZXh0KGlzSW5TdHJpY3RDb250ZXh0KQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2
ZWQoY29uc3RydWN0b3JLaW5kID09IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpNYXliZURlcml2
ZWQpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlz
aW9uIDE4MDY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTY0LDYgKzE2NCw3IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1
YnRyYWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlz
Qm9vbGVhbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1NwcmVhZEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNTdXBlck5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBMYWJlbCosIExhYmVsKiwgRmFsbFRocm91Z2hNb2RlKTsKIApAQCAtNDI5LDYgKzQz
MCwzNyBAQAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKIAorI2lmIEVO
QUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGNsYXNzIFN1cGVyTm9kZSBmaW5hbCA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBlck5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNTdXBlck5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKSBvdmVycmlkZTsKKyAgICB9OworCisgICAgY2xhc3MgU3VwZXJCcmFja2V0QWNj
ZXNzb3JOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBvdmVycmlkZTsKKworICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9zdWJzY3JpcHQ7
CisgICAgfTsKKworICAgIGNsYXNzIFN1cGVyRG90QWNjZXNzb3JOb2RlIGZpbmFsIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1cGVyRG90QWNjZXNzb3JO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKKworICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBtX2lkZW50OworICAgIH07CisjZW5kaWYKKwogICAgIGNsYXNzIFJlc29sdmVO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlc29s
dmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgc3RhcnQpOwpAQCAtNDg0LDIwICs1MTYsMjIgQEAKICAgICBwdWJsaWM6
CiAgICAgICAgIGVudW0gVHlwZSB7IENvbnN0YW50ID0gMSwgR2V0dGVyID0gMiwgU2V0dGVyID0g
NCB9OwogCi0gICAgICAgIFByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lv
bk5vZGUqLCBUeXBlKTsKKyAgICAgICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImLCBF
eHByZXNzaW9uTm9kZSosIFR5cGUsIGJvb2wgaXNNZXRob2QpOwogICAgICAgICBQcm9wZXJ0eU5v
ZGUoRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqLCBUeXBlKTsK
ICAgICAgICAgCiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBleHByZXNzaW9uTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKLSAgICAgICAgVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KKyAgICAgICAgYm9vbCBpc01ldGhvZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNNZXRob2Q7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBQcm9wZXJ0eUxpc3ROb2RlOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBtX25hbWU7
CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHJlc3Npb247CiAgICAgICAgIEV4cHJlc3Np
b25Ob2RlKiBtX2Fzc2lnbjsKLSAgICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgIHVuc2lnbmVk
IG1fdHlwZSA6IDM7CisgICAgICAgIHVuc2lnbmVkIG1faXNNZXRob2QgOiAxOwogICAgIH07CiAK
ICAgICBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAg
LTE1MjgsNyArMTU2Miw3IEBACiAgICAgcHVibGljOgogICAgICAgICB1c2luZyBQYXJzZXJBcmVu
YURlbGV0YWJsZTo6b3BlcmF0b3IgbmV3OwogCi0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoUGFy
c2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9v
bCBpc0luU3RyaWN0Q29udGV4dCk7CisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoUGFyc2VyQXJl
bmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpc0lu
U3RyaWN0Q29udGV4dCwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQpOwogCiAgICAgICAgIEZ1bmN0
aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5n
ZXQoKTsgfQogCkBAIC0xNTU2LDYgKzE1OTAsNyBAQAogCiAgICAgICAgIGludCBzdGFydFN0YXJ0
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFN0YXJ0T2Zmc2V0OyB9CiAgICAgICAgIGJv
b2wgaXNJblN0cmljdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzSW5TdHJpY3RDb250ZXh0
OyB9CisgICAgICAgIGJvb2wgY29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKCkgeyByZXR1cm4g
bV9jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQ7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgSWRlbnRpZmllciBtX2lkZW50OwpAQCAtMTU2OCw3ICsxNjAzLDggQEAKICAgICAgICAgdW5z
aWduZWQgbV9lbmRDb2x1bW47CiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgICAg
IGludCBtX3N0YXJ0U3RhcnRPZmZzZXQ7Ci0gICAgICAgIGJvb2wgbV9pc0luU3RyaWN0Q29udGV4
dDsKKyAgICAgICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0IDogMTsKKyAgICAgICAgYm9vbCBt
X2NvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCA6IDE7CiAgICAgfTsKIAogICAgIGNsYXNzIEZ1
bmN0aW9uTm9kZSBmaW5hbCA6IHB1YmxpYyBTY29wZU5vZGUgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTgwNjUxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU0LDcg
KzEyNTQsNyBAQAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5j
dGlvbkJvZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kIGNv
bnN0cnVjdG9yS2luZCkKIHsKICAgICBKU1Rva2VuTG9jYXRpb24gc3RhcnRMb2NhdGlvbih0b2tl
bkxvY2F0aW9uKCkpOwogICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdG9rZW5Db2x1bW4oKTsK
QEAgLTEyNjIsMTQgKzEyNjIsMTQgQEAKIAogICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkgewog
ICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwotICAgICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlv
bigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlv
bigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCksIGNvbnN0cnVjdG9yS2lu
ZCk7CiAgICAgfQogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnRE
ZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7CiAgICAgdHlwZW5hbWUgVHJlZUJ1aWxk
ZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIoY29uc3RfY2FzdDxWTSo+KG1fdm0p
LCBtX2xleGVyLmdldCgpKTsKICAgICBmYWlsSWZGYWxzZShwYXJzZVNvdXJjZUVsZW1lbnRzKGJv
ZHlCdWlsZGVyLCBDaGVja0ZvclN0cmljdE1vZGUpLCAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhp
cyBmdW5jdGlvbiIpOwogICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7Ci0g
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2Vu
TG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsKKyAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2Nh
dGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCksIGNvbnN0cnVjdG9y
S2luZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUoRnVu
Y3Rpb25QYXJzZU1vZGUgbW9kZSkKQEAgLTEyOTEsNyArMTI5MSw4IEBACiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wg
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0
LCBGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlIG1v
ZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVl
QnVpbGRlcj4mIGluZm8pCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBGdW5j
dGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUsCisg
ICAgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQg
Y29uc3RydWN0b3JLaW5kLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+JiBpbmZvKQog
ewogICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsK
ICAgICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CkBAIC0xMzQ0LDcgKzEzNDUsNyBA
QAogICAgICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQ7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQgPSBt
X3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogCi0gICAgICAgIGluZm8uYm9keSA9
IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBp
bmZvLmJvZHlTdGFydENvbHVtbiwgYm9keUVuZENvbHVtbiwgY2FjaGVkSW5mby0+c3RyaWN0TW9k
ZSk7CisgICAgICAgIGluZm8uYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0
TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpbmZvLmJvZHlTdGFydENvbHVtbiwgYm9keUVuZENvbHVt
biwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSwgY29uc3RydWN0b3JLaW5kKTsKICAgICAgICAgCiAg
ICAgICAgIGZ1bmN0aW9uU2NvcGUtPnJlc3RvcmVGcm9tU291cmNlUHJvdmlkZXJDYWNoZShjYWNo
ZWRJbmZvKTsKICAgICAgICAgZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJl
ZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbyksICJQYXJzZXIgZXJyb3IiKTsKQEAgLTEz
NjcsNyArMTM2OCw3IEBACiAgICAgfQogICAgIG1fbGFzdEZ1bmN0aW9uTmFtZSA9IGxhc3RGdW5j
dGlvbk5hbWU7CiAgICAgUGFyc2VyU3RhdGUgb2xkU3RhdGUgPSBzYXZlU3RhdGUoKTsKLSAgICBp
bmZvLmJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsKKyAgICBpbmZvLmJvZHkgPSBw
YXJzZUZ1bmN0aW9uQm9keShjb250ZXh0LCBjb25zdHJ1Y3RvcktpbmQpOwogICAgIHJlc3RvcmVT
dGF0ZShvbGRTdGF0ZSk7CiAgICAgZmFpbElmRmFsc2UoaW5mby5ib2R5LCAiQ2Fubm90IHBhcnNl
IHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsKICAgICBj
b250ZXh0LnNldEVuZE9mZnNldChpbmZvLmJvZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7
CkBAIC0xNDE2LDcgKzE0MTcsNyBAQAogICAgIHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0YXJ0
ID0gdG9rZW5TdGFydCgpOwogICAgIG5leHQoKTsKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJl
ZUJ1aWxkZXI+IGluZm87Ci0gICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRl
eHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBGdW5jdGlvbk1vZGUsIHRydWUsIGluZm8pKSwgIkNhbm5v
dCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25J
bmZvKGNvbnRleHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBGdW5jdGlvbk1vZGUsIHRydWUsIEpTUGFy
c2VyQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5j
dGlvbiIpOwogICAgIGZhaWxJZkZhbHNlKGluZm8ubmFtZSwgIkZ1bmN0aW9uIHN0YXRlbWVudHMg
bXVzdCBoYXZlIGEgbmFtZSIpOwogICAgIGZhaWxJZkZhbHNlSWZTdHJpY3QoZGVjbGFyZVZhcmlh
YmxlKGluZm8ubmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIGZ1bmN0aW9uIG5hbWVkICciLCBpbmZv
Lm5hbWUtPmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVGdW5jRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3Rh
cnQpOwpAQCAtMTQ2Niw4ICsxNDY3LDggQEAKICAgICBpZiAoY29uc3VtZShFWFRFTkRTKSkgewog
ICAgICAgICBwYXJlbnRDbGFzcyA9IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oY29udGV4dCk7CiAg
ICAgICAgIGZhaWxJZkZhbHNlKHBhcmVudENsYXNzLCAiQ2Fubm90IHBhcnNlIHRoZSBwYXJlbnQg
Y2xhc3MgbmFtZSIpOwotICAgICAgICBmYWlsV2l0aE1lc3NhZ2UoIkluaGVyaXRhbmNlIGlzIG5v
dCBzdXBwb3J0ZWQgeWV0Iik7CiAgICAgfQorICAgIGNvbnN0IEpTUGFyc2VyQ29uc3RydWN0b3JL
aW5kIGNvbnN0cnVjdG9yS2luZCA9IHBhcmVudENsYXNzID8gSlNQYXJzZXJDb25zdHJ1Y3Rvcktp
bmQ6Ok1heWJlRGVyaXZlZCA6IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpCYXNlOwogCiAgICAg
Y29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0UsIFRyZWVCdWlsZGVyOjpEb250QnVpbGRT
dHJpbmdzLCAiRXhwZWN0ZWQgb3BlbmluZyAneycgYXQgdGhlIHN0YXJ0IG9mIGEgY2xhc3MgYm9k
eSIpOwogCkBAIC0xNTAzLDcgKzE1MDQsNyBAQAogICAgICAgICAgICAgZmFpbElmRmFsc2UocHJv
cGVydHksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gbWV0aG9kSW5mbzsKLSAg
ICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlv
bk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgbWV0aG9kSW5mbykpLCAiQ2Fubm90IHBh
cnNlIHRoaXMgbWV0aG9kIik7CisgICAgICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlv
bkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwgZmFsc2UsIGNv
bnN0cnVjdG9yS2luZCwgbWV0aG9kSW5mbykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7
CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShtZXRob2RJbmZvLm5hbWUsICJtZXRob2QgbXVzdCBo
YXZlIGEgbmFtZSIpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UoZGVjbGFyZVZhcmlhYmxlKG1l
dGhvZEluZm8ubmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIG1ldGhvZCBuYW1lZCAnIiwgbWV0aG9k
SW5mby5uYW1lLT5pbXBsKCksICInIik7CiAKQEAgLTE1MjEsNyArMTUyMiw4IEBACiAgICAgICAg
ICAgICAvLyBGSVhNRTogU3ludGF4IGVycm9yIHdoZW4gc3VwZXIoKSBpcyBjYWxsZWQKICAgICAg
ICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShpc1N0YXRpY01ldGhvZCAmJiAqbWV0aG9kSW5mby5u
YW1lID09IHByb3BlcnR5TmFtZXMucHJvdG90eXBlLAogICAgICAgICAgICAgICAgICJDYW5ub3Qg
ZGVjbGFyZSBhIHN0YXRpYyBtZXRob2QgbmFtZWQgJ3Byb3RvdHlwZSciKTsKLSAgICAgICAgICAg
IHByb3BlcnR5ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShtZXRob2RJbmZvLm5hbWUsIG1ldGhv
ZCwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MpOworICAg
ICAgICAgICAgYm9vbCBpc01ldGhvZCA9IHRydWU7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IGNv
bnRleHQuY3JlYXRlUHJvcGVydHkobWV0aG9kSW5mby5uYW1lLCBtZXRob2QsIFByb3BlcnR5Tm9k
ZTo6Q29uc3RhbnQsIGFsd2F5c1N0cmljdEluc2lkZUNsYXNzLCBpc01ldGhvZCk7CiAgICAgICAg
IH0KIAogICAgICAgICBUcmVlUHJvcGVydHlMaXN0JiB0YWlsID0gaXNTdGF0aWNNZXRob2QgPyBz
dGF0aWNNZXRob2RzVGFpbCA6IGluc3RhbmNlTWV0aG9kc1RhaWw7CkBAIC0xOTg4LDEwICsxOTkw
LDEwIEBACiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwogICAgIGlm
ICh0eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyKSB7CiAgICAgICAgIGZhaWxJZkZhbHNlKG1h
dGNoKE9QRU5QQVJFTiksICJFeHBlY3RlZCBhIHBhcmFtZXRlciBsaXN0IGZvciBnZXR0ZXIgZGVm
aW5pdGlvbiIpOwotICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4
dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgR2V0dGVyTW9kZSwgZmFsc2UsIGluZm8pKSwgIkNh
bm5vdCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgR2V0dGVyTW9k
ZSwgZmFsc2UsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5ub3Qg
cGFyc2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKICAgICB9IGVsc2UgewogICAgICAgICBmYWlsSWZG
YWxzZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3Igc2V0
dGVyIGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZv
KGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBpbmZv
KSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRpb24iKTsKKyAgICAgICAgZmFpbElmRmFs
c2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNl
dHRlck1vZGUsIGZhbHNlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFzZSwgaW5mbykpLCAi
Q2Fubm90IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7CiAgICAgfQogICAgIGlmIChzdHJpbmdQ
cm9wZXJ0eU5hbWUpCiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVy
UHJvcGVydHkobG9jYXRpb24sIHR5cGUsIHN0cmljdCwgc3RyaW5nUHJvcGVydHlOYW1lLCBpbmZv
LCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKQEAgLTIxODAsNyArMjE4Miw3IEBACiAgICAg
ICAgIG5leHQoKTsKICAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZv
OwogICAgICAgICBpbmZvLm5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZp
ZXI7Ci0gICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5j
dGlvbk5vUmVxdWlyZW1lbnRzLCBGdW5jdGlvbk1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3Qg
cGFyc2UgZnVuY3Rpb24gZXhwcmVzc2lvbiIpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VG
dW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25Nb2Rl
LCBmYWxzZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBw
YXJzZSBmdW5jdGlvbiBleHByZXNzaW9uIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZUZ1bmN0aW9uRXhwcihsb2NhdGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAg
IH0KICNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKQEAgLTIzMjQsNyArMjMyNiwxNiBAQAog
ICAgICAgICBuZXdDb3VudCsrOwogICAgIH0KIAorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtYXRjaChTVVBFUik7CisgICAgaWYgKGJhc2VJc1N1
cGVyKSB7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LnN1cGVyRXhwcihsb2NhdGlvbik7CisgICAg
ICAgIG5leHQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYmFzZSA9IHBhcnNlUHJpbWFyeUV4cHJl
c3Npb24oY29udGV4dCk7CisjZWxzZQogICAgIGJhc2UgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9u
KGNvbnRleHQpOworI2VuZGlmCiAgICAgCiAgICAgZmFpbElmRmFsc2UoYmFzZSwgIkNhbm5vdCBw
YXJzZSBiYXNlIGV4cHJlc3Npb24iKTsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjMzOCw2ICsy
MzQ5LDEwIEBACiAgICAgICAgICAgICBpbnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9hc3NpZ25t
ZW50Q291bnQ7CiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhw
cmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fu
bm90IHBhcnNlIHN1YnNjcmlwdCBleHByZXNzaW9uIik7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisgICAgICAgICAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgICAgICAgICAgZmFp
bElmVHJ1ZShpbml0aWFsQXNzaWdubWVudHMgfHwgbV9hc3NpZ25tZW50Q291bnQsICJDYW5ub3Qg
YXNzaWduIGEgdmFsdWUgdG8gc3VwZXIiKTsKKyNlbmRpZgogICAgICAgICAgICAgYmFzZSA9IGNv
bnRleHQuY3JlYXRlQnJhY2tldEFjY2Vzcyhsb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRp
YWxBc3NpZ25tZW50cyAhPSBtX2Fzc2lnbm1lbnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHBy
ZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgaGFuZGxlUHJvZHVj
dGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJzdWJzY3JpcHQgZXhwcmVzc2lv
biIpOwogICAgICAgICAgICAgbV9ub25MSFNDb3VudCA9IG5vbkxIU0NvdW50OwpAQCAtMjM1Niw2
ICsyMzcxLDcgQEAKICAgICAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBleHByZXNzaW9uRW5k
ID0gbGFzdFRva2VuRW5kUG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICBUcmVlQXJndW1lbnRz
IGFyZ3VtZW50cyA9IHBhcnNlQXJndW1lbnRzKGNvbnRleHQsIEFsbG93U3ByZWFkKTsKICAgICAg
ICAgICAgICAgICBmYWlsSWZGYWxzZShhcmd1bWVudHMsICJDYW5ub3QgcGFyc2UgY2FsbCBhcmd1
bWVudHMiKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaWYgYmFzZUlzU3VwZXI6IGZhaWxJ
ZkZhbHNlKGlzQ29uc3RydWN0b3IsICJDYW5ub3QgY2FsbCBzdXBlcigpIGluIHRoaXMgZnVuY3Rp
b24iKS4KICAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9k
ZShzdGFydExvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVz
c2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CkBAIC0yMzczLDggKzIzODksMTQgQEAK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGdvdG8gZW5kTWVtYmVyRXhwcmVzc2lvbjsK
ICAgICAgICAgfQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICBiYXNlSXNT
dXBlciA9IGZhbHNlOworI2VuZGlmCiAgICAgfQogZW5kTWVtYmVyRXhwcmVzc2lvbjoKKyNpZiBF
TkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBmYWlsSWZUcnVlKGJhc2VJc1N1cGVyICYmICFu
ZXdDb3VudCwgIkNhbm5vdCByZWZlcmVuY2Ugc3VwZXIiKTsKKyNlbmRpZgogICAgIHdoaWxlIChu
ZXdDb3VudC0tKQogICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVOZXdFeHByKGxvY2F0aW9u
LCBiYXNlLCBleHByZXNzaW9uU3RhcnQsIGxhc3RUb2tlbkVuZFBvc2l0aW9uKCkpOwogICAgIHJl
dHVybiBiYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZp
c2lvbiAxODA2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NDAsNyArNzQwLDcgQEAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUFyZ3VtZW50cyBwYXJzZUFyZ3VtZW50cyhUcmVl
QnVpbGRlciYsIFNwcmVhZE1vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVByb3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCk7CiAg
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VHZXR0ZXJT
ZXR0ZXIoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCwgUHJvcGVydHlOb2RlOjpUeXBlLCB1bnNp
Z25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZ1bmN0aW9uQm9keSBwYXJzZUZ1bmN0aW9uQm9k
eShUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlT
X0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiwg
SlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJzZUZvcm1hbFBhcmFt
ZXRlcnMoVHJlZUJ1aWxkZXImKTsKICAgICBlbnVtIFZhckRlY2xhcmF0aW9uTGlzdENvbnRleHQg
eyBGb3JMb29wQ29udGV4dCwgVmFyRGVjbGFyYXRpb25Db250ZXh0IH07CiAgICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlz
dChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0
ZXJuJiBsYXN0UGF0dGVybiwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwgSlNUZXh0
UG9zaXRpb24mIGlkZW50U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0U3RhcnQsIEpTVGV4dFBv
c2l0aW9uJiBpbml0RW5kLCBWYXJEZWNsYXJhdGlvbkxpc3RDb250ZXh0KTsKQEAgLTc1MCw3ICs3
NTAsNyBAQAogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRy
ZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4oVHJlZUJ1
aWxkZXImLCBEZWNvbnN0cnVjdGlvbktpbmQsIGludCBkZXB0aCA9IDApOwogICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRl
cm4gdHJ5UGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm5FeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7
CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBh
cnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgRnVuY3Rpb25SZXF1aXJlbWVudHMsIEZ1bmN0
aW9uUGFyc2VNb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBQYXJzZXJGdW5jdGlv
bkluZm88VHJlZUJ1aWxkZXI+Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBO
RVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9u
UmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdT
Y29wZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVp
bGRlcj4mKTsKICNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVlQ2xhc3NFeHByZXNzaW9uIHBhcnNlQ2xh
c3MoVHJlZUJ1aWxkZXImLCBGdW5jdGlvblJlcXVpcmVtZW50cyk7CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmgJKHJldmlzaW9uIDE4MDY1
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiBlbnVtIEpTUGFyc2VyU3RyaWN0bmVzcyB7IEpT
UGFyc2VOb3JtYWwsIEpTUGFyc2VCdWlsdGluLCBKU1BhcnNlU3RyaWN0IH07CiBlbnVtIEpTUGFy
c2VyTW9kZSB7IEpTUGFyc2VQcm9ncmFtQ29kZSwgSlNQYXJzZUZ1bmN0aW9uQ29kZSB9OworZW51
bSBjbGFzcyBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCB7IEJhc2UsIE1heWJlRGVyaXZlZCB9Owog
CiBlbnVtIFByb2ZpbGVyTW9kZSB7IFByb2ZpbGVyT2ZmLCBQcm9maWxlck9uIH07CiBlbnVtIERl
YnVnZ2VyTW9kZSB7IERlYnVnZ2VyT2ZmLCBEZWJ1Z2dlck9uIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTgwNjUxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDEwIEBACiAgICAgZW51bSB7IE5vbmVFeHByID0gMCwKICAgICAg
ICAgUmVzb2x2ZUV2YWxFeHByLCBSZXNvbHZlRXhwciwgTnVtYmVyRXhwciwgU3RyaW5nRXhwciwK
ICAgICAgICAgVGhpc0V4cHIsIE51bGxFeHByLCBCb29sRXhwciwgUmVnRXhwRXhwciwgT2JqZWN0
TGl0ZXJhbEV4cHIsCi0gICAgICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBCcmFja2V0RXhw
ciwgRG90RXhwciwgQ2FsbEV4cHIsCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAg
ICAgIENsYXNzRXhwciwgU3VwZXJFeHByLCBTdXBlckJyYWNrZXRFeHByLCBTdXBlckRvdEV4cHIs
CisjZW5kaWYKKyAgICAgICAgRnVuY3Rpb25FeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2Fs
bEV4cHIsCiAgICAgICAgIE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJp
bmFyeUV4cHIsCiAgICAgICAgIENvbmRpdGlvbmFsRXhwciwgQXNzaWdubWVudEV4cHIsIFR5cGVv
ZkV4cHIsCiAgICAgICAgIERlbGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRpbmdEZWNv
bnN0cnVjdGlvbiwKQEAgLTE0Niw2ICsxNDksMTIgQEAKICAgICBFeHByZXNzaW9uVHlwZSBjcmVh
dGVVbmFyeVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0
dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVZvaWQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAg
IEV4cHJlc3Npb25UeXBlIHRoaXNFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJu
IFRoaXNFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgc3VwZXJFeHByKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYpIHsgcmV0dXJuIFRoaXNFeHByOyB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5U
QVgpCisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlU3VwZXJDYWxsKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25UeXBlLCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mKSB7IHJldHVybiBTdXBlckV4cHI7IH0K
KyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVTdXBlckJyYWNrZXRBY2Nlc3MoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYpIHsgcmV0dXJuIFN1cGVyQnJh
Y2tldEV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVTdXBlckRvdEFjY2Vzcyhjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgY29uc3QgSlNUZXh0UG9zaXRp
b24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJikgeyByZXR1
cm4gU3VwZXJEb3RFeHByOyB9CisjZW5kaWYKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZXNv
bHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQpIHsgcmV0
dXJuIFJlc29sdmVFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0ZXJh
bChjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQog
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgaW50KSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQpAQCAtMTY3LDE0ICsxNzYs
MTQgQEAKICAgICBDbGFzc0V4cHJlc3Npb24gY3JlYXRlQ2xhc3NFeHByKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5
cGUsIFByb3BlcnR5TGlzdCwgUHJvcGVydHlMaXN0KSB7IHJldHVybiBDbGFzc0V4cHI7IH0KICNl
bmRpZgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCBpbnQp
IHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGJv
b2wpIHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsgfQorICAgIGludCBjcmVhdGVGdW5jdGlv
bkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
LCBpbnQsIGJvb2wsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kKSB7IHJldHVybiBGdW5jdGlvbkJv
ZHlSZXN1bHQ7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZVN0YXJ0KGludCwgaW50KSB7IH0K
ICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gQXJndW1lbnRzUmVzdWx0OyB9CiAg
ICAgaW50IGNyZWF0ZUFyZ3VtZW50cyhpbnQpIHsgcmV0dXJuIEFyZ3VtZW50c1Jlc3VsdDsgfQog
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVNwcmVhZEV4cHJlc3Npb24oY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFNwcmVhZEV4
cHI7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQpIHsgcmV0dXJuIEFyZ3VtZW50c0xpc3RSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQXJn
dW1lbnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gQXJn
dW1lbnRzTGlzdFJlc3VsdDsgfQotICAgIFByb3BlcnR5IGNyZWF0ZVByb3BlcnR5KGNvbnN0IElk
ZW50aWZpZXIqIG5hbWUsIGludCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wgY29tcGxl
dGUpCisgICAgUHJvcGVydHkgY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciogbmFtZSwg
aW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBjb21wbGV0ZSwgYm9vbCA9IGZhbHNl
KQogICAgIHsKICAgICAgICAgaWYgKCFjb21wbGV0ZSkKICAgICAgICAgICAgIHJldHVybiBQcm9w
ZXJ0eSh0eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTgwNjUxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUz
LDcgKzI1MywxMCBAQAogICAgIG1hY3JvKGlzRmluaXRlKSBcCiAgICAgbWFjcm8oVHlwZUVycm9y
KSBcCiAgICAgbWFjcm8odW5kZWZpbmVkKSBcCi0gICAgbWFjcm8oQnVpbHRpbkxvZykKKyAgICBt
YWNybyhCdWlsdGluTG9nKSBcCisgICAgbWFjcm8oaG9tZU9iamVjdCkgXAorICAgIG1hY3JvKGNv
bnN0cnVjdG9yS2luZElzRGVyaXZlZCkgXAorICAgIG1hY3JvKGlzSW5UZW1wb3JhbERlYWRab25l
KSBcCiAKIG5hbWVzcGFjZSBKU0MgewogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODA2NTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1LDEyIEBACiAgICAgUkVUVVJOKHYxLnRvVGhpcyhleGVj
LCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBTdHJpY3RNb2RlIDogTm90U3Ry
aWN0TW9kZSkpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGhyb3dfdGR6X2Vycm9y
KQoreworICAgIEJFR0lOKCk7CisgICAgVEhST1coY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywg
IkNhbm5vdCBhY2Nlc3MgdW5pbml0aWFsaXplZCB2YXJpYWJsZS4iKSk7Cit9CisKIFNMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9ub3QpCiB7CiAgICAgQkVHSU4oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxODA2
NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nyw3IEBACiBTTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX2VudGVyKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2Nh
bGxlZSk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3RoaXMpOworU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90aHJvd190ZHpfZXJyb3IpOwogU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9ub3QpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9lcSk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25lcSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxODA2NTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAotICAg
IEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJs
ZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxz
ZSwgZmFsc2UpOyB9CisgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7
IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNT
dHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgZmFsc2UpOyB9CiAKICAgICB1bnNpZ25lZCBudW1W
YXJpYWJsZXMoKSB7IHJldHVybiBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+bnVtVmFyaWFibGVz
KCk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX3Vu
bGlua2VkRXZhbENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCk7IH0KQEAgLTUyMiw3
ICs1MjIsNyBAQAogCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAotICAgIEV4ZWN1dGFibGVJbmZv
IGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3Rp
dmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UpOyB9Cisg
ICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRh
YmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZh
bHNlLCBmYWxzZSwgZmFsc2UpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlw
dEV4ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxODA2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3
ICsyNzIsOCBAQAogICAgIG1fc3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0
aGlzLCBTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051
bGwoKSkpOwogICAgIG1fZGVidWdnZXJTY29wZVN0cnVjdHVyZS5zZXQobV92bSwgdGhpcywgRGVi
dWdnZXJTY29wZTo6Y3JlYXRlU3RydWN0dXJlKG1fdm0sIHRoaXMpKTsKICAgICBtX3dpdGhTY29w
ZVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTV2l0aFNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IHRoaXMsIGpzTnVsbCgpKSk7Ci0gICAgCisKKyAgICBtX3RkelZhbHVlLnNldCh2bSwgdGhpcywg
SlNGaW5hbE9iamVjdDo6Y3JlYXRlKHZtLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIHRoaXMsIGpzTnVsbCgpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHko
KSkpKTsKICAgICBtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBK
U0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGpzTnVsbCgpLCBKU0ZpbmFs
T2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSkpOwogICAgIAogICAgIG1fY2FsbGJhY2tG
dW5jdGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRl
U3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CkBAIC02OTYs
NiArNjk3LDcgQEAKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9vYmpjQ2FsbGJh
Y2tGdW5jdGlvblN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
b2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUpOwogI2VuZGlmCisgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fdGR6VmFsdWUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX2Vycm9yU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9jYWxsZWVTdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxODA2NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODksNiArMTg5LDggQEAKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbV9hcHBseUZ1
bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxHZXR0ZXJTZXR0ZXI+IG1fdGhyb3dUeXBlRXJyb3JH
ZXR0ZXJTZXR0ZXI7CiAKKyAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGR6VmFsdWU7CisK
ICAgICBXcml0ZUJhcnJpZXI8T2JqZWN0UHJvdG90eXBlPiBtX29iamVjdFByb3RvdHlwZTsKICAg
ICBXcml0ZUJhcnJpZXI8RnVuY3Rpb25Qcm90b3R5cGU+IG1fZnVuY3Rpb25Qcm90b3R5cGU7CiAg
ICAgV3JpdGVCYXJyaWVyPEFycmF5UHJvdG90eXBlPiBtX2FycmF5UHJvdG90eXBlOwpAQCAtMzk1
LDYgKzM5Nyw4IEBACiAgICAgICAgIHJldHVybiBtX3Rocm93VHlwZUVycm9yR2V0dGVyU2V0dGVy
LmdldCgpOwogICAgIH0KIAorICAgIEpTT2JqZWN0KiB0ZHpWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGR6VmFsdWUuZ2V0KCk7IH0KKwogICAgIE9iamVjdFByb3RvdHlwZSogb2JqZWN0UHJvdG90
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RQcm90b3R5cGUuZ2V0KCk7IH0KICAgICBGdW5j
dGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0
aW9uUHJvdG90eXBlLmdldCgpOyB9CiAgICAgQXJyYXlQcm90b3R5cGUqIGFycmF5UHJvdG90eXBl
KCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVByb3RvdHlwZS5nZXQoKTsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>