<?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>147183</bug_id>
          
          <creation_ts>2015-07-21 20:03:23 -0700</creation_ts>
          <short_desc>Introducing construct ability into JS executables</short_desc>
          <delta_ts>2015-07-22 19:37:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>147133</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1111200</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-21 20:03:23 -0700</bug_when>
    <thetext>Introducing construct ability into JS executables</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111203</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-21 20:03:44 -0700</bug_when>
    <thetext>Let&apos;s decouple the construct ability from the builtin functions.
Currently, builtin functions are not constructor by this patch http://trac.webkit.org/changeset/182995.
In this patch, when the given function is builtin JS function, we recognize it as the non-constructor function.

But, we need to relax it to implement some constructors in builtins JS.
By decoupling the construct ability from whether the function is builtin or not, we can provide

1. constructors written in builtin JS
2. non-constructors in normal JS functions

(1) is needed for Promise constructor. And (2) is needed for method functions and arrow functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111204</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-21 20:09:46 -0700</bug_when>
    <thetext>http://www.ecma-international.org/ecma-262/6.0/#sec-functioncreate
If kind is not Normal, let allocKind be &quot;non-constructor&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111208</commentid>
    <comment_count>3</comment_count>
      <attachid>257243</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-21 20:35:02 -0700</bug_when>
    <thetext>Created attachment 257243
Patch

WIP, the test forthcomming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111314</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-22 09:44:20 -0700</bug_when>
    <thetext>I&apos;ve asked for the clarification in static MethodDefinition and construct ability.
https://esdiscuss.org/topic/propertydefinitionevaluation-for-static-methoddefinition</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111331</commentid>
    <comment_count>5</comment_count>
      <attachid>257280</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-22 10:14:50 -0700</bug_when>
    <thetext>Created attachment 257280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111401</commentid>
    <comment_count>6</comment_count>
      <attachid>257280</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-07-22 13:42:20 -0700</bug_when>
    <thetext>Comment on attachment 257280
Patch

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

r- as i don&apos;t like the subtlety of the current behaviour

&gt; Source/JavaScriptCore/ChangeLog:26
&gt; +        Currenctly, we make the builtin function the constructor when the function name is capitalized.

I think that&apos;s kind of icky -- something we consider doing that i think would be clearer would be to allow builtins defined as

constructor thing(...) { ... }

This would actually allow us (in a later patch) to use builtins to more cleanly define those functions that have distinct construct vs. call behaviours, e.g

constructor thing(...) {}
function thing( ... ) {}

would register the distinct executables for the construct vs. call behavior of &quot;thing&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111407</commentid>
    <comment_count>7</comment_count>
      <attachid>257280</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-22 13:50:41 -0700</bug_when>
    <thetext>Comment on attachment 257280
Patch

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

Thank you for your review.

&gt;&gt; Source/JavaScriptCore/ChangeLog:26
&gt;&gt; +        Currenctly, we make the builtin function the constructor when the function name is capitalized.
&gt; 
&gt; I think that&apos;s kind of icky -- something we consider doing that i think would be clearer would be to allow builtins defined as
&gt; 
&gt; constructor thing(...) { ... }
&gt; 
&gt; This would actually allow us (in a later patch) to use builtins to more cleanly define those functions that have distinct construct vs. call behaviours, e.g
&gt; 
&gt; constructor thing(...) {}
&gt; function thing( ... ) {}
&gt; 
&gt; would register the distinct executables for the construct vs. call behavior of &quot;thing&quot;

That sounds very nice to me. I&apos;ll upload the revised patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111421</commentid>
    <comment_count>8</comment_count>
      <attachid>257294</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-22 14:32:01 -0700</bug_when>
    <thetext>Created attachment 257294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111470</commentid>
    <comment_count>9</comment_count>
      <attachid>257294</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-07-22 16:37:31 -0700</bug_when>
    <thetext>Comment on attachment 257294
Patch

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

r=me with some suggested fixups below.

&gt; Source/JavaScriptCore/builtins/BuiltinExecutables.cpp:63
&gt; +UnlinkedFunctionExecutable* BuiltinExecutables::createExecutableInternal(const SourceCode&amp; source, const Identifier&amp; name, ConstructorKind constructorKind, bool hasConstruct)

Let&apos;s use the enum type (ConstructAbility) for the function argument instead of a bool. Bool is not nice as an argument type because it is often difficult to understand what &quot;f(false)&quot; or &quot;f(true)&quot; means just by reading it.

&gt; Source/JavaScriptCore/builtins/BuiltinExecutables.h:64
&gt; -    UnlinkedFunctionExecutable* createBuiltinExecutable(const SourceCode&amp; code, const Identifier&amp; name)
&gt; +    UnlinkedFunctionExecutable* createBuiltinExecutable(const SourceCode&amp; code, const Identifier&amp; name, bool hasConstruct)
&gt;      {
&gt; -        return createExecutableInternal(code, name, ConstructorKind::None);
&gt; +        return createExecutableInternal(code, name, ConstructorKind::None, hasConstruct);
&gt;      }
&gt; -    UnlinkedFunctionExecutable* createExecutableInternal(const SourceCode&amp;, const Identifier&amp;, ConstructorKind);
&gt; +    UnlinkedFunctionExecutable* createExecutableInternal(const SourceCode&amp;, const Identifier&amp;, ConstructorKind, bool hasConstruct);

Ditto: Let&apos;s use the enum type instead of bool here.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:104
&gt; +    , m_hasConstruct(constructAbility == ConstructAbility::HasConstruct)

Let&apos;s store the enum type instead of a bool.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:103
&gt; +    HasConstruct,
&gt; +    NoConstruct,

Let&apos;s call these &quot;CanConstruct&quot; and &quot;CannotConstruct&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111473</commentid>
    <comment_count>10</comment_count>
      <attachid>257294</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-22 16:54:32 -0700</bug_when>
    <thetext>Comment on attachment 257294
Patch

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

Thank you for your review and suggestions.

&gt;&gt; Source/JavaScriptCore/builtins/BuiltinExecutables.cpp:63
&gt;&gt; +UnlinkedFunctionExecutable* BuiltinExecutables::createExecutableInternal(const SourceCode&amp; source, const Identifier&amp; name, ConstructorKind constructorKind, bool hasConstruct)
&gt; 
&gt; Let&apos;s use the enum type (ConstructAbility) for the function argument instead of a bool. Bool is not nice as an argument type because it is often difficult to understand what &quot;f(false)&quot; or &quot;f(true)&quot; means just by reading it.

OK, so I&apos;ll fix it by,

1. Create the ConstructAbility.h
2. Include the header in JSCBuiltins.cpp generated by the script
3. Use it

&gt;&gt; Source/JavaScriptCore/builtins/BuiltinExecutables.h:64
&gt;&gt; +    UnlinkedFunctionExecutable* createExecutableInternal(const SourceCode&amp;, const Identifier&amp;, ConstructorKind, bool hasConstruct);
&gt; 
&gt; Ditto: Let&apos;s use the enum type instead of bool here.

Fixed.

&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:104
&gt;&gt; +    , m_hasConstruct(constructAbility == ConstructAbility::HasConstruct)
&gt; 
&gt; Let&apos;s store the enum type instead of a bool.

Here, due to the object size limitation, we used m_hasConstruct with the bit field (width 1). This is because the other fields also use the bit field to reduce the UnlinkedFunctionExecutable size.
Just storing the enum type enlarges the object size...
So, instead of storing the enum type, storing the bit and add the getter that converts the boolean to the enum value.

&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:103
&gt;&gt; +    NoConstruct,
&gt; 
&gt; Let&apos;s call these &quot;CanConstruct&quot; and &quot;CannotConstruct&quot;.

Thanks. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111475</commentid>
    <comment_count>11</comment_count>
      <attachid>257294</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-07-22 17:00:52 -0700</bug_when>
    <thetext>Comment on attachment 257294
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:104
&gt;&gt;&gt; +    , m_hasConstruct(constructAbility == ConstructAbility::HasConstruct)
&gt;&gt; 
&gt;&gt; Let&apos;s store the enum type instead of a bool.
&gt; 
&gt; Here, due to the object size limitation, we used m_hasConstruct with the bit field (width 1). This is because the other fields also use the bit field to reduce the UnlinkedFunctionExecutable size.
&gt; Just storing the enum type enlarges the object size...
&gt; So, instead of storing the enum type, storing the bit and add the getter that converts the boolean to the enum value.

you can set an enum to be stored as a bitfield :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111476</commentid>
    <comment_count>12</comment_count>
      <attachid>257294</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-22 17:02:31 -0700</bug_when>
    <thetext>Comment on attachment 257294
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:104
&gt;&gt;&gt;&gt; +    , m_hasConstruct(constructAbility == ConstructAbility::HasConstruct)
&gt;&gt;&gt; 
&gt;&gt;&gt; Let&apos;s store the enum type instead of a bool.
&gt;&gt; 
&gt;&gt; Here, due to the object size limitation, we used m_hasConstruct with the bit field (width 1). This is because the other fields also use the bit field to reduce the UnlinkedFunctionExecutable size.
&gt;&gt; Just storing the enum type enlarges the object size...
&gt;&gt; So, instead of storing the enum type, storing the bit and add the getter that converts the boolean to the enum value.
&gt; 
&gt; you can set an enum to be stored as a bitfield :D

That&apos;s fine! So just storing the enum type directly with the bitfield.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111477</commentid>
    <comment_count>13</comment_count>
      <attachid>257294</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-22 17:02:32 -0700</bug_when>
    <thetext>Comment on attachment 257294
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:104
&gt;&gt;&gt;&gt; +    , m_hasConstruct(constructAbility == ConstructAbility::HasConstruct)
&gt;&gt;&gt; 
&gt;&gt;&gt; Let&apos;s store the enum type instead of a bool.
&gt;&gt; 
&gt;&gt; Here, due to the object size limitation, we used m_hasConstruct with the bit field (width 1). This is because the other fields also use the bit field to reduce the UnlinkedFunctionExecutable size.
&gt;&gt; Just storing the enum type enlarges the object size...
&gt;&gt; So, instead of storing the enum type, storing the bit and add the getter that converts the boolean to the enum value.
&gt; 
&gt; you can set an enum to be stored as a bitfield :D

That&apos;s fine! So just storing the enum type directly with the bitfield.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111530</commentid>
    <comment_count>14</comment_count>
      <attachid>257294</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-22 19:03:07 -0700</bug_when>
    <thetext>Comment on attachment 257294
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:104
&gt;&gt;&gt;&gt;&gt;&gt; +    , m_hasConstruct(constructAbility == ConstructAbility::HasConstruct)
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Let&apos;s store the enum type instead of a bool.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Here, due to the object size limitation, we used m_hasConstruct with the bit field (width 1). This is because the other fields also use the bit field to reduce the UnlinkedFunctionExecutable size.
&gt;&gt;&gt;&gt; Just storing the enum type enlarges the object size...
&gt;&gt;&gt;&gt; So, instead of storing the enum type, storing the bit and add the getter that converts the boolean to the enum value.
&gt;&gt;&gt; 
&gt;&gt;&gt; you can set an enum to be stored as a bitfield :D
&gt;&gt; 
&gt;&gt; That&apos;s fine! So just storing the enum type directly with the bitfield.
&gt; 
&gt; That&apos;s fine! So just storing the enum type directly with the bitfield.

Oops, warned by the style checker, &quot;Please declare enum bitfields as unsigned integral types.&quot;
So just follow the other accessors (like FunctionMode, ConstructorKind etc.), storing enum directly to the bitfield (unsigned) and retrieve it by static_cast in the accessor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111537</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-22 19:37:38 -0700</bug_when>
    <thetext>Committed r187205: &lt;http://trac.webkit.org/changeset/187205&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257243</attachid>
            <date>2015-07-21 20:35:02 -0700</date>
            <delta_ts>2015-07-22 10:14:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147183-20150721203348.patch</filename>
            <type>text/plain</type>
            <size>22945</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YWZiNWUyYzk2MzkwZDdkN2U3MzRkZmUzODk1ZWE0ZjhkZjdhNjgxLi45MTRkYmVmYjBmMTZmMDBj
ZWNkOTNiNmYyNjEwMzg5YzFiZmUyNjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNS0wNy0yMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2luZyBjb25zdHJ1Y3QgYWJpbGl0eSBpbnRvIEpTIGV4
ZWN1dGFibGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDcxODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEZWNvdXBsZSB0aGUgY29uc3RydWN0IGFiaWxpdHkgZnJvbSB0aGUgYnVpbHRpbiBmdW5jdGlv
bnMuCisgICAgICAgIEN1cnJlbnRseSwgYnVpbHRpbiBmdW5jdGlvbnMgYXJlIG5vdCBjb25zdHJ1
Y3RvciBieSByMTgyOTk1LgorICAgICAgICBJbiB0aGF0IHBhdGNoLCB3aGVuIHRoZSBnaXZlbiBm
dW5jdGlvbiBpcyBidWlsdGluIEpTIGZ1bmN0aW9uLCB3ZSByZWNvZ25pemUgaXQgYXMgdGhlIG5v
bi1jb25zdHJ1Y3RvciBmdW5jdGlvbi4KKworICAgICAgICBCdXQsIHdlIG5lZWQgdG8gcmVsYXgg
aXQgdG8gaW1wbGVtZW50IHNvbWUgY29uc3RydWN0b3JzIGluIGJ1aWx0aW5zIEpTLgorICAgICAg
ICBCeSBkZWNvdXBsaW5nIHRoZSBjb25zdHJ1Y3QgYWJpbGl0eSBmcm9tIHdoZXRoZXIgdGhlIGZ1
bmN0aW9uIGlzIGJ1aWx0aW4gb3Igbm90LCB3ZSBjYW4gcHJvdmlkZQorCisgICAgICAgIDEuIGNv
bnN0cnVjdG9ycyB3cml0dGVuIGluIGJ1aWx0aW4gSlMKKyAgICAgICAgMi4gbm9uLWNvbnN0cnVj
dG9ycyBpbiBub3JtYWwgSlMgZnVuY3Rpb25zCisKKyAgICAgICAgKDEpIGlzIG5lZWRlZCBmb3Ig
UHJvbWlzZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgQW5kICgyKSBpcyBuZWVkZWQgZm9yIG1ldGhv
ZCBmdW5jdGlvbnMgYW5kIGFycm93IGZ1bmN0aW9ucy4KKworICAgICAgICBUaGlzIHBhdGNoIGlu
dHJvZHVjZXMgQ29uc3RydWN0QWJpbGl0eSBpbnRvIHRoZSB1bmxpbmtlZCBmdW5jdGlvbiBleGVj
dXRhYmxlcy4KKyAgICAgICAgSXQgaG9sZHMgd2hldGhlciB0aGUgZ2l2ZW4gSlMgZnVuY3Rpb24g
aGFzIHRoZSBjb25zdHJ1Y3QgYWJpbGl0eSBvciBub3QuCisgICAgICAgIEJ5IGxldmVyYWdpbmcg
dGhpcywgdGhpcyBwYXRjaCBkaXNhYmxlcyB0aGUgY29uc3RydWN0IGFiaWxpdHkgb2YgdGhlIG1l
dGhvZCBkZWZpbml0aW9ucywgc2V0dGVycywgZ2V0dGVycyBhbmQgYXJyb3cgZnVuY3Rpb25zLgor
CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6QnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVhdGVEZWZhdWx0Q29uc3RydWN0b3IpOgorICAgICAg
ICAoSlNDOjpCdWlsdGluRXhlY3V0YWJsZXM6OmNyZWF0ZUV4ZWN1dGFibGVJbnRlcm5hbCk6Cisg
ICAgICAgICogYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmg6CisgICAgICAgICogYnVpbHRp
bnMvSXRlcmF0b3IucHJvdG90eXBlLmpzOgorICAgICAgICAoc3ltYm9sSXRlcmF0b3IpOgorICAg
ICAgICAoU3ltYm9sSXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bWFrZUZ1bmN0aW9uKToKKyAg
ICAgICAgKiBnZW5lcmF0ZS1qcy1idWlsdGluczoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENv
ZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
OmluaXQpOgorCiAyMDE1LTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgZml4IGEgbG90IG9mIHRlc3RzLiBOZWVkIHRvIGluaXRpYWxp
emUgV1RGIHRocmVhZGluZyBzb29uZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwCmluZGV4IGJlMjI0ZGQ2NjMzOGY4MmMw
ZTRhMmI4ZmQ4NmU0ZTE2OWFmYWM5MDQuLjY2YzQ4OTQ2NjBkY2Y1YWYzMWEyMDA0NmZhYTRmYTQ1
MjcwMDAyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWls
dGluRXhlY3V0YWJsZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluRXhlY3V0YWJsZXMuY3BwCkBAIC01MiwyMSArNTIsMjIgQEAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIEJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlRGVmYXVsdENvbnN0cnVjdG9y
KENvbnN0cnUKICAgICBjYXNlIENvbnN0cnVjdG9yS2luZDo6Tm9uZToKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDb25zdHJ1Y3RvcktpbmQ6OkJhc2U6Ci0gICAgICAgIHJldHVybiBjcmVhdGVF
eGVjdXRhYmxlSW50ZXJuYWwobWFrZVNvdXJjZShiYXNlQ29uc3RydWN0b3JDb2RlKSwgbmFtZSwg
Y29uc3RydWN0b3JLaW5kKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUV4ZWN1dGFibGVJbnRlcm5h
bChtYWtlU291cmNlKGJhc2VDb25zdHJ1Y3RvckNvZGUpLCBuYW1lLCBjb25zdHJ1Y3RvcktpbmQs
IHRydWUpOwogICAgIGNhc2UgQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkOgotICAgICAgICByZXR1
cm4gY3JlYXRlRXhlY3V0YWJsZUludGVybmFsKG1ha2VTb3VyY2UoZGVyaXZlZENvbnN0cnVjdG9y
Q29kZSksIG5hbWUsIGNvbnN0cnVjdG9yS2luZCk7CisgICAgICAgIHJldHVybiBjcmVhdGVFeGVj
dXRhYmxlSW50ZXJuYWwobWFrZVNvdXJjZShkZXJpdmVkQ29uc3RydWN0b3JDb2RlKSwgbmFtZSwg
Y29uc3RydWN0b3JLaW5kLCB0cnVlKTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBC
dWlsdGluRXhlY3V0YWJsZXM6OmNyZWF0ZUV4ZWN1dGFibGVJbnRlcm5hbChjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIENvbnN0cnVjdG9yS2luZCBjb25z
dHJ1Y3RvcktpbmQpCitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQnVpbHRpbkV4ZWN1dGFi
bGVzOjpjcmVhdGVFeGVjdXRhYmxlSW50ZXJuYWwoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBj
b25zdCBJZGVudGlmaWVyJiBuYW1lLCBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBi
b29sIGhhc0NvbnN0cnVjdCkKIHsKICAgICBKU1RleHRQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZUxh
c3ROZXdsaW5lOwogICAgIFBhcnNlckVycm9yIGVycm9yOwogICAgIGJvb2wgaXNQYXJzaW5nRGVm
YXVsdENvbnN0cnVjdG9yID0gY29uc3RydWN0b3JLaW5kICE9IENvbnN0cnVjdG9yS2luZDo6Tm9u
ZTsKICAgICBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlID0gaXNQYXJzaW5nRGVmYXVs
dENvbnN0cnVjdG9yID8gSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiA6IEpTUGFyc2Vy
QnVpbHRpbk1vZGU6OkJ1aWx0aW47CiAgICAgVW5saW5rZWRGdW5jdGlvbktpbmQga2luZCA9IGlz
UGFyc2luZ0RlZmF1bHRDb25zdHJ1Y3RvciA/IFVubGlua2VkTm9ybWFsRnVuY3Rpb24gOiBVbmxp
bmtlZEJ1aWx0aW5GdW5jdGlvbjsKKyAgICBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxp
dHkgPSBoYXNDb25zdHJ1Y3QgPyBDb25zdHJ1Y3RBYmlsaXR5OjpIYXNDb25zdHJ1Y3QgOiBDb25z
dHJ1Y3RBYmlsaXR5OjpOb0NvbnN0cnVjdDsKICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNv
dXJjZU92ZXJyaWRlID0gaXNQYXJzaW5nRGVmYXVsdENvbnN0cnVjdG9yID8gc291cmNlLnByb3Zp
ZGVyKCkgOiBudWxscHRyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9ncmFtTm9kZT4gcHJvZ3Jh
bSA9IHBhcnNlPFByb2dyYW1Ob2RlPigKICAgICAgICAgJm1fdm0sIHNvdXJjZSwgSWRlbnRpZmll
cigpLCBidWlsdGluTW9kZSwgCkBAIC0xMDMsNyArMTA0LDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIEJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlRXhlY3V0YWJsZUludGVybmFsKGNv
bnN0IFMKICAgICB9CiAgICAgYm9keS0+b3ZlcnJpZGVOYW1lKG5hbWUpOwogICAgIFZhcmlhYmxl
RW52aXJvbm1lbnQgZHVtbXlURFpWYXJpYWJsZXM7Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpj
cmVhdGUoJm1fdm0sIHNvdXJjZSwgYm9keSwga2luZCwgZHVtbXlURFpWYXJpYWJsZXMsIFdURjo6
bW92ZShzb3VyY2VPdmVycmlkZSkpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCZt
X3ZtLCBzb3VyY2UsIGJvZHksIGtpbmQsIGNvbnN0cnVjdEFiaWxpdHksIGR1bW15VERaVmFyaWFi
bGVzLCBXVEY6Om1vdmUoc291cmNlT3ZlcnJpZGUpKTsKICAgICBmdW5jdGlvbkV4ZWN1dGFibGUt
Pm1fbmFtZVZhbHVlLnNldChtX3ZtLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGpzU3RyaW5nKCZtX3Zt
LCBuYW1lLnN0cmluZygpKSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJsZTsKIH0KQEAg
LTExNyw3ICsxMTgsNyBAQCB2b2lkIEJ1aWx0aW5FeGVjdXRhYmxlczo6ZmluYWxpemUoSGFuZGxl
PFVua25vd24+LCB2b2lkKiBjb250ZXh0KQogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIEJ1
aWx0aW5FeGVjdXRhYmxlczo6bmFtZSMjRXhlY3V0YWJsZSgpIFwKIHtcCiAgICAgaWYgKCFtXyMj
bmFtZSMjRXhlY3V0YWJsZSlcCi0gICAgICAgIG1fIyNuYW1lIyNFeGVjdXRhYmxlID0gV2VhazxV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUobV8jI25h
bWUjI1NvdXJjZSwgbV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5mdW5jdGlvbk5h
bWUjI1B1YmxpY05hbWUoKSksIHRoaXMsICZtXyMjbmFtZSMjRXhlY3V0YWJsZSk7XAorICAgICAg
ICBtXyMjbmFtZSMjRXhlY3V0YWJsZSA9IFdlYWs8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+
KGNyZWF0ZUJ1aWx0aW5FeGVjdXRhYmxlKG1fIyNuYW1lIyNTb3VyY2UsIG1fdm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkuZnVuY3Rpb25OYW1lIyNQdWJsaWNOYW1lKCksIHNfIyNuYW1l
IyNIYXNDb25zdHJ1Y3QpLCB0aGlzLCAmbV8jI25hbWUjI0V4ZWN1dGFibGUpO1wKICAgICByZXR1
cm4gbV8jI25hbWUjI0V4ZWN1dGFibGUuZ2V0KCk7XAogfQogSlNDX0ZPUkVBQ0hfQlVJTFRJTihE
RUZJTkVfQlVJTFRJTl9FWEVDVVRBQkxFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuaAppbmRleCBmMGQ1ZjRlNTliZDg5ZTE3NmUw
YmQ1NjA2NGI1MDZjZGExOWI4ZTRmLi45MTUwYTQ0YWJhZDEzMjk2ZDU5NzJlMzNhZDNlZDhkNTUy
MmFlMWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRp
bkV4ZWN1dGFibGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5FeGVjdXRhYmxlcy5oCkBAIC01NywxMSArNTcsMTEgQEAgY29uc3QgU291cmNlQ29kZSYgbmFt
ZSMjU291cmNlKCkgeyByZXR1cm4gbV8jI25hbWUjI1NvdXJjZTsgfQogCiAgICAgVk0mIG1fdm07
CiAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlQnVpbHRpbkV4ZWN1dGFi
bGUoY29uc3QgU291cmNlQ29kZSYgY29kZSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSkKKyAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUoY29uc3Qg
U291cmNlQ29kZSYgY29kZSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgYm9vbCBoYXNDb25zdHJ1
Y3QpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlRXhlY3V0YWJsZUludGVybmFsKGNvZGUs
IG5hbWUsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVFeGVj
dXRhYmxlSW50ZXJuYWwoY29kZSwgbmFtZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBoYXNDb25z
dHJ1Y3QpOwogICAgIH0KLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlRXhl
Y3V0YWJsZUludGVybmFsKGNvbnN0IFNvdXJjZUNvZGUmLCBjb25zdCBJZGVudGlmaWVyJiwgQ29u
c3RydWN0b3JLaW5kKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlRXhl
Y3V0YWJsZUludGVybmFsKGNvbnN0IFNvdXJjZUNvZGUmLCBjb25zdCBJZGVudGlmaWVyJiwgQ29u
c3RydWN0b3JLaW5kLCBib29sIGhhc0NvbnN0cnVjdCk7CiAKICNkZWZpbmUgREVDTEFSRV9CVUlM
VElOX1NPVVJDRV9NRU1CRVJTKG5hbWUsIGZ1bmN0aW9uTmFtZSwgbGVuZ3RoKVwKICAgICBTb3Vy
Y2VDb2RlIG1fIyNuYW1lIyNTb3VyY2U7IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9JdGVyYXRvci5wcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvSXRlcmF0b3IucHJvdG90eXBlLmpzCmluZGV4IGRjNzJhNjQwOGI0MzY3MGE5
MzYxOWZjNjFmMmJlYzMyNzVlMzk1ZDUuLjFlOWI5OGM4NDNkODY3NTVjNDc2MzM3NjU3OWY0OThh
OTIwMDJkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9JdGVy
YXRvci5wcm90b3R5cGUuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0l0
ZXJhdG9yLnByb3RvdHlwZS5qcwpAQCAtMjMsNyArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi1mdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpCitmdW5jdGlvbiBzeW1ib2xJdGVyYXRvcigp
CiB7CiAgICAgJ3VzZSBzdHJpY3QnOwogICAgIHJldHVybiB0aGlzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggZTA1
M2RhZDk3N2IxYTYyNDZlYmRmOTQwNDJjZGMwMzhlNGE5YmE1NC4uZmQ2MDA0NGZhNmYwMTJiY2Mz
OGVlOTI2MjgxYTkwODk5Mjk5NGZlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRp
YyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4mJiBzb3VyY2VPdmVy
cmlkZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSwgVW5saW5rZWRGdW5jdGlvbktpbmQga2luZCwg
VmFyaWFibGVFbnZpcm9ubWVudCYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMpCitVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBSZWZQdHI8U291cmNl
UHJvdmlkZXI+JiYgc291cmNlT3ZlcnJpZGUsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUsIFVubGlu
a2VkRnVuY3Rpb25LaW5kIGtpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSwg
VmFyaWFibGVFbnZpcm9ubWVudCYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMpCiAgICAgOiBCYXNl
KCp2bSwgc3RydWN0dXJlKQogICAgICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2lu
ZmVycmVkTmFtZShub2RlLT5pbmZlcnJlZE5hbWUoKSkKQEAgLTEwMSw2ICsxMDEsNyBAQCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdAogICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChub2RlLT5pc0lu
U3RyaWN0Q29udGV4dCgpKQogICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAg
ICAsIG1faXNCdWlsdGluRnVuY3Rpb24oa2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbikK
KyAgICAsIG1faGFzQ29uc3RydWN0KGNvbnN0cnVjdEFiaWxpdHkgPT0gQ29uc3RydWN0QWJpbGl0
eTo6SGFzQ29uc3RydWN0KQogICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG5vZGUtPmNvbnN0cnVjdG9yS2luZCgpKSkKICAgICAsIG1fZnVuY3Rpb25Nb2RlKG5v
ZGUtPmZ1bmN0aW9uTW9kZSgpKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCA3NWE5NjZjNjhjMjJhOWY3M2ZhZGU1ZjFj
Zjg2ZWQyMzM1ZGVlMGYyLi4zZGFjNDVkOWJlNTY2OGM0N2YzYmViYzBkNWE4ZTI1NTRlYjVhODgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaApAQCAtOTgsNiArOTgsMTEgQEAgZW51bSBVbmxpbmtlZEZ1bmN0aW9uS2luZCB7CiAg
ICAgVW5saW5rZWRCdWlsdGluRnVuY3Rpb24sCiB9OwogCitlbnVtIGNsYXNzIENvbnN0cnVjdEFi
aWxpdHkgeworICAgIEhhc0NvbnN0cnVjdCwKKyAgICBOb0NvbnN0cnVjdCwKK307CisKIGNsYXNz
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiBwdWJs
aWM6CiAgICAgZnJpZW5kIGNsYXNzIEJ1aWx0aW5FeGVjdXRhYmxlczsKQEAgLTEwNywxMCArMTEy
LDEwIEBAIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1t
b3J0YWw7CiAKLSAgICBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShW
TSogdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSwg
VW5saW5rZWRGdW5jdGlvbktpbmQgdW5saW5rZWRGdW5jdGlvbktpbmQsIFZhcmlhYmxlRW52aXJv
bm1lbnQmIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBSZWZQdHI8U291cmNlUHJvdmlkZXI+JiYg
c291cmNlT3ZlcnJpZGUgPSBudWxscHRyKQorICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogY3JlYXRlKFZNKiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlv
bkJvZHlOb2RlKiBub2RlLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCB1bmxpbmtlZEZ1bmN0aW9uS2lu
ZCwgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5LCBWYXJpYWJsZUVudmlyb25tZW50
JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiYmIHNvdXJj
ZU92ZXJyaWRlID0gbnVsbHB0cikKICAgICB7CiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSh2bSwgdm0tPnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdl
dCgpLCBzb3VyY2UsIFdURjo6bW92ZShzb3VyY2VPdmVycmlkZSksIG5vZGUsIHVubGlua2VkRnVu
Y3Rpb25LaW5kLCBwYXJlbnRTY29wZVREWlZhcmlhYmxlcyk7CisgICAgICAgICAgICBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSh2bSwgdm0tPnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlU3Ry
dWN0dXJlLmdldCgpLCBzb3VyY2UsIFdURjo6bW92ZShzb3VyY2VPdmVycmlkZSksIG5vZGUsIHVu
bGlua2VkRnVuY3Rpb25LaW5kLCBjb25zdHJ1Y3RBYmlsaXR5LCBwYXJlbnRTY29wZVREWlZhcmlh
Ymxlcyk7CiAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOwogICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQpAQCAtMTYyLDExICsxNjcsMTIgQEAgY2xhc3MgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1faXNCdWlsdGluRnVuY3Rpb247IH0KKyAgICBib29sIGhhc0NvbnN0cnVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29uc3RydWN0OyB9CiAgICAgYm9vbCBpc0NsYXNzQ29u
c3RydWN0b3JGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0cnVjdG9yS2luZCgpICE9IENv
bnN0cnVjdG9yS2luZDo6Tm9uZTsgfQogICAgIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBh
cmVudFNjb3BlVERaVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gJm1fcGFyZW50U2NvcGVURFpW
YXJpYWJsZXM7IH0KIAogcHJpdmF0ZToKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShW
TSosIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBSZWZQdHI8U291cmNlUHJvdmlkZXI+
JiYgc291cmNlT3ZlcnJpZGUsIEZ1bmN0aW9uQm9keU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2lu
ZCwgVmFyaWFibGVFbnZpcm9ubWVudCYpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIFJlZlB0cjxTb3VyY2VQcm92aWRl
cj4mJiBzb3VyY2VPdmVycmlkZSwgRnVuY3Rpb25Cb2R5Tm9kZSosIFVubGlua2VkRnVuY3Rpb25L
aW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBWYXJpYWJsZUVudmlyb25tZW50Jik7CiAgICAgV3JpdGVC
YXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKICAg
ICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3Q7CiAKQEAgLTE5Myw2ICsxOTksNyBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHVuc2lnbmVkIG1faXNJblN0cmlj
dENvbnRleHQgOiAxOwogICAgIHVuc2lnbmVkIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwog
ICAgIHVuc2lnbmVkIG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOworICAgIHVuc2lnbmVkIG1faGFz
Q29uc3RydWN0IDogMTsKICAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7CiAgICAg
dW5zaWduZWQgbV9mdW5jdGlvbk1vZGUgOiAxOyAvLyBGdW5jdGlvbk1vZGUKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CmluZGV4IDc0OGI5MGUyOWNjYjhmNDkwYjEzODBlNmZmNzNjYjUyYjE2NWUzMGUuLjI2ODliZjE1
MDI4ZGIxZTA1Nzk0YTFiMTk3YjM2YmQzMmFlN2RmODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTcwMSw3
ICs3MDEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIFZhcmlh
YmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJURFo7CiAgICAgICAgICAgICBnZXRWYXJpYWJs
ZXNVbmRlclREWih2YXJpYWJsZXNVbmRlclREWik7Ci0gICAgICAgICAgICByZXR1cm4gVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShtX3ZtLCBtX3Njb3BlTm9kZS0+c291cmNlKCks
IGJvZHksIGlzQnVpbHRpbkZ1bmN0aW9uKCkgPyBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbiA6IFVu
bGlua2VkTm9ybWFsRnVuY3Rpb24sIHZhcmlhYmxlc1VuZGVyVERaKTsKKworICAgICAgICAgICAg
RnVuY3Rpb25QYXJzZU1vZGUgcGFyc2VNb2RlID0gYm9keS0+cGFyc2VNb2RlKCk7CisgICAgICAg
ICAgICBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHkgPSBDb25zdHJ1Y3RBYmlsaXR5
OjpIYXNDb25zdHJ1Y3Q7CisgICAgICAgICAgICBpZiAocGFyc2VNb2RlID09IEdldHRlck1vZGUg
fHwgcGFyc2VNb2RlID09IFNldHRlck1vZGUgfHwgcGFyc2VNb2RlID09IEFycm93RnVuY3Rpb25N
b2RlIHx8IChwYXJzZU1vZGUgPT0gTWV0aG9kTW9kZSAmJiBib2R5LT5jb25zdHJ1Y3RvcktpbmQo
KSA9PSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUpKQorICAgICAgICAgICAgICAgIGNvbnN0cnVjdEFi
aWxpdHkgPSBDb25zdHJ1Y3RBYmlsaXR5OjpOb0NvbnN0cnVjdDsKKworICAgICAgICAgICAgcmV0
dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUobV92bSwgbV9zY29wZU5vZGUt
PnNvdXJjZSgpLCBib2R5LCBpc0J1aWx0aW5GdW5jdGlvbigpID8gVW5saW5rZWRCdWlsdGluRnVu
Y3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBjb25zdHJ1Y3RBYmlsaXR5LCB2YXJpYWJs
ZXNVbmRlclREWik7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGdldFZhcmlhYmxlc1VuZGVy
VERaKFZhcmlhYmxlRW52aXJvbm1lbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0ZS1qcy1idWlsdGlucyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
ZS1qcy1idWlsdGlucwppbmRleCA0NDZiNDk3MWVlMjQ0NDJlNTU5NDc3N2UzMTQ2YmM4ZDUwYjdj
Zjg5Li4xNzBiOWNiODM0MmI3MzA1MjEyYWEwMjM3MTQ1ZThlMTY0YmRmMmZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdGUtanMtYnVpbHRpbnMKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRlLWpzLWJ1aWx0aW5zCkBAIC0yMTAsNiArMjEwLDcgQEAg
Zm9yIChvYmplY3ROYW1lLCBmdW5jdGlvbnMpIGluIGJ1aWx0aW5zOgogICAgICAgICBjb2RlUmVm
ZXJlbmNlcy5hcHBlbmQoKG1hbmdsZWROYW1lLCBuYW1lLCBpbXBsZW1lbnRhdGlvbikpCiAgICAg
ICAgIGJ1aWx0aW5zSGVhZGVyLndyaXRlKCJleHRlcm4gY29uc3QgY2hhciogc18lcztcbiIgJSBt
YW5nbGVkTmFtZSkKICAgICAgICAgYnVpbHRpbnNIZWFkZXIud3JpdGUoImV4dGVybiBjb25zdCBp
bnQgc18lc0xlbmd0aDtcbiIgJSBtYW5nbGVkTmFtZSkKKyAgICAgICAgYnVpbHRpbnNIZWFkZXIu
d3JpdGUoImV4dGVybiBjb25zdCBib29sIHNfJXNIYXNDb25zdHJ1Y3Q7XG4iICUgbWFuZ2xlZE5h
bWUpCiAgICAgYnVpbHRpbnNIZWFkZXIud3JpdGUoIlxuIikKICAgICBidWlsdGluc0hlYWRlci53
cml0ZSgiI2RlZmluZSBKU0NfRk9SRUFDSF8lc19CVUlMVElOKG1hY3JvKSBcXFxuIiAlIG9iamVj
dE5hbWUucmVwbGFjZSgiLiIsICJfIikudXBwZXIoKSkKICAgICBmb3IgKG5hbWUsIGltcGxlbWVu
dGF0aW9uLCBhcmd1bWVudHMpIGluIGZ1bmN0aW9uczoKQEAgLTI3MCw2ICsyNzEsMTAgQEAgZm9y
IChjb2RlUmVmZXJlbmNlLCBuYW1lLCBzb3VyY2UpIGluIGNvZGVSZWZlcmVuY2VzOgogICAgICAg
ICBzb3VyY2UgPSBzb3VyY2UgKyAoIiAgICBcIiVzXFxuXCIgXFxcbiIgJSBsaW5lKQogICAgIGJ1
aWx0aW5zSW1wbGVtZW50YXRpb24ud3JpdGUoImNvbnN0IGNoYXIqIHNfJXMgPVxuJXM7XG5cbiIg
JSAoY29kZVJlZmVyZW5jZSwgc291cmNlKSkKICAgICBidWlsdGluc0ltcGxlbWVudGF0aW9uLndy
aXRlKCJjb25zdCBpbnQgc18lc0xlbmd0aCA9ICVkO1xuXG4iICUgKGNvZGVSZWZlcmVuY2UsIHNv
dXJjZUxlbmd0aCArIDEpKSAjICsgMSBmb3IgXG4KKyAgICBoYXNDb25zdHJ1Y3QgPSAiZmFsc2Ui
CisgICAgaWYgbmFtZVswXS5pc3VwcGVyKCk6CisgICAgICAgIGhhc0NvbnN0cnVjdCA9ICJ0cnVl
IgorICAgIGJ1aWx0aW5zSW1wbGVtZW50YXRpb24ud3JpdGUoImNvbnN0IGJvb2wgc18lc0hhc0Nv
bnN0cnVjdCA9ICVzO1xuXG4iICUgKGNvZGVSZWZlcmVuY2UsIGhhc0NvbnN0cnVjdCkpICMgKyAx
IGZvciBcbgogCiBidWlsdGluc0ltcGxlbWVudGF0aW9uLndyaXRlKCIiIgogI2RlZmluZSBKU0Nf
REVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKGNvZGVOYW1lLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50
Q291bnQpIFxcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApp
bmRleCBlODRlOTM0Mjk3MWNiZDUxZmZiNjk1NzI5ZThmZTkyMmI2NGMwZDI5Li5mMWUzNDQ1ZDc3
N2E3ZWIzMjVmMTA5ZTcxM2EyZGY2ZTk0NzkxZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTc4Myw3ICs3ODMsNyBAQCBpbmxpbmUgY2hhciog
bGlua0ZvcigKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxl
KTsKIAotICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmlz
QnVpbHRpbkZ1bmN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgIWZ1bmN0
aW9uRXhlY3V0YWJsZS0+aGFzQ29uc3RydWN0KCkpIHsKICAgICAgICAgICAgIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2Fs
bGVlKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIH0KQEAgLTg0OCw3ICs4NDgsNyBAQCBpbmxp
bmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5jdGlvbigKICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1
dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSk7CiAKLSAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVj
dXRhYmxlLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7CisgICAgICAgIGlmICghaXNDYWxsKGtpbmQp
ICYmICFmdW5jdGlvbkV4ZWN1dGFibGUtPmhhc0NvbnN0cnVjdCgpKSB7CiAgICAgICAgICAgICBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9y
KGV4ZWMsIGZ1bmN0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDE5MzRlNTcwNDM4
ZTNjYmVjOWE0OGExNmY3MzBkNDUzZWVmYjY1YjQuLjkwMWI2MTU0ODdjN2I3ZDQxNTgzNTkzNTUw
MTY4OTAzYzViZTAyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcApAQCAtMTEwNCw3ICsxMTA0LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBzZXRVcENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBJbnN0cnVjdGlvbiogcGMsIENv
ZGUKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1
dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIAot
ICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmlzQnVpbHRp
bkZ1bmN0aW9uKCkpCisgICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmICFmdW5jdGlvbkV4ZWN1
dGFibGUtPmhhc0NvbnN0cnVjdCgpKQogICAgICAgICAgICAgTExJTlRfQ0FMTF9USFJPVyhleGVj
LCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKIAogICAgICAgICBK
U09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24o
ZXhlY0NhbGxlZSwgY2FsbGVlLCBzY29wZSwga2luZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29kZUNhY2hlLmNwcAppbmRleCAwMDAxZDVjNDQyMmJhYzU5ZjdmMDhmZDQ4MWZk
NTM2OGViZGU3MTM1Li44N2JjYTYxNTg0ZTQxNjAyMWM0YWFkYjJiMmI3YjQ4ZTg5ODU5ZDk1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKQEAgLTE3NCw3
ICsxNzQsNyBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ29kZUNhY2hlOjpnZXRGdW5j
dGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShWTSYgdgogICAgIGJvZHktPnNldEVuZFBvc2l0
aW9uKHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUpOwogICAgIC8vIFRoZSBGdW5jdGlvbiBjb25z
dHJ1Y3RvciBvbmx5IGhhcyBhY2Nlc3MgdG8gZ2xvYmFsIHZhcmlhYmxlcywgc28gbm8gdmFyaWFi
bGVzIHdpbGwgYmUgdW5kZXIgVERaLgogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgZW1wdHlURFpW
YXJpYWJsZXM7Ci0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0
YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoJnZtLCBzb3VyY2UsIGJv
ZHksIFVubGlua2VkTm9ybWFsRnVuY3Rpb24sIGVtcHR5VERaVmFyaWFibGVzKTsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgmdm0sIHNvdXJjZSwgYm9keSwgVW5saW5rZWROb3JtYWxG
dW5jdGlvbiwgQ29uc3RydWN0QWJpbGl0eTo6SGFzQ29uc3RydWN0LCBlbXB0eVREWlZhcmlhYmxl
cyk7CiAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQodm0sIGZ1bmN0aW9u
RXhlY3V0YWJsZSwganNTdHJpbmcoJnZtLCBuYW1lLnN0cmluZygpKSk7CiAKICAgICBtX3NvdXJj
ZUNvZGUuYWRkQ2FjaGUoa2V5LCBTb3VyY2VDb2RlVmFsdWUodm0sIGZ1bmN0aW9uRXhlY3V0YWJs
ZSwgbV9zb3VyY2VDb2RlLmFnZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCBmZGE1Mjg5NjU5YzQ4N2Y0ZmZiODRkNDQw
OGQ4ZjBjYTE1MjZkMjBmLi45YjkzOTg3YjFiMTZkYjUzZWM5NWE0Mzc2MTcxYjdjZGYwYzk1M2Jh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKQEAgLTI1Myw3ICsyNTMsNiBAQAogCiAjZGVmaW5lIEpTQ19DT01NT05fUFJJVkFURV9J
REVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUobWFjcm8pIFwKICAgICBKU0NfQ09NTU9OX0JZ
VEVDT0RFX0lOVFJJTlNJQ1NfRUFDSF9OQU1FKG1hY3JvKSBcCi0gICAgbWFjcm8oc3ltYm9sSXRl
cmF0b3IpIFwKICAgICBtYWNybyhpdGVyYXRlZE9iamVjdCkgXAogICAgIG1hY3JvKGFycmF5SXRl
cmF0b3JOZXh0SW5kZXgpIFwKICAgICBtYWNybyhhcnJheUl0ZXJhdGlvbktpbmQpIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCA4ZDg3MTA3YTU4NjNl
ZGZmNDVhMmUzZDMzZDE1ZWE4ZTQ0YzI1NTIyLi5hZDUyZDJiNmI1ZDc5YmRmMWFhNjhkMmY2MzZk
NDg3Y2E2NGJmNDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCkBAIC02MzAsNiArNjMwLDcgQEAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlIGZpbmFsIDog
cHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewogICAgICAgICAKICAgICBGdW5jdGlvbk1vZGUgZnVu
Y3Rpb25Nb2RlKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgp
OyB9CiAgICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRFeGVjdXRhYmxlLT5pc0J1aWx0aW5GdW5jdGlvbigpOyB9CisgICAgYm9vbCBoYXNDb25zdHJ1
Y3QoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+aGFzQ29uc3RydWN0KCk7
IH0KICAgICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZEV4ZWN1dGFibGUtPmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCk7IH0KICAg
ICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUt
Pm5hbWUoKTsgfQogICAgIGNvbnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJu
IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5pbmZlcnJlZE5hbWUoKTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCAxYjhjNDA3ZWMzZDQ5NDliNjA2
ZWM5NWI5YWM5YjRlMmRmYzY4MTJmLi44MDI1MTg2OWEwZTViYTIxODNlNzJjMTI1MzM4M2YwNjVj
MzM3Yzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cApAQCAtNTUyLDE0ICs1NTIsMTYgQEAgQ29uc3RydWN0VHlwZSBKU0Z1bmN0aW9uOjpnZXRDb25z
dHJ1Y3REYXRhKEpTQ2VsbCogY2VsbCwgQ29uc3RydWN0RGF0YSYgY29uc3RydWMKIHsKICAgICBK
U0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsKIAotICAg
IGlmICh0aGlzT2JqZWN0LT5pc0J1aWx0aW5GdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gQ29u
c3RydWN0VHlwZU5vbmU7Ci0KICAgICBpZiAodGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24oKSkg
ewogICAgICAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IHRoaXNPYmplY3QtPm5h
dGl2ZUNvbnN0cnVjdG9yKCk7CiAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKICAg
ICB9Ci0gICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUgPSB0aGlzT2JqZWN0
LT5qc0V4ZWN1dGFibGUoKTsKKworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVj
dXRhYmxlID0gdGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCk7CisgICAgaWYgKCFmdW5jdGlvbkV4
ZWN1dGFibGUtPmhhc0NvbnN0cnVjdCgpKQorICAgICAgICByZXR1cm4gQ29uc3RydWN0VHlwZU5v
bmU7CisKKyAgICBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZSA9IGZ1bmN0aW9u
RXhlY3V0YWJsZTsKICAgICBjb25zdHJ1Y3REYXRhLmpzLnNjb3BlID0gdGhpc09iamVjdC0+c2Nv
cGUoKTsKICAgICByZXR1cm4gQ29uc3RydWN0VHlwZUpTOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDQxOWMxYjI3Nzk5NDI4
YjZmNmFmNTk1ODIyMTlkZjliM2YxNTE4M2YuLjA0M2U5Mzg5Y2VjNjkwNTg5YTU2YTM4YWM1YjE4
OTYzZjFmZmJhYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKQEAgLTUwNiw3ICs1MDYsNyBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+IGpzTmFtZSwgbG93ZXJOYW1lICMjIENvbnN0cnVj
dAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YXJyYXlJdGVy
YXRpb25LaW5kS2V5UHJpdmF0ZU5hbWUsIGpzTnVtYmVyKEFycmF5SXRlcmF0ZUtleSksIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KHZtLnByb3BlcnR5TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZFZhbHVlUHJpdmF0ZU5hbWUsIGpz
TnVtYmVyKEFycmF5SXRlcmF0ZVZhbHVlKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YXJyYXlJ
dGVyYXRpb25LaW5kS2V5VmFsdWVQcml2YXRlTmFtZSwganNOdW1iZXIoQXJyYXlJdGVyYXRlS2V5
VmFsdWUpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCi0gICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5zeW1ib2xJdGVyYXRvclByaXZhdGVOYW1l
LCBTeW1ib2w6OmNyZWF0ZSh2bSwgc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCY+KCp2bS5wcm9wZXJ0
eU5hbWVzLT5pdGVyYXRvclN5bWJvbC5pbXBsKCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkuc3ltYm9sSXRlcmF0b3JQcml2YXRlTmFtZSgpLCBTeW1ib2w6OmNyZWF0
ZSh2bSwgc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCY+KCp2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRv
clN5bWJvbC5pbXBsKCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogI2lm
IEVOQUJMRShQUk9NSVNFUykKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5
TmFtZXMtPlByb21pc2VQcml2YXRlTmFtZSwgbV9wcm9taXNlQ29uc3RydWN0b3IuZ2V0KCksIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKHZtLnByb3BlcnR5TmFtZXMtPnByb21pc2VQZW5kaW5nUHJpdmF0ZU5hbWUsIGpzTnVtYmVy
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb21pc2U6OlN0YXR1czo6UGVuZGluZykpLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257280</attachid>
            <date>2015-07-22 10:14:50 -0700</date>
            <delta_ts>2015-07-22 14:31:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147183-20150722101336.patch</filename>
            <type>text/plain</type>
            <size>28261</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YWZiNWUyYzk2MzkwZDdkN2U3MzRkZmUzODk1ZWE0ZjhkZjdhNjgxLi42Njc1YjE3ZmQ3N2YyMjhm
NzJlYzUwYmQ1YmYyYTAzMTc4M2I3MWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAxNS0wNy0yMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2luZyBjb25zdHJ1Y3QgYWJpbGl0eSBpbnRvIEpTIGV4
ZWN1dGFibGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDcxODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEZWNvdXBsZSB0aGUgY29uc3RydWN0IGFiaWxpdHkgZnJvbSB0aGUgYnVpbHRpbiBmdW5jdGlv
bnMuCisgICAgICAgIEN1cnJlbnRseSwgYWxsIGJ1aWx0aW4gZnVuY3Rpb25zIGFyZSBub3QgY29u
c3RydWN0b3JzIGFmdGVyIHIxODI5OTUuCisgICAgICAgIEluIHRoYXQgcGF0Y2gsIHdoZW4gdGhl
IGdpdmVuIGZ1bmN0aW9uIGlzIGJ1aWx0aW4gSlMgZnVuY3Rpb24sIHdlIHJlY29nbml6ZSBpdCBh
cyB0aGUgbm9uLWNvbnN0cnVjdG9yIGZ1bmN0aW9uLgorCisgICAgICAgIEJ1dCwgd2UgbmVlZCB0
byByZWxheCBpdCB0byBpbXBsZW1lbnQgc29tZSBjb25zdHJ1Y3RvcnMgaW4gYnVpbHRpbnMgSlMu
CisgICAgICAgIEJ5IGRlY291cGxpbmcgdGhlIGNvbnN0cnVjdCBhYmlsaXR5IGZyb20gd2hldGhl
ciB0aGUgZnVuY3Rpb24gaXMgYnVpbHRpbiBvciBub3QsIHdlIGNhbiBwcm92aWRlCisKKyAgICAg
ICAgMS4gY29uc3RydWN0b3JzIHdyaXR0ZW4gaW4gYnVpbHRpbiBKUworICAgICAgICAyLiBub24t
Y29uc3RydWN0b3JzIGluIG5vcm1hbCBKUyBmdW5jdGlvbnMKKworICAgICAgICAoMSkgaXMgbmVl
ZGVkIGZvciBQcm9taXNlIGNvbnN0cnVjdG9yLgorICAgICAgICBBbmQgKDIpIGlzIG5lZWRlZCBm
b3IgbWV0aG9kIGZ1bmN0aW9ucyBhbmQgYXJyb3cgZnVuY3Rpb25zLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaW50cm9kdWNlcyBDb25zdHJ1Y3RBYmlsaXR5IGludG8gdGhlIHVubGlua2VkIGZ1bmN0
aW9uIGV4ZWN1dGFibGVzLgorICAgICAgICBJdCBob2xkcyB3aGV0aGVyIHRoZSBnaXZlbiBKUyBm
dW5jdGlvbiBoYXMgdGhlIGNvbnN0cnVjdCBhYmlsaXR5IG9yIG5vdC4KKyAgICAgICAgQnkgbGV2
ZXJhZ2luZyB0aGlzLCB0aGlzIHBhdGNoIGRpc2FibGVzIHRoZSBjb25zdHJ1Y3QgYWJpbGl0eSBv
ZiB0aGUgbWV0aG9kIGRlZmluaXRpb25zLCBzZXR0ZXJzLCBnZXR0ZXJzIGFuZCBhcnJvdyBmdW5j
dGlvbnMuCisKKyAgICAgICAgQW5kIGF0IHRoZSBzYW1lIHRpbWUsIHRoaXMgcGF0Y2ggaW50cm9k
dWNlcyB0aGUgY29uc3RydWN0IGFiaWxpdHkgaW50byBidWlsdGluIEpTIGZ1bmN0aW9ucy4KKyAg
ICAgICAgQ3VycmVuY3RseSwgd2UgbWFrZSB0aGUgYnVpbHRpbiBmdW5jdGlvbiB0aGUgY29uc3Ry
dWN0b3Igd2hlbiB0aGUgZnVuY3Rpb24gbmFtZSBpcyBjYXBpdGFsaXplZC4KKworICAgICAgICAq
IGJ1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHA6CisgICAgICAgIChKU0M6OkJ1aWx0aW5F
eGVjdXRhYmxlczo6Y3JlYXRlRGVmYXVsdENvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6QnVp
bHRpbkV4ZWN1dGFibGVzOjpjcmVhdGVFeGVjdXRhYmxlSW50ZXJuYWwpOgorICAgICAgICAqIGJ1
aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5oOgorICAgICAgICAqIGJ1aWx0aW5zL0l0ZXJhdG9y
LnByb3RvdHlwZS5qczoKKyAgICAgICAgKHN5bWJvbEl0ZXJhdG9yKToKKyAgICAgICAgKFN5bWJv
bEl0ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Om1ha2VGdW5jdGlvbik6CisgICAgICAgICogZ2Vu
ZXJhdGUtanMtYnVpbHRpbnM6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNl
dFVwQ2FsbCk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJv
bUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAg
ICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OmluaXQpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9ub24tY29uc3RydWN0b3Jz
LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZFRocm93KToKKyAgICAgICAgKC5wcm90b3R5cGUu
bWV0aG9kKToKKyAgICAgICAgKC5wcm90b3R5cGUuZ2V0IGdldHRlcik6CisgICAgICAgICgucHJv
dG90eXBlLnNldCBzZXR0ZXIpOgorICAgICAgICAoLm1ldGhvZCk6CisgICAgICAgICguZ2V0IHNo
b3VsZFRocm93KToKKyAgICAgICAgKC5zZXQgc2hvdWxkVGhyb3cpOgorICAgICAgICAoc2V0IHZh
ci50ZXN0LmdldCBnZXR0ZXIpOgorICAgICAgICAoc2V0IHZhci50ZXN0LnNldCBzZXR0ZXIpOgor
ICAgICAgICAoc2V0IHZhci50ZXN0Lm5vcm1hbCk6CisgICAgICAgICguc2V0IHZhcik6CisgICAg
ICAgICguc2V0IG5ldyk6CisKIDIwMTUtMDctMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYSBsb3Qgb2YgdGVzdHMuIE5lZWQgdG8g
aW5pdGlhbGl6ZSBXVEYgdGhyZWFkaW5nIHNvb25lci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAKaW5kZXggYmUyMjRkZDY2
MzM4ZjgyYzBlNGEyYjhmZDg2ZTRlMTY5YWZhYzkwNC4uNjZjNDg5NDY2MGRjZjVhZjMxYTIwMDQ2
ZmFhNGZhNDUyNzAwMDJmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAKQEAgLTUyLDIxICs1MiwyMiBAQCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogQnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVhdGVEZWZhdWx0Q29u
c3RydWN0b3IoQ29uc3RydQogICAgIGNhc2UgQ29uc3RydWN0b3JLaW5kOjpOb25lOgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENvbnN0cnVjdG9yS2luZDo6QmFzZToKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZUV4ZWN1dGFibGVJbnRlcm5hbChtYWtlU291cmNlKGJhc2VDb25zdHJ1Y3RvckNvZGUp
LCBuYW1lLCBjb25zdHJ1Y3RvcktpbmQpOworICAgICAgICByZXR1cm4gY3JlYXRlRXhlY3V0YWJs
ZUludGVybmFsKG1ha2VTb3VyY2UoYmFzZUNvbnN0cnVjdG9yQ29kZSksIG5hbWUsIGNvbnN0cnVj
dG9yS2luZCwgdHJ1ZSk7CiAgICAgY2FzZSBDb25zdHJ1Y3RvcktpbmQ6OkRlcml2ZWQ6Ci0gICAg
ICAgIHJldHVybiBjcmVhdGVFeGVjdXRhYmxlSW50ZXJuYWwobWFrZVNvdXJjZShkZXJpdmVkQ29u
c3RydWN0b3JDb2RlKSwgbmFtZSwgY29uc3RydWN0b3JLaW5kKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUV4ZWN1dGFibGVJbnRlcm5hbChtYWtlU291cmNlKGRlcml2ZWRDb25zdHJ1Y3RvckNvZGUp
LCBuYW1lLCBjb25zdHJ1Y3RvcktpbmQsIHRydWUpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIEJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlRXhlY3V0YWJsZUludGVybmFsKGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQ29uc3RydWN0b3JL
aW5kIGNvbnN0cnVjdG9yS2luZCkKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWlsdGlu
RXhlY3V0YWJsZXM6OmNyZWF0ZUV4ZWN1dGFibGVJbnRlcm5hbChjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3Rv
cktpbmQsIGJvb2wgaGFzQ29uc3RydWN0KQogewogICAgIEpTVGV4dFBvc2l0aW9uIHBvc2l0aW9u
QmVmb3JlTGFzdE5ld2xpbmU7CiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgYm9vbCBpc1Bh
cnNpbmdEZWZhdWx0Q29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcktpbmQgIT0gQ29uc3RydWN0b3JL
aW5kOjpOb25lOwogICAgIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUgPSBpc1BhcnNp
bmdEZWZhdWx0Q29uc3RydWN0b3IgPyBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluIDog
SlNQYXJzZXJCdWlsdGluTW9kZTo6QnVpbHRpbjsKICAgICBVbmxpbmtlZEZ1bmN0aW9uS2luZCBr
aW5kID0gaXNQYXJzaW5nRGVmYXVsdENvbnN0cnVjdG9yID8gVW5saW5rZWROb3JtYWxGdW5jdGlv
biA6IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uOworICAgIENvbnN0cnVjdEFiaWxpdHkgY29uc3Ry
dWN0QWJpbGl0eSA9IGhhc0NvbnN0cnVjdCA/IENvbnN0cnVjdEFiaWxpdHk6Okhhc0NvbnN0cnVj
dCA6IENvbnN0cnVjdEFiaWxpdHk6Ok5vQ29uc3RydWN0OwogICAgIFJlZlB0cjxTb3VyY2VQcm92
aWRlcj4gc291cmNlT3ZlcnJpZGUgPSBpc1BhcnNpbmdEZWZhdWx0Q29uc3RydWN0b3IgPyBzb3Vy
Y2UucHJvdmlkZXIoKSA6IG51bGxwdHI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2dyYW1Ob2Rl
PiBwcm9ncmFtID0gcGFyc2U8UHJvZ3JhbU5vZGU+KAogICAgICAgICAmbV92bSwgc291cmNlLCBJ
ZGVudGlmaWVyKCksIGJ1aWx0aW5Nb2RlLCAKQEAgLTEwMyw3ICsxMDQsNyBAQCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogQnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVhdGVFeGVjdXRhYmxlSW50
ZXJuYWwoY29uc3QgUwogICAgIH0KICAgICBib2R5LT5vdmVycmlkZU5hbWUobmFtZSk7CiAgICAg
VmFyaWFibGVFbnZpcm9ubWVudCBkdW1teVREWlZhcmlhYmxlczsKLSAgICBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmNyZWF0ZSgmbV92bSwgc291cmNlLCBib2R5LCBraW5kLCBkdW1teVREWlZhcmlhYmxl
cywgV1RGOjptb3ZlKHNvdXJjZU92ZXJyaWRlKSk7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpj
cmVhdGUoJm1fdm0sIHNvdXJjZSwgYm9keSwga2luZCwgY29uc3RydWN0QWJpbGl0eSwgZHVtbXlU
RFpWYXJpYWJsZXMsIFdURjo6bW92ZShzb3VyY2VPdmVycmlkZSkpOwogICAgIGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+bV9uYW1lVmFsdWUuc2V0KG1fdm0sIGZ1bmN0aW9uRXhlY3V0YWJsZSwganNTdHJp
bmcoJm1fdm0sIG5hbWUuc3RyaW5nKCkpKTsKICAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRhYmxl
OwogfQpAQCAtMTE3LDcgKzExOCw3IEBAIHZvaWQgQnVpbHRpbkV4ZWN1dGFibGVzOjpmaW5hbGl6
ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpCiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogQnVpbHRpbkV4ZWN1dGFibGVzOjpuYW1lIyNFeGVjdXRhYmxlKCkgXAoge1wKICAgICBp
ZiAoIW1fIyNuYW1lIyNFeGVjdXRhYmxlKVwKLSAgICAgICAgbV8jI25hbWUjI0V4ZWN1dGFibGUg
PSBXZWFrPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihjcmVhdGVCdWlsdGluRXhlY3V0YWJs
ZShtXyMjbmFtZSMjU291cmNlLCBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmZ1
bmN0aW9uTmFtZSMjUHVibGljTmFtZSgpKSwgdGhpcywgJm1fIyNuYW1lIyNFeGVjdXRhYmxlKTtc
CisgICAgICAgIG1fIyNuYW1lIyNFeGVjdXRhYmxlID0gV2VhazxVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZT4oY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUobV8jI25hbWUjI1NvdXJjZSwgbV92bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5mdW5jdGlvbk5hbWUjI1B1YmxpY05hbWUoKSwg
c18jI25hbWUjI0hhc0NvbnN0cnVjdCksIHRoaXMsICZtXyMjbmFtZSMjRXhlY3V0YWJsZSk7XAog
ICAgIHJldHVybiBtXyMjbmFtZSMjRXhlY3V0YWJsZS5nZXQoKTtcCiB9CiBKU0NfRk9SRUFDSF9C
VUlMVElOKERFRklORV9CVUlMVElOX0VYRUNVVEFCTEVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5oCmluZGV4IGYwZDVmNGU1OWJk
ODllMTc2ZTBiZDU2MDY0YjUwNmNkYTE5YjhlNGYuLjkxNTBhNDRhYmFkMTMyOTZkNTk3MmUzM2Fk
M2VkOGQ1NTIyYWUxZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9CdWlsdGluRXhlY3V0YWJsZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvQnVpbHRpbkV4ZWN1dGFibGVzLmgKQEAgLTU3LDExICs1NywxMSBAQCBjb25zdCBTb3VyY2VD
b2RlJiBuYW1lIyNTb3VyY2UoKSB7IHJldHVybiBtXyMjbmFtZSMjU291cmNlOyB9CiAKICAgICBW
TSYgbV92bTsKIAotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGVCdWlsdGlu
RXhlY3V0YWJsZShjb25zdCBTb3VyY2VDb2RlJiBjb2RlLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
KQorICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGVCdWlsdGluRXhlY3V0YWJs
ZShjb25zdCBTb3VyY2VDb2RlJiBjb2RlLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBib29sIGhh
c0NvbnN0cnVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVFeGVjdXRhYmxlSW50ZXJu
YWwoY29kZSwgbmFtZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUV4ZWN1dGFibGVJbnRlcm5hbChjb2RlLCBuYW1lLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUs
IGhhc0NvbnN0cnVjdCk7CiAgICAgfQotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBj
cmVhdGVFeGVjdXRhYmxlSW50ZXJuYWwoY29uc3QgU291cmNlQ29kZSYsIGNvbnN0IElkZW50aWZp
ZXImLCBDb25zdHJ1Y3RvcktpbmQpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBj
cmVhdGVFeGVjdXRhYmxlSW50ZXJuYWwoY29uc3QgU291cmNlQ29kZSYsIGNvbnN0IElkZW50aWZp
ZXImLCBDb25zdHJ1Y3RvcktpbmQsIGJvb2wgaGFzQ29uc3RydWN0KTsKIAogI2RlZmluZSBERUNM
QVJFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMobmFtZSwgZnVuY3Rpb25OYW1lLCBsZW5ndGgpXAog
ICAgIFNvdXJjZUNvZGUgbV8jI25hbWUjI1NvdXJjZTsgXApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0l0ZXJhdG9yLnByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9JdGVyYXRvci5wcm90b3R5cGUuanMKaW5kZXggZGM3MmE2NDA4
YjQzNjcwYTkzNjE5ZmM2MWYyYmVjMzI3NWUzOTVkNS4uMWU5Yjk4Yzg0M2Q4Njc1NWM0NzYzMzc2
NTc5ZjQ5OGE5MjAwMmRhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0l0ZXJhdG9yLnByb3RvdHlwZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVp
bHRpbnMvSXRlcmF0b3IucHJvdG90eXBlLmpzCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLWZ1bmN0aW9uIFN5bWJvbEl0ZXJhdG9yKCkKK2Z1bmN0aW9uIHN5bWJvbEl0
ZXJhdG9yKCkKIHsKICAgICAndXNlIHN0cmljdCc7CiAgICAgcmV0dXJuIHRoaXM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApp
bmRleCBlMDUzZGFkOTc3YjFhNjI0NmViZGY5NDA0MmNkYzAzOGU0YTliYTU0Li5mZDYwMDQ0ZmE2
ZjAxMmJjYzM4ZWU5MjYyODFhOTA4OTkyOTk0ZmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTgwLDcgKzgwLDcg
QEAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdlbmVyYXRlRnVuY3Rpb25Db2Rl
QmxvY2soCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiYmIHNv
dXJjZU92ZXJyaWRlLCBGdW5jdGlvbkJvZHlOb2RlKiBub2RlLCBVbmxpbmtlZEZ1bmN0aW9uS2lu
ZCBraW5kLCBWYXJpYWJsZUVudmlyb25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcykKK1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFJlZlB0
cjxTb3VyY2VQcm92aWRlcj4mJiBzb3VyY2VPdmVycmlkZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9k
ZSwgVW5saW5rZWRGdW5jdGlvbktpbmQga2luZCwgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RB
YmlsaXR5LCBWYXJpYWJsZUVudmlyb25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcykKICAg
ICA6IEJhc2UoKnZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX25hbWUobm9kZS0+aWRlbnQoKSkKICAg
ICAsIG1faW5mZXJyZWROYW1lKG5vZGUtPmluZmVycmVkTmFtZSgpKQpAQCAtMTAxLDYgKzEwMSw3
IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZShWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0CiAgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KG5v
ZGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGZh
bHNlKQogICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihraW5kID09IFVubGlua2VkQnVpbHRpbkZ1
bmN0aW9uKQorICAgICwgbV9oYXNDb25zdHJ1Y3QoY29uc3RydWN0QWJpbGl0eSA9PSBDb25zdHJ1
Y3RBYmlsaXR5OjpIYXNDb25zdHJ1Y3QpCiAgICAgLCBtX2NvbnN0cnVjdG9yS2luZChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obm9kZS0+Y29uc3RydWN0b3JLaW5kKCkpKQogICAgICwgbV9mdW5jdGlv
bk1vZGUobm9kZS0+ZnVuY3Rpb25Nb2RlKCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IDc1YTk2NmM2OGMyMmE5Zjcz
ZmFkZTVmMWNmODZlZDIzMzVkZWUwZjIuLjNkYWM0NWQ5YmU1NjY4YzQ3ZjNiZWJjMGQ1YThlMjU1
NGViNWE4ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCkBAIC05OCw2ICs5OCwxMSBAQCBlbnVtIFVubGlua2VkRnVuY3Rpb25L
aW5kIHsKICAgICBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbiwKIH07CiAKK2VudW0gY2xhc3MgQ29u
c3RydWN0QWJpbGl0eSB7CisgICAgSGFzQ29uc3RydWN0LAorICAgIE5vQ29uc3RydWN0LAorfTsK
KwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwpAQCAtMTA3
LDEwICsxMTIsMTAgQEAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0
dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
Y3JlYXRlKFZNKiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBGdW5jdGlvbkJvZHlOb2Rl
KiBub2RlLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCB1bmxpbmtlZEZ1bmN0aW9uS2luZCwgVmFyaWFi
bGVFbnZpcm9ubWVudCYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIFJlZlB0cjxTb3VyY2VQcm92
aWRlcj4mJiBzb3VyY2VPdmVycmlkZSA9IG51bGxwdHIpCisgICAgc3RhdGljIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rpb25LaW5kIHVubGlua2VkRnVu
Y3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHksIFZhcmlhYmxlRW52
aXJvbm1lbnQmIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBSZWZQdHI8U291cmNlUHJvdmlkZXI+
JiYgc291cmNlT3ZlcnJpZGUgPSBudWxscHRyKQogICAgIHsKICAgICAgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTdHJ1
Y3R1cmUuZ2V0KCksIHNvdXJjZSwgV1RGOjptb3ZlKHNvdXJjZU92ZXJyaWRlKSwgbm9kZSwgdW5s
aW5rZWRGdW5jdGlvbktpbmQsIHBhcmVudFNjb3BlVERaVmFyaWFibGVzKTsKKyAgICAgICAgICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKHZtLCB2bS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHNvdXJjZSwgV1RGOjptb3ZlKHNvdXJjZU92ZXJyaWRlKSwg
bm9kZSwgdW5saW5rZWRGdW5jdGlvbktpbmQsIGNvbnN0cnVjdEFiaWxpdHksIHBhcmVudFNjb3Bl
VERaVmFyaWFibGVzKTsKICAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CiAg
ICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CkBAIC0xNjIsMTEgKzE2NywxMiBAQCBjbGFz
cyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICBib29sIGlzQnVpbHRpbkZ1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQorICAgIGJvb2wgaGFz
Q29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb25zdHJ1Y3Q7IH0KICAgICBib29sIGlz
Q2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gY29uc3RydWN0b3JLaW5k
KCkgIT0gQ29uc3RydWN0b3JLaW5kOjpOb25lOyB9CiAgICAgY29uc3QgVmFyaWFibGVFbnZpcm9u
bWVudCogcGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiAmbV9wYXJlbnRT
Y29wZVREWlZhcmlhYmxlczsgfQogCiBwcml2YXRlOgotICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIFJlZlB0cjxTb3VyY2VQ
cm92aWRlcj4mJiBzb3VyY2VPdmVycmlkZSwgRnVuY3Rpb25Cb2R5Tm9kZSosIFVubGlua2VkRnVu
Y3Rpb25LaW5kLCBWYXJpYWJsZUVudmlyb25tZW50Jik7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiYmIHNvdXJjZU92ZXJyaWRlLCBGdW5jdGlvbkJvZHlOb2RlKiwgVW5saW5rZWRG
dW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIFZhcmlhYmxlRW52aXJvbm1lbnQmKTsKICAg
ICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JD
YWxsOwogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdDsKIApAQCAtMTkzLDYgKzE5OSw3IEBAIGNsYXNzIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdW5zaWduZWQgbV9p
c0luU3RyaWN0Q29udGV4dCA6IDE7CiAgICAgdW5zaWduZWQgbV9oYXNDYXB0dXJlZFZhcmlhYmxl
cyA6IDE7CiAgICAgdW5zaWduZWQgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAgdW5zaWdu
ZWQgbV9oYXNDb25zdHJ1Y3QgOiAxOwogICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JLaW5kIDog
MjsKICAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uTW9kZSA6IDE7IC8vIEZ1bmN0aW9uTW9kZQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKaW5kZXggNzQ4YjkwZTI5Y2NiOGY0OTBiMTM4MGU2ZmY3M2NiNTJiMTY1ZTMwZS4u
MjY4OWJmMTUwMjhkYjFlMDU3OTRhMWIxOTdiMzZiZDMyYWU3ZGY4NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApA
QCAtNzAxLDcgKzcwMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAg
ICAgVmFyaWFibGVFbnZpcm9ubWVudCB2YXJpYWJsZXNVbmRlclREWjsKICAgICAgICAgICAgIGdl
dFZhcmlhYmxlc1VuZGVyVERaKHZhcmlhYmxlc1VuZGVyVERaKTsKLSAgICAgICAgICAgIHJldHVy
biBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKG1fdm0sIG1fc2NvcGVOb2RlLT5z
b3VyY2UoKSwgYm9keSwgaXNCdWlsdGluRnVuY3Rpb24oKSA/IFVubGlua2VkQnVpbHRpbkZ1bmN0
aW9uIDogVW5saW5rZWROb3JtYWxGdW5jdGlvbiwgdmFyaWFibGVzVW5kZXJURFopOworCisgICAg
ICAgICAgICBGdW5jdGlvblBhcnNlTW9kZSBwYXJzZU1vZGUgPSBib2R5LT5wYXJzZU1vZGUoKTsK
KyAgICAgICAgICAgIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSA9IENvbnN0cnVj
dEFiaWxpdHk6Okhhc0NvbnN0cnVjdDsKKyAgICAgICAgICAgIGlmIChwYXJzZU1vZGUgPT0gR2V0
dGVyTW9kZSB8fCBwYXJzZU1vZGUgPT0gU2V0dGVyTW9kZSB8fCBwYXJzZU1vZGUgPT0gQXJyb3dG
dW5jdGlvbk1vZGUgfHwgKHBhcnNlTW9kZSA9PSBNZXRob2RNb2RlICYmIGJvZHktPmNvbnN0cnVj
dG9yS2luZCgpID09IENvbnN0cnVjdG9yS2luZDo6Tm9uZSkpCisgICAgICAgICAgICAgICAgY29u
c3RydWN0QWJpbGl0eSA9IENvbnN0cnVjdEFiaWxpdHk6Ok5vQ29uc3RydWN0OworCisgICAgICAg
ICAgICByZXR1cm4gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShtX3ZtLCBtX3Nj
b3BlTm9kZS0+c291cmNlKCksIGJvZHksIGlzQnVpbHRpbkZ1bmN0aW9uKCkgPyBVbmxpbmtlZEJ1
aWx0aW5GdW5jdGlvbiA6IFVubGlua2VkTm9ybWFsRnVuY3Rpb24sIGNvbnN0cnVjdEFiaWxpdHks
IHZhcmlhYmxlc1VuZGVyVERaKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZ2V0VmFyaWFi
bGVzVW5kZXJURFooVmFyaWFibGVFbnZpcm9ubWVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRlLWpzLWJ1aWx0aW5zIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRlLWpzLWJ1aWx0aW5zCmluZGV4IDQ0NmI0OTcxZWUyNDQ0MmU1NTk0Nzc3ZTMxNDZi
YzhkNTBiN2NmODkuLjE3MGI5Y2I4MzQyYjczMDUyMTJhYTAyMzcxNDVlOGUxNjRiZGYyZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0ZS1qcy1idWlsdGlucworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdGUtanMtYnVpbHRpbnMKQEAgLTIxMCw2ICsy
MTAsNyBAQCBmb3IgKG9iamVjdE5hbWUsIGZ1bmN0aW9ucykgaW4gYnVpbHRpbnM6CiAgICAgICAg
IGNvZGVSZWZlcmVuY2VzLmFwcGVuZCgobWFuZ2xlZE5hbWUsIG5hbWUsIGltcGxlbWVudGF0aW9u
KSkKICAgICAgICAgYnVpbHRpbnNIZWFkZXIud3JpdGUoImV4dGVybiBjb25zdCBjaGFyKiBzXyVz
O1xuIiAlIG1hbmdsZWROYW1lKQogICAgICAgICBidWlsdGluc0hlYWRlci53cml0ZSgiZXh0ZXJu
IGNvbnN0IGludCBzXyVzTGVuZ3RoO1xuIiAlIG1hbmdsZWROYW1lKQorICAgICAgICBidWlsdGlu
c0hlYWRlci53cml0ZSgiZXh0ZXJuIGNvbnN0IGJvb2wgc18lc0hhc0NvbnN0cnVjdDtcbiIgJSBt
YW5nbGVkTmFtZSkKICAgICBidWlsdGluc0hlYWRlci53cml0ZSgiXG4iKQogICAgIGJ1aWx0aW5z
SGVhZGVyLndyaXRlKCIjZGVmaW5lIEpTQ19GT1JFQUNIXyVzX0JVSUxUSU4obWFjcm8pIFxcXG4i
ICUgb2JqZWN0TmFtZS5yZXBsYWNlKCIuIiwgIl8iKS51cHBlcigpKQogICAgIGZvciAobmFtZSwg
aW1wbGVtZW50YXRpb24sIGFyZ3VtZW50cykgaW4gZnVuY3Rpb25zOgpAQCAtMjcwLDYgKzI3MSwx
MCBAQCBmb3IgKGNvZGVSZWZlcmVuY2UsIG5hbWUsIHNvdXJjZSkgaW4gY29kZVJlZmVyZW5jZXM6
CiAgICAgICAgIHNvdXJjZSA9IHNvdXJjZSArICgiICAgIFwiJXNcXG5cIiBcXFxuIiAlIGxpbmUp
CiAgICAgYnVpbHRpbnNJbXBsZW1lbnRhdGlvbi53cml0ZSgiY29uc3QgY2hhciogc18lcyA9XG4l
cztcblxuIiAlIChjb2RlUmVmZXJlbmNlLCBzb3VyY2UpKQogICAgIGJ1aWx0aW5zSW1wbGVtZW50
YXRpb24ud3JpdGUoImNvbnN0IGludCBzXyVzTGVuZ3RoID0gJWQ7XG5cbiIgJSAoY29kZVJlZmVy
ZW5jZSwgc291cmNlTGVuZ3RoICsgMSkpICMgKyAxIGZvciBcbgorICAgIGhhc0NvbnN0cnVjdCA9
ICJmYWxzZSIKKyAgICBpZiBuYW1lWzBdLmlzdXBwZXIoKToKKyAgICAgICAgaGFzQ29uc3RydWN0
ID0gInRydWUiCisgICAgYnVpbHRpbnNJbXBsZW1lbnRhdGlvbi53cml0ZSgiY29uc3QgYm9vbCBz
XyVzSGFzQ29uc3RydWN0ID0gJXM7XG5cbiIgJSAoY29kZVJlZmVyZW5jZSwgaGFzQ29uc3RydWN0
KSkgIyArIDEgZm9yIFxuCiAKIGJ1aWx0aW5zSW1wbGVtZW50YXRpb24ud3JpdGUoIiIiCiAjZGVm
aW5lIEpTQ19ERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IoY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwg
YXJndW1lbnRDb3VudCkgXFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCmluZGV4IGU4NGU5MzQyOTcxY2JkNTFmZmI2OTU3MjllOGZlOTIyYjY0YzBkMjkuLmYx
ZTM0NDVkNzc3YTdlYjMyNWYxMDllNzEzYTJkZjZlOTQ3OTFmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzgzLDcgKzc4Myw3IEBAIGlubGlu
ZSBjaGFyKiBsaW5rRm9yKAogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwogCi0gICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+aXNCdWlsdGluRnVuY3Rpb24oKSkgeworICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAm
JiAhZnVuY3Rpb25FeGVjdXRhYmxlLT5oYXNDb25zdHJ1Y3QoKSkgewogICAgICAgICAgICAgZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihl
eGVjLCBjYWxsZWUpKTsKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
Pih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgfQpAQCAtODQ4LDcgKzg0OCw3
IEBAIGlubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAogICAgIGlmIChVTkxJS0VM
WSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKICAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihleGVjdXRhYmxlKTsKIAotICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5j
dGlvbkV4ZWN1dGFibGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFpc0Nh
bGwoa2luZCkgJiYgIWZ1bmN0aW9uRXhlY3V0YWJsZS0+aGFzQ29uc3RydWN0KCkpIHsKICAgICAg
ICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90QUNvbnN0cnVj
dG9yRXJyb3IoZXhlYywgZnVuY3Rpb24pKTsKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMTkz
NGU1NzA0MzhlM2NiZWM5YTQ4YTE2ZjczMGQ0NTNlZWZiNjViNC4uOTAxYjYxNTQ4N2M3YjdkNDE1
ODM1OTM1NTAxNjg5MDNjNWJlMDJmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0xMTA0LDcgKzExMDQsNyBAQCBpbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEluc3RydWN0aW9u
KiBwYywgQ29kZQogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwogCi0gICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+
aXNCdWlsdGluRnVuY3Rpb24oKSkKKyAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgIWZ1bmN0
aW9uRXhlY3V0YWJsZS0+aGFzQ29uc3RydWN0KCkpCiAgICAgICAgICAgICBMTElOVF9DQUxMX1RI
Uk9XKGV4ZWMsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkpOwogCiAg
ICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4
ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUsIHNjb3BlLCBraW5kKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCA0OGE3MWM3N2IxZjZiYzhkOTQxYWVkYzM3Mzdl
MDg1MDQ3MTlhYWFhLi41YjVjNTc1MjAxOWUxNzViNjk0Y2EzM2QxY2IwNGZkOTk3M2RmOTQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0xODk4LDcgKzE4OTgs
NyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4cHJlc3Npb24gUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBtZXRob2RJbmZvOwogICAgICAgICAg
ICAgYm9vbCBpc0NvbnN0cnVjdG9yID0gIWlzU3RhdGljTWV0aG9kICYmICppZGVudCA9PSBwcm9w
ZXJ0eU5hbWVzLmNvbnN0cnVjdG9yOwotICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVu
Y3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIGlzU3RhdGljTWV0aG9k
ID8gTm9ybWFsRnVuY3Rpb25Nb2RlIDogTWV0aG9kTW9kZSwgZmFsc2UsIGlzQ29uc3RydWN0b3Ig
PyBjb25zdHJ1Y3RvcktpbmQgOiBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6
TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0aG9kSW5mbywgU3RhbmRhcmRGdW5jdGlvblBhcnNlVHlw
ZSkpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CisgICAgICAgICAgICBmYWlsSWZGYWxz
ZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgTWV0
aG9kTW9kZSwgZmFsc2UsIGlzQ29uc3RydWN0b3IgPyBjb25zdHJ1Y3RvcktpbmQgOiBDb25zdHJ1
Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0aG9k
SW5mbywgU3RhbmRhcmRGdW5jdGlvblBhcnNlVHlwZSkpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0
aG9kIik7CiAgICAgICAgICAgICBmYWlsSWZUcnVlKCFpZGVudCB8fCAoZGVjbGFyZVZhcmlhYmxl
KGlkZW50KSAmIERlY2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkU3RyaWN0TW9kZSksICJDYW5ub3Qg
ZGVjbGFyZSBhIG1ldGhvZCBuYW1lZCAnIiwgbWV0aG9kSW5mby5uYW1lLT5pbXBsKCksICInIik7
CiAgICAgICAgICAgICBtZXRob2RJbmZvLm5hbWUgPSBpc0NvbnN0cnVjdG9yID8gY2xhc3NOYW1l
IDogaWRlbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
ZGVDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3Bw
CmluZGV4IDAwMDFkNWM0NDIyYmFjNTlmN2YwOGZkNDgxZmQ1MzY4ZWJkZTcxMzUuLjg3YmNhNjE1
ODRlNDE2MDIxYzRhYWRiMmIyYjdiNDhlODk4NTlkOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9i
YWxDb2RlKFZNJiB2CiAgICAgYm9keS0+c2V0RW5kUG9zaXRpb24ocG9zaXRpb25CZWZvcmVMYXN0
TmV3bGluZSk7CiAgICAgLy8gVGhlIEZ1bmN0aW9uIGNvbnN0cnVjdG9yIG9ubHkgaGFzIGFjY2Vz
cyB0byBnbG9iYWwgdmFyaWFibGVzLCBzbyBubyB2YXJpYWJsZXMgd2lsbCBiZSB1bmRlciBURFou
CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBlbXB0eVREWlZhcmlhYmxlczsKLSAgICBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OmNyZWF0ZSgmdm0sIHNvdXJjZSwgYm9keSwgVW5saW5rZWROb3JtYWxGdW5j
dGlvbiwgZW1wdHlURFpWYXJpYWJsZXMpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRl
KCZ2bSwgc291cmNlLCBib2R5LCBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBDb25zdHJ1Y3RBYmls
aXR5OjpIYXNDb25zdHJ1Y3QsIGVtcHR5VERaVmFyaWFibGVzKTsKICAgICBmdW5jdGlvbkV4ZWN1
dGFibGUtPm1fbmFtZVZhbHVlLnNldCh2bSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBqc1N0cmluZygm
dm0sIG5hbWUuc3RyaW5nKCkpKTsKIAogICAgIG1fc291cmNlQ29kZS5hZGRDYWNoZShrZXksIFNv
dXJjZUNvZGVWYWx1ZSh2bSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBtX3NvdXJjZUNvZGUuYWdlKCkp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50
aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oCmluZGV4IGZkYTUyODk2NTljNDg3ZjRmZmI4NGQ0NDA4ZDhmMGNhMTUyNmQyMGYuLjliOTM5
ODdiMWIxNmRiNTNlYzk1YTQzNzYxNzFiN2NkZjBjOTUzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtMjUzLDcgKzI1Myw2
IEBACiAKICNkZWZpbmUgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVS
VFlfTkFNRShtYWNybykgXAogICAgIEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDU19FQUNI
X05BTUUobWFjcm8pIFwKLSAgICBtYWNybyhzeW1ib2xJdGVyYXRvcikgXAogICAgIG1hY3JvKGl0
ZXJhdGVkT2JqZWN0KSBcCiAgICAgbWFjcm8oYXJyYXlJdGVyYXRvck5leHRJbmRleCkgXAogICAg
IG1hY3JvKGFycmF5SXRlcmF0aW9uS2luZCkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCmluZGV4IDhkODcxMDdhNTg2M2VkZmY0NWEyZTNkMzNkMTVlYThlNDRj
MjU1MjIuLmFkNTJkMmI2YjVkNzliZGYxYWE2OGQyZjYzNmQ0ODdjYTY0YmY0MDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTYzMCw2ICs2MzAsNyBA
QCBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJs
ZSB7CiAgICAgICAgIAogICAgIEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUoKSB7IHJldHVybiBt
X3VubGlua2VkRXhlY3V0YWJsZS0+ZnVuY3Rpb25Nb2RlKCk7IH0KICAgICBib29sIGlzQnVpbHRp
bkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmlzQnVpbHRp
bkZ1bmN0aW9uKCk7IH0KKyAgICBib29sIGhhc0NvbnN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRFeGVjdXRhYmxlLT5oYXNDb25zdHJ1Y3QoKTsgfQogICAgIGJvb2wgaXNDbGFzc0Nv
bnN0cnVjdG9yRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+
aXNDbGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKTsgfQogICAgIGNvbnN0IElkZW50aWZpZXImIG5h
bWUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+bmFtZSgpOyB9CiAgICAgY29uc3Qg
SWRlbnRpZmllciYgaW5mZXJyZWROYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUt
PmluZmVycmVkTmFtZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCmluZGV4IDFiOGM0MDdlYzNkNDk0OWI2MDZlYzk1YjlhYzliNGUyZGZjNjgxMmYu
LjgwMjUxODY5YTBlNWJhMjE4M2U3MmMxMjUzMzgzZjA2NWMzMzdjODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCkBAIC01NTIsMTQgKzU1MiwxNiBA
QCBDb25zdHJ1Y3RUeXBlIEpTRnVuY3Rpb246OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiBjZWxs
LCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1YwogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogCi0gICAgaWYgKHRoaXNPYmplY3QtPmlzQnVp
bHRpbkZ1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlTm9uZTsKLQogICAg
IGlmICh0aGlzT2JqZWN0LT5pc0hvc3RGdW5jdGlvbigpKSB7CiAgICAgICAgIGNvbnN0cnVjdERh
dGEubmF0aXZlLmZ1bmN0aW9uID0gdGhpc09iamVjdC0+bmF0aXZlQ29uc3RydWN0b3IoKTsKICAg
ICAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogICAgIH0KLSAgICBjb25zdHJ1Y3REYXRh
LmpzLmZ1bmN0aW9uRXhlY3V0YWJsZSA9IHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpOworCisg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSB0aGlzT2JqZWN0LT5q
c0V4ZWN1dGFibGUoKTsKKyAgICBpZiAoIWZ1bmN0aW9uRXhlY3V0YWJsZS0+aGFzQ29uc3RydWN0
KCkpCisgICAgICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlTm9uZTsKKworICAgIGNvbnN0cnVjdERh
dGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlID0gZnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNvbnN0
cnVjdERhdGEuanMuc2NvcGUgPSB0aGlzT2JqZWN0LT5zY29wZSgpOwogICAgIHJldHVybiBDb25z
dHJ1Y3RUeXBlSlM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKaW5kZXggNDE5YzFiMjc3OTk0MjhiNmY2YWY1OTU4MjIxOWRmOWIzZjE1
MTgzZi4uMDQzZTkzODljZWM2OTA1ODlhNTZhMzhhYzViMTg5NjNmMWZmYmFjNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtNTA2
LDcgKzUwNiw3IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT4ganNOYW1lLCBsb3dlck5hbWUgIyMgQ29uc3RydWN0CiAgICAgICAgIEdsb2JhbFByb3Bl
cnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5hcnJheUl0ZXJhdGlvbktpbmRLZXlQcml2YXRlTmFt
ZSwganNOdW1iZXIoQXJyYXlJdGVyYXRlS2V5KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YXJy
YXlJdGVyYXRpb25LaW5kVmFsdWVQcml2YXRlTmFtZSwganNOdW1iZXIoQXJyYXlJdGVyYXRlVmFs
dWUpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFBy
b3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5hcnJheUl0ZXJhdGlvbktpbmRLZXlWYWx1ZVBy
aXZhdGVOYW1lLCBqc051bWJlcihBcnJheUl0ZXJhdGVLZXlWYWx1ZSksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3Bl
cnR5TmFtZXMtPnN5bWJvbEl0ZXJhdG9yUHJpdmF0ZU5hbWUsIFN5bWJvbDo6Y3JlYXRlKHZtLCBz
dGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKnZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9s
LmltcGwoKSkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEds
b2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zeW1ib2xJ
dGVyYXRvclByaXZhdGVOYW1lKCksIFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1i
b2xJbXBsJj4oKnZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLmltcGwoKSkpLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+UHJvbWlzZVByaXZhdGVO
YW1lLCBtX3Byb21pc2VDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+
cHJvbWlzZVBlbmRpbmdQcml2YXRlTmFtZSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTUHJvbWlzZTo6U3RhdHVzOjpQZW5kaW5nKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
bm9uLWNvbnN0cnVjdG9ycy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
bm9uLWNvbnN0cnVjdG9ycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMmRlNzE5OTE0MzQ5YWY0ODBmNGMyNjE3
YzgwZGYwOThjMzM5Y2M3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9ub24tY29uc3RydWN0b3JzLmpzCkBAIC0wLDAgKzEsMTE2IEBACitmdW5j
dGlvbiBzaG91bGRUaHJvdyhmdW5jLCBlcnJvck1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3JUaHJv
d24gPSBmYWxzZTsKKyAgICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1
bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKKyAg
ICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ25vdCB0aHJvd24nKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0g
ZXJyb3JNZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBlcnJvcjogJHtTdHJp
bmcoZXJyb3IpfWApOworfQorCitjbGFzcyBDbGFzc1Rlc3QgeworICAgIGNvbnN0cnVjdG9yKCkg
eworICAgIH0KKworICAgIG1ldGhvZCgpIHsKKyAgICB9CisKKyAgICBnZXQgZ2V0dGVyKCkgewor
ICAgICAgICByZXR1cm4gMjA7CisgICAgfQorCisgICAgc2V0IHNldHRlcihuYW1lKSB7CisgICAg
fQorCisgICAgc3RhdGljIG1ldGhvZCgpIHsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2V0IGdldHRl
cigpIHsKKyAgICAgICAgcmV0dXJuIDIwOworICAgIH0KKworICAgIHN0YXRpYyBzZXQgc2V0dGVy
KG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIDIwOworICAgIH0KK307CisKKy8vIFNob3VsZCBub3Qg
dGhyb3cgKCdjb25zdHJ1Y3RvcicgaXMgYSBmdW5jdGlvbikuCit2YXIgdGVzdCA9IG5ldyBDbGFz
c1Rlc3QoKTsKK3ZhciB0ZXN0MiA9IG5ldyB0ZXN0LmNvbnN0cnVjdG9yKCk7CisKK3Nob3VsZFRo
cm93KCgpID0+IHsKKyAgICBuZXcgdGVzdC5tZXRob2QoKTsKK30sIGBUeXBlRXJyb3I6IGZ1bmN0
aW9uIGlzIG5vdCBhIGNvbnN0cnVjdG9yIChldmFsdWF0aW5nICduZXcgdGVzdC5tZXRob2QoKScp
YCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGVzdC5fX3Byb3RvX18sICdnZXR0ZXInKTsKKyAgICBu
ZXcgZGVzY3JpcHRvci5nZXQoKTsKK30sIGBUeXBlRXJyb3I6IGZ1bmN0aW9uIGlzIG5vdCBhIGNv
bnN0cnVjdG9yIChldmFsdWF0aW5nICduZXcgZGVzY3JpcHRvci5nZXQoKScpYCk7CisKK3Nob3Vs
ZFRocm93KCgpID0+IHsKKyAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IodGVzdC5fX3Byb3RvX18sICdzZXR0ZXInKTsKKyAgICBuZXcgZGVzY3JpcHRv
ci5zZXQoKTsKK30sIGBUeXBlRXJyb3I6IGZ1bmN0aW9uIGlzIG5vdCBhIGNvbnN0cnVjdG9yIChl
dmFsdWF0aW5nICduZXcgZGVzY3JpcHRvci5zZXQoKScpYCk7CisKK3Nob3VsZFRocm93KCgpID0+
IHsKKyAgICBuZXcgQ2xhc3NUZXN0Lm1ldGhvZCgpOworfSwgYFR5cGVFcnJvcjogZnVuY3Rpb24g
aXMgbm90IGEgY29uc3RydWN0b3IgKGV2YWx1YXRpbmcgJ25ldyBDbGFzc1Rlc3QubWV0aG9kKCkn
KWApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKENsYXNzVGVzdCwgJ2dldHRlcicpOworICAgIG5ldyBk
ZXNjcmlwdG9yLmdldCgpOworfSwgYFR5cGVFcnJvcjogZnVuY3Rpb24gaXMgbm90IGEgY29uc3Ry
dWN0b3IgKGV2YWx1YXRpbmcgJ25ldyBkZXNjcmlwdG9yLmdldCgpJylgKTsKKworc2hvdWxkVGhy
b3coKCkgPT4geworICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihDbGFzc1Rlc3QsICdzZXR0ZXInKTsKKyAgICBuZXcgZGVzY3JpcHRvci5zZXQoKTsK
K30sIGBUeXBlRXJyb3I6IGZ1bmN0aW9uIGlzIG5vdCBhIGNvbnN0cnVjdG9yIChldmFsdWF0aW5n
ICduZXcgZGVzY3JpcHRvci5zZXQoKScpYCk7CisKKwordmFyIHRlc3QgPSB7CisgICAgbWV0aG9k
KCkgeworICAgIH0sCisKKyAgICBnZXQgZ2V0dGVyKCkgeworICAgICAgICByZXR1cm4gMjA7Cisg
ICAgfSwKKworICAgIHNldCBzZXR0ZXIobmFtZSkgeworICAgIH0sCisKKyAgICBub3JtYWw6IGZ1
bmN0aW9uICgpIHsKKyAgICB9LAorCisgICAgY29uc3RydWN0b3IoKSB7CisgICAgfQorfTsKKwor
c2hvdWxkVGhyb3coKCkgPT4geworICAgIG5ldyB0ZXN0Lm1ldGhvZCgpOworfSwgYFR5cGVFcnJv
cjogZnVuY3Rpb24gaXMgbm90IGEgY29uc3RydWN0b3IgKGV2YWx1YXRpbmcgJ25ldyB0ZXN0Lm1l
dGhvZCgpJylgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIG5ldyB0ZXN0LmNvbnN0cnVj
dG9yKCk7Cit9LCBgVHlwZUVycm9yOiBmdW5jdGlvbiBpcyBub3QgYSBjb25zdHJ1Y3RvciAoZXZh
bHVhdGluZyAnbmV3IHRlc3QuY29uc3RydWN0b3IoKScpYCk7CisKK3Nob3VsZFRocm93KCgpID0+
IHsKKyAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
dGVzdCwgJ2dldHRlcicpOworICAgIG5ldyBkZXNjcmlwdG9yLmdldCgpOworfSwgYFR5cGVFcnJv
cjogZnVuY3Rpb24gaXMgbm90IGEgY29uc3RydWN0b3IgKGV2YWx1YXRpbmcgJ25ldyBkZXNjcmlw
dG9yLmdldCgpJylgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIHZhciBkZXNjcmlwdG9y
ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0ZXN0LCAnc2V0dGVyJyk7CisgICAg
bmV3IGRlc2NyaXB0b3Iuc2V0KCk7Cit9LCBgVHlwZUVycm9yOiBmdW5jdGlvbiBpcyBub3QgYSBj
b25zdHJ1Y3RvciAoZXZhbHVhdGluZyAnbmV3IGRlc2NyaXB0b3Iuc2V0KCknKWApOworCituZXcg
dGVzdC5ub3JtYWwoKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIHZhciBhcnJvdyA9ICgp
ID0+IHsgfTsKKyAgICBuZXcgYXJyb3coKTsKK30sIGBUeXBlRXJyb3I6IGZ1bmN0aW9uIGlzIG5v
dCBhIGNvbnN0cnVjdG9yIChldmFsdWF0aW5nICduZXcgYXJyb3coKScpYCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257294</attachid>
            <date>2015-07-22 14:32:01 -0700</date>
            <delta_ts>2015-07-22 16:37:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147183-20150722143046.patch</filename>
            <type>text/plain</type>
            <size>33771</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
OTUyNGFkMzIxNjFiMjQ1YWQyOWNlNWI1ZjkyMjdkNDAzMzFiMjczLi42YWNlODVmMDYzNDYwYzA5
NWNjZmM0MjY0NjA2YWY5YWIyYTIwZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MSBAQAorMjAxNS0wNy0yMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2luZyBjb25zdHJ1Y3QgYWJpbGl0eSBpbnRvIEpTIGV4
ZWN1dGFibGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDcxODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEZWNvdXBsZSB0aGUgY29uc3RydWN0IGFiaWxpdHkgZnJvbSB0aGUgYnVpbHRpbiBmdW5jdGlv
bnMuCisgICAgICAgIEN1cnJlbnRseSwgYWxsIGJ1aWx0aW4gZnVuY3Rpb25zIGFyZSBub3QgY29u
c3RydWN0b3JzIGFmdGVyIHIxODI5OTUuCisgICAgICAgIEluIHRoYXQgcGF0Y2gsIHdoZW4gdGhl
IGdpdmVuIGZ1bmN0aW9uIGlzIGJ1aWx0aW4gSlMgZnVuY3Rpb24sIHdlIHJlY29nbml6ZSBpdCBh
cyB0aGUgbm9uLWNvbnN0cnVjdG9yIGZ1bmN0aW9uLgorCisgICAgICAgIEJ1dCwgd2UgbmVlZCB0
byByZWxheCBpdCB0byBpbXBsZW1lbnQgc29tZSBjb25zdHJ1Y3RvcnMgaW4gYnVpbHRpbnMgSlMu
CisgICAgICAgIEJ5IGRlY291cGxpbmcgdGhlIGNvbnN0cnVjdCBhYmlsaXR5IGZyb20gd2hldGhl
ciB0aGUgZnVuY3Rpb24gaXMgYnVpbHRpbiBvciBub3QsIHdlIGNhbiBwcm92aWRlCisKKyAgICAg
ICAgMS4gY29uc3RydWN0b3JzIHdyaXR0ZW4gaW4gYnVpbHRpbiBKUworICAgICAgICAyLiBub24t
Y29uc3RydWN0b3JzIGluIG5vcm1hbCBKUyBmdW5jdGlvbnMKKworICAgICAgICAoMSkgaXMgbmVl
ZGVkIGZvciBQcm9taXNlIGNvbnN0cnVjdG9yLgorICAgICAgICBBbmQgKDIpIGlzIG5lZWRlZCBm
b3IgbWV0aG9kIGZ1bmN0aW9ucyBhbmQgYXJyb3cgZnVuY3Rpb25zLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaW50cm9kdWNlcyBDb25zdHJ1Y3RBYmlsaXR5IGludG8gdGhlIHVubGlua2VkIGZ1bmN0
aW9uIGV4ZWN1dGFibGVzLgorICAgICAgICBJdCBob2xkcyB3aGV0aGVyIHRoZSBnaXZlbiBKUyBm
dW5jdGlvbiBoYXMgdGhlIGNvbnN0cnVjdCBhYmlsaXR5IG9yIG5vdC4KKyAgICAgICAgQnkgbGV2
ZXJhZ2luZyB0aGlzLCB0aGlzIHBhdGNoIGRpc2FibGVzIHRoZSBjb25zdHJ1Y3QgYWJpbGl0eSBv
ZiB0aGUgbWV0aG9kIGRlZmluaXRpb25zLCBzZXR0ZXJzLCBnZXR0ZXJzIGFuZCBhcnJvdyBmdW5j
dGlvbnMuCisKKyAgICAgICAgQW5kIGF0IHRoZSBzYW1lIHRpbWUsIHRoaXMgcGF0Y2ggaW50cm9k
dWNlcyB0aGUgYW5ub3RhdGlvbiBmb3IgY29uc3RydWN0b3IgaW4gYnVpbHRpbiBKUy4KKyAgICAg
ICAgV2UgY2FuIGRlZmluZSB0aGUgZnVuY3Rpb24gYXMgZm9sbG93cywKKworICAgICAgICAgICAg
Y29uc3RydWN0b3IgUHJvbWlzZShleGVjdXRvcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAuLi4KKyAgICAgICAgICAgIH0KKworICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5FeGVj
dXRhYmxlcy5jcHA6CisgICAgICAgIChKU0M6OkJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlRGVm
YXVsdENvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6QnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVh
dGVFeGVjdXRhYmxlSW50ZXJuYWwpOgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5FeGVjdXRh
Ymxlcy5oOgorICAgICAgICAqIGJ1aWx0aW5zL0l0ZXJhdG9yLnByb3RvdHlwZS5qczoKKyAgICAg
ICAgKHN5bWJvbEl0ZXJhdG9yKToKKyAgICAgICAgKFN5bWJvbEl0ZXJhdG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6Om1ha2VGdW5jdGlvbik6CisgICAgICAgICogZ2VuZXJhdGUtanMtYnVpbHRpbnM6Cisg
ICAgICAgIChnZXRDb3B5cmlnaHQpOgorICAgICAgICAoRnVuY3Rpb24pOgorICAgICAgICAoRnVu
Y3Rpb24uX19pbml0X18pOgorICAgICAgICAoRnVuY3Rpb24ubWFuZ2xlTmFtZSk6CisgICAgICAg
IChnZXRGdW5jdGlvbnMpOgorICAgICAgICAobWFuZ2xlTmFtZSk6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhz
LmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAgICogcGFyc2Vy
L1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNz
KToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZTo6Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUpOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAq
IHRlc3RzL3N0cmVzcy9ub24tY29uc3RydWN0b3JzLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3Vs
ZFRocm93KToKKyAgICAgICAgKC5wcm90b3R5cGUubWV0aG9kKToKKyAgICAgICAgKC5wcm90b3R5
cGUuZ2V0IGdldHRlcik6CisgICAgICAgICgucHJvdG90eXBlLnNldCBzZXR0ZXIpOgorICAgICAg
ICAoLm1ldGhvZCk6CisgICAgICAgICguZ2V0IHNob3VsZFRocm93KToKKyAgICAgICAgKC5zZXQg
c2hvdWxkVGhyb3cpOgorICAgICAgICAoc2V0IHZhci50ZXN0LmdldCBnZXR0ZXIpOgorICAgICAg
ICAoc2V0IHZhci50ZXN0LnNldCBzZXR0ZXIpOgorICAgICAgICAoc2V0IHZhci50ZXN0Lm5vcm1h
bCk6CisgICAgICAgICguc2V0IHZhcik6CisgICAgICAgICguc2V0IG5ldyk6CisKIDIwMTUtMDct
MjIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBGaXggcXVpcmtzIGluIENNYWtlIGJ1aWxkIG9uIE1hYyBhbmQgV2luZG93cwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcApp
bmRleCBiZTIyNGRkNjYzMzhmODJjMGU0YTJiOGZkODZlNGUxNjlhZmFjOTA0Li42NmM0ODk0NjYw
ZGNmNWFmMzFhMjAwNDZmYWE0ZmE0NTI3MDAwMmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcApAQCAtNTIsMjEgKzUy
LDIyIEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWlsdGluRXhlY3V0YWJsZXM6OmNy
ZWF0ZURlZmF1bHRDb25zdHJ1Y3RvcihDb25zdHJ1CiAgICAgY2FzZSBDb25zdHJ1Y3RvcktpbmQ6
Ok5vbmU6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29uc3RydWN0b3JLaW5kOjpCYXNlOgot
ICAgICAgICByZXR1cm4gY3JlYXRlRXhlY3V0YWJsZUludGVybmFsKG1ha2VTb3VyY2UoYmFzZUNv
bnN0cnVjdG9yQ29kZSksIG5hbWUsIGNvbnN0cnVjdG9yS2luZCk7CisgICAgICAgIHJldHVybiBj
cmVhdGVFeGVjdXRhYmxlSW50ZXJuYWwobWFrZVNvdXJjZShiYXNlQ29uc3RydWN0b3JDb2RlKSwg
bmFtZSwgY29uc3RydWN0b3JLaW5kLCB0cnVlKTsKICAgICBjYXNlIENvbnN0cnVjdG9yS2luZDo6
RGVyaXZlZDoKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUV4ZWN1dGFibGVJbnRlcm5hbChtYWtlU291
cmNlKGRlcml2ZWRDb25zdHJ1Y3RvckNvZGUpLCBuYW1lLCBjb25zdHJ1Y3RvcktpbmQpOworICAg
ICAgICByZXR1cm4gY3JlYXRlRXhlY3V0YWJsZUludGVybmFsKG1ha2VTb3VyY2UoZGVyaXZlZENv
bnN0cnVjdG9yQ29kZSksIG5hbWUsIGNvbnN0cnVjdG9yS2luZCwgdHJ1ZSk7CiAgICAgfQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogQnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVhdGVFeGVjdXRhYmxl
SW50ZXJuYWwoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
LCBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKQorVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqIEJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlRXhlY3V0YWJsZUludGVybmFsKGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQ29uc3RydWN0b3JL
aW5kIGNvbnN0cnVjdG9yS2luZCwgYm9vbCBoYXNDb25zdHJ1Y3QpCiB7CiAgICAgSlNUZXh0UG9z
aXRpb24gcG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZTsKICAgICBQYXJzZXJFcnJvciBlcnJvcjsK
ICAgICBib29sIGlzUGFyc2luZ0RlZmF1bHRDb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yS2luZCAh
PSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmU7CiAgICAgSlNQYXJzZXJCdWlsdGluTW9kZSBidWlsdGlu
TW9kZSA9IGlzUGFyc2luZ0RlZmF1bHRDb25zdHJ1Y3RvciA/IEpTUGFyc2VyQnVpbHRpbk1vZGU6
Ok5vdEJ1aWx0aW4gOiBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpCdWlsdGluOwogICAgIFVubGlua2Vk
RnVuY3Rpb25LaW5kIGtpbmQgPSBpc1BhcnNpbmdEZWZhdWx0Q29uc3RydWN0b3IgPyBVbmxpbmtl
ZE5vcm1hbEZ1bmN0aW9uIDogVW5saW5rZWRCdWlsdGluRnVuY3Rpb247CisgICAgQ29uc3RydWN0
QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5ID0gaGFzQ29uc3RydWN0ID8gQ29uc3RydWN0QWJpbGl0
eTo6SGFzQ29uc3RydWN0IDogQ29uc3RydWN0QWJpbGl0eTo6Tm9Db25zdHJ1Y3Q7CiAgICAgUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VPdmVycmlkZSA9IGlzUGFyc2luZ0RlZmF1bHRDb25z
dHJ1Y3RvciA/IHNvdXJjZS5wcm92aWRlcigpIDogbnVsbHB0cjsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UHJvZ3JhbU5vZGU+IHByb2dyYW0gPSBwYXJzZTxQcm9ncmFtTm9kZT4oCiAgICAgICAgICZt
X3ZtLCBzb3VyY2UsIElkZW50aWZpZXIoKSwgYnVpbHRpbk1vZGUsIApAQCAtMTAzLDcgKzEwNCw3
IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBCdWlsdGluRXhlY3V0YWJsZXM6OmNyZWF0
ZUV4ZWN1dGFibGVJbnRlcm5hbChjb25zdCBTCiAgICAgfQogICAgIGJvZHktPm92ZXJyaWRlTmFt
ZShuYW1lKTsKICAgICBWYXJpYWJsZUVudmlyb25tZW50IGR1bW15VERaVmFyaWFibGVzOwotICAg
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCZtX3ZtLCBzb3VyY2UsIGJvZHksIGtpbmQsIGR1
bW15VERaVmFyaWFibGVzLCBXVEY6Om1vdmUoc291cmNlT3ZlcnJpZGUpKTsKKyAgICBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OmNyZWF0ZSgmbV92bSwgc291cmNlLCBib2R5LCBraW5kLCBjb25zdHJ1Y3RB
YmlsaXR5LCBkdW1teVREWlZhcmlhYmxlcywgV1RGOjptb3ZlKHNvdXJjZU92ZXJyaWRlKSk7CiAg
ICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1ZS5zZXQobV92bSwgZnVuY3Rpb25FeGVj
dXRhYmxlLCBqc1N0cmluZygmbV92bSwgbmFtZS5zdHJpbmcoKSkpOwogICAgIHJldHVybiBmdW5j
dGlvbkV4ZWN1dGFibGU7CiB9CkBAIC0xMTcsNyArMTE4LDcgQEAgdm9pZCBCdWlsdGluRXhlY3V0
YWJsZXM6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkKIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBCdWlsdGluRXhlY3V0YWJsZXM6Om5hbWUjI0V4ZWN1dGFibGUo
KSBcCiB7XAogICAgIGlmICghbV8jI25hbWUjI0V4ZWN1dGFibGUpXAotICAgICAgICBtXyMjbmFt
ZSMjRXhlY3V0YWJsZSA9IFdlYWs8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KGNyZWF0ZUJ1
aWx0aW5FeGVjdXRhYmxlKG1fIyNuYW1lIyNTb3VyY2UsIG1fdm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkuZnVuY3Rpb25OYW1lIyNQdWJsaWNOYW1lKCkpLCB0aGlzLCAmbV8jI25hbWUj
I0V4ZWN1dGFibGUpO1wKKyAgICAgICAgbV8jI25hbWUjI0V4ZWN1dGFibGUgPSBXZWFrPFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlPihjcmVhdGVCdWlsdGluRXhlY3V0YWJsZShtXyMjbmFtZSMj
U291cmNlLCBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmZ1bmN0aW9uTmFtZSMj
UHVibGljTmFtZSgpLCBzXyMjbmFtZSMjSGFzQ29uc3RydWN0KSwgdGhpcywgJm1fIyNuYW1lIyNF
eGVjdXRhYmxlKTtcCiAgICAgcmV0dXJuIG1fIyNuYW1lIyNFeGVjdXRhYmxlLmdldCgpO1wKIH0K
IEpTQ19GT1JFQUNIX0JVSUxUSU4oREVGSU5FX0JVSUxUSU5fRVhFQ1VUQUJMRVMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmgKaW5k
ZXggZjBkNWY0ZTU5YmQ4OWUxNzZlMGJkNTYwNjRiNTA2Y2RhMTliOGU0Zi4uOTE1MGE0NGFiYWQx
MzI5NmQ1OTcyZTMzYWQzZWQ4ZDU1MjJhZTFkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuaApAQCAtNTcsMTEgKzU3LDExIEBA
IGNvbnN0IFNvdXJjZUNvZGUmIG5hbWUjI1NvdXJjZSgpIHsgcmV0dXJuIG1fIyNuYW1lIyNTb3Vy
Y2U7IH0KIAogICAgIFZNJiBtX3ZtOwogCi0gICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IGNyZWF0ZUJ1aWx0aW5FeGVjdXRhYmxlKGNvbnN0IFNvdXJjZUNvZGUmIGNvZGUsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUpCisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZUJ1
aWx0aW5FeGVjdXRhYmxlKGNvbnN0IFNvdXJjZUNvZGUmIGNvZGUsIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUsIGJvb2wgaGFzQ29uc3RydWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUV4
ZWN1dGFibGVJbnRlcm5hbChjb2RlLCBuYW1lLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUpOworICAg
ICAgICByZXR1cm4gY3JlYXRlRXhlY3V0YWJsZUludGVybmFsKGNvZGUsIG5hbWUsIENvbnN0cnVj
dG9yS2luZDo6Tm9uZSwgaGFzQ29uc3RydWN0KTsKICAgICB9Ci0gICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIGNyZWF0ZUV4ZWN1dGFibGVJbnRlcm5hbChjb25zdCBTb3VyY2VDb2RlJiwg
Y29uc3QgSWRlbnRpZmllciYsIENvbnN0cnVjdG9yS2luZCk7CisgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIGNyZWF0ZUV4ZWN1dGFibGVJbnRlcm5hbChjb25zdCBTb3VyY2VDb2RlJiwg
Y29uc3QgSWRlbnRpZmllciYsIENvbnN0cnVjdG9yS2luZCwgYm9vbCBoYXNDb25zdHJ1Y3QpOwog
CiAjZGVmaW5lIERFQ0xBUkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUyhuYW1lLCBmdW5jdGlvbk5h
bWUsIGxlbmd0aClcCiAgICAgU291cmNlQ29kZSBtXyMjbmFtZSMjU291cmNlOyBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvSXRlcmF0b3IucHJvdG90eXBlLmpz
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0l0ZXJhdG9yLnByb3RvdHlwZS5qcwpp
bmRleCBkYzcyYTY0MDhiNDM2NzBhOTM2MTlmYzYxZjJiZWMzMjc1ZTM5NWQ1Li4xZTliOThjODQz
ZDg2NzU1YzQ3NjMzNzY1NzlmNDk4YTkyMDAyZGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvSXRlcmF0b3IucHJvdG90eXBlLmpzCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9JdGVyYXRvci5wcm90b3R5cGUuanMKQEAgLTIzLDcgKzIzLDcg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotZnVuY3Rpb24gU3ltYm9sSXRlcmF0b3IoKQorZnVu
Y3Rpb24gc3ltYm9sSXRlcmF0b3IoKQogewogICAgICd1c2Ugc3RyaWN0JzsKICAgICByZXR1cm4g
dGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwCmluZGV4IGUwNTNkYWQ5NzdiMWE2MjQ2ZWJkZjk0MDQyY2RjMDM4ZTRhOWJh
NTQuLmZkNjAwNDRmYTZmMDEyYmNjMzhlZTkyNjI4MWE5MDg5OTI5OTRmZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApA
QCAtODAsNyArODAsNyBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJh
dGVGdW5jdGlvbkNvZGVCbG9jaygKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBSZWZQdHI8U291cmNl
UHJvdmlkZXI+JiYgc291cmNlT3ZlcnJpZGUsIEZ1bmN0aW9uQm9keU5vZGUqIG5vZGUsIFVubGlu
a2VkRnVuY3Rpb25LaW5kIGtpbmQsIFZhcmlhYmxlRW52aXJvbm1lbnQmIHBhcmVudFNjb3BlVERa
VmFyaWFibGVzKQorVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiYmIHNvdXJjZU92ZXJyaWRlLCBGdW5jdGlv
bkJvZHlOb2RlKiBub2RlLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCBraW5kLCBDb25zdHJ1Y3RBYmls
aXR5IGNvbnN0cnVjdEFiaWxpdHksIFZhcmlhYmxlRW52aXJvbm1lbnQmIHBhcmVudFNjb3BlVERa
VmFyaWFibGVzKQogICAgIDogQmFzZSgqdm0sIHN0cnVjdHVyZSkKICAgICAsIG1fbmFtZShub2Rl
LT5pZGVudCgpKQogICAgICwgbV9pbmZlcnJlZE5hbWUobm9kZS0+aW5mZXJyZWROYW1lKCkpCkBA
IC0xMDEsNiArMTAxLDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3QKICAgICAsIG1faXNJblN0
cmljdENvbnRleHQobm9kZS0+aXNJblN0cmljdENvbnRleHQoKSkKICAgICAsIG1faGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoZmFsc2UpCiAgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGtpbmQgPT0gVW5s
aW5rZWRCdWlsdGluRnVuY3Rpb24pCisgICAgLCBtX2hhc0NvbnN0cnVjdChjb25zdHJ1Y3RBYmls
aXR5ID09IENvbnN0cnVjdEFiaWxpdHk6Okhhc0NvbnN0cnVjdCkKICAgICAsIG1fY29uc3RydWN0
b3JLaW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihub2RlLT5jb25zdHJ1Y3RvcktpbmQoKSkpCiAg
ICAgLCBtX2Z1bmN0aW9uTW9kZShub2RlLT5mdW5jdGlvbk1vZGUoKSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggNzVh
OTY2YzY4YzIyYTlmNzNmYWRlNWYxY2Y4NmVkMjMzNWRlZTBmMi4uM2RhYzQ1ZDliZTU2NjhjNDdm
M2JlYmMwZDVhOGUyNTU0ZWI1YTg4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTk4LDYgKzk4LDExIEBAIGVudW0gVW5s
aW5rZWRGdW5jdGlvbktpbmQgewogICAgIFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uLAogfTsKIAor
ZW51bSBjbGFzcyBDb25zdHJ1Y3RBYmlsaXR5IHsKKyAgICBIYXNDb25zdHJ1Y3QsCisgICAgTm9D
b25zdHJ1Y3QsCit9OworCiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSBmaW5hbCA6
IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBCdWlsdGluRXhlY3V0
YWJsZXM7CkBAIC0xMDcsMTAgKzExMiwxMCBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3RhdGljIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiBjcmVhdGUoVk0qIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1
bmN0aW9uQm9keU5vZGUqIG5vZGUsIFVubGlua2VkRnVuY3Rpb25LaW5kIHVubGlua2VkRnVuY3Rp
b25LaW5kLCBWYXJpYWJsZUVudmlyb25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiYmIHNvdXJjZU92ZXJyaWRlID0gbnVsbHB0cikKKyAgICBzdGF0
aWMgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShWTSogdm0sIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Cb2R5Tm9kZSogbm9kZSwgVW5saW5rZWRGdW5jdGlvbktp
bmQgdW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0
eSwgVmFyaWFibGVFbnZpcm9ubWVudCYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIFJlZlB0cjxT
b3VyY2VQcm92aWRlcj4mJiBzb3VyY2VPdmVycmlkZSA9IG51bGxwdHIpCiAgICAgewogICAgICAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0tPmhlYXApKQotICAgICAg
ICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUodm0sIHZtLT51bmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgc291cmNlLCBXVEY6Om1vdmUoc291cmNlT3ZlcnJp
ZGUpLCBub2RlLCB1bmxpbmtlZEZ1bmN0aW9uS2luZCwgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMp
OworICAgICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUodm0sIHZtLT51bmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgc291cmNlLCBXVEY6Om1vdmUoc291
cmNlT3ZlcnJpZGUpLCBub2RlLCB1bmxpbmtlZEZ1bmN0aW9uS2luZCwgY29uc3RydWN0QWJpbGl0
eSwgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMpOwogICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24oKnZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KQEAgLTE2MiwxMSAr
MTY3LDEyIEBAIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIGJvb2wg
aXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9uOyB9
CisgICAgYm9vbCBoYXNDb25zdHJ1Y3QoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbnN0cnVjdDsg
fQogICAgIGJvb2wgaXNDbGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBj
b25zdHJ1Y3RvcktpbmQoKSAhPSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmU7IH0KICAgICBjb25zdCBW
YXJpYWJsZUVudmlyb25tZW50KiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0
dXJuICZtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwg
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiYmIHNvdXJjZU92ZXJyaWRlLCBGdW5jdGlvbkJvZHlOb2Rl
KiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIFZhcmlhYmxlRW52aXJvbm1lbnQmKTsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJjZUNvZGUm
LCBSZWZQdHI8U291cmNlUHJvdmlkZXI+JiYgc291cmNlT3ZlcnJpZGUsIEZ1bmN0aW9uQm9keU5v
ZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgVmFyaWFibGVFbnZp
cm9ubWVudCYpOwogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBt
X2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwogCkBAIC0xOTMsNiArMTk5LDcgQEAgY2xh
c3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAg
ICB1bnNpZ25lZCBtX2lzSW5TdHJpY3RDb250ZXh0IDogMTsKICAgICB1bnNpZ25lZCBtX2hhc0Nh
cHR1cmVkVmFyaWFibGVzIDogMTsKICAgICB1bnNpZ25lZCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDog
MTsKKyAgICB1bnNpZ25lZCBtX2hhc0NvbnN0cnVjdCA6IDE7CiAgICAgdW5zaWduZWQgbV9jb25z
dHJ1Y3RvcktpbmQgOiAyOwogICAgIHVuc2lnbmVkIG1fZnVuY3Rpb25Nb2RlIDogMTsgLy8gRnVu
Y3Rpb25Nb2RlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCA3NDhiOTBlMjljY2I4ZjQ5MGIxMzgwZTZmZjcz
Y2I1MmIxNjVlMzBlLi4yNjg5YmYxNTAyOGRiMWUwNTc5NGExYjE5N2IzNmJkMzJhZTdkZjg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCkBAIC03MDEsNyArNzAxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOwog
ICAgICAgICAgICAgZ2V0VmFyaWFibGVzVW5kZXJURFoodmFyaWFibGVzVW5kZXJURFopOwotICAg
ICAgICAgICAgcmV0dXJuIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUobV92bSwg
bV9zY29wZU5vZGUtPnNvdXJjZSgpLCBib2R5LCBpc0J1aWx0aW5GdW5jdGlvbigpID8gVW5saW5r
ZWRCdWlsdGluRnVuY3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCB2YXJpYWJsZXNVbmRl
clREWik7CisKKyAgICAgICAgICAgIEZ1bmN0aW9uUGFyc2VNb2RlIHBhcnNlTW9kZSA9IGJvZHkt
PnBhcnNlTW9kZSgpOworICAgICAgICAgICAgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmls
aXR5ID0gQ29uc3RydWN0QWJpbGl0eTo6SGFzQ29uc3RydWN0OworICAgICAgICAgICAgaWYgKHBh
cnNlTW9kZSA9PSBHZXR0ZXJNb2RlIHx8IHBhcnNlTW9kZSA9PSBTZXR0ZXJNb2RlIHx8IHBhcnNl
TW9kZSA9PSBBcnJvd0Z1bmN0aW9uTW9kZSB8fCAocGFyc2VNb2RlID09IE1ldGhvZE1vZGUgJiYg
Ym9keS0+Y29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpOb25lKSkKKyAgICAg
ICAgICAgICAgICBjb25zdHJ1Y3RBYmlsaXR5ID0gQ29uc3RydWN0QWJpbGl0eTo6Tm9Db25zdHJ1
Y3Q7CisKKyAgICAgICAgICAgIHJldHVybiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3Jl
YXRlKG1fdm0sIG1fc2NvcGVOb2RlLT5zb3VyY2UoKSwgYm9keSwgaXNCdWlsdGluRnVuY3Rpb24o
KSA/IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uIDogVW5saW5rZWROb3JtYWxGdW5jdGlvbiwgY29u
c3RydWN0QWJpbGl0eSwgdmFyaWFibGVzVW5kZXJURFopOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCBnZXRWYXJpYWJsZXNVbmRlclREWihWYXJpYWJsZUVudmlyb25tZW50Jik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdGUtanMtYnVpbHRpbnMgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdGUtanMtYnVpbHRpbnMKaW5kZXggNDQ2YjQ5NzFlZTI0NDQy
ZTU1OTQ3NzdlMzE0NmJjOGQ1MGI3Y2Y4OS4uZGFlYjE4MTI4YTM3YzEwNWY3MWZiYjYzMjY0YzY2
ZGRkMmQwYjZkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRlLWpz
LWJ1aWx0aW5zCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0ZS1qcy1idWlsdGlu
cwpAQCAtNjQsOSArNjQsMTAgQEAgY29weXJpZ2h0VGV4dCA9ICIiIiAqCiAKIGdlbmVyYXRvclN0
cmluZyA9ICIvKiBHZW5lcmF0ZWQgYnkgJXMgZG8gbm90IGhhbmQgZWRpdC4gKi9cbiIgJSBvcy5w
YXRoLmJhc2VuYW1lKF9fZmlsZV9fKQogCi1mdW5jdGlvbkhlYWRSZWdFeHAgPSByZS5jb21waWxl
KHIiZnVuY3Rpb25ccytcdytccypcKC4qP1wpIiwgcmUuTVVMVElMSU5FIHwgcmUuUykKLWZ1bmN0
aW9uTmFtZVJlZ0V4cCA9IHJlLmNvbXBpbGUociJmdW5jdGlvblxzKyhcdyspXHMqXCgiLCByZS5N
VUxUSUxJTkUgfCByZS5TKQotZnVuY3Rpb25QYXJhbWV0ZXJGaW5kZXIgPSByZS5jb21waWxlKHIi
XmZ1bmN0aW9uXHMrKD86XHcrKVxzKlwoKCg/OlxzKlx3Kyk/XHMqKD86XHMqLFxzKlx3KykqKT9c
cypcKSIsIHJlLk1VTFRJTElORSB8IHJlLlMpCitmdW5jdGlvbkhlYWRSZWdFeHAgPSByZS5jb21w
aWxlKHIiKD86ZnVuY3Rpb258Y29uc3RydWN0b3IpXHMrXHcrXHMqXCguKj9cKSIsIHJlLk1VTFRJ
TElORSB8IHJlLlMpCitmdW5jdGlvbk5hbWVSZWdFeHAgPSByZS5jb21waWxlKHIiKD86ZnVuY3Rp
b258Y29uc3RydWN0b3IpXHMrKFx3KylccypcKCIsIHJlLk1VTFRJTElORSB8IHJlLlMpCitmdW5j
dGlvbklzQ29uc3RydWN0b3JSZWdFeHAgPSByZS5jb21waWxlKHIiXmNvbnN0cnVjdG9yIiwgcmUu
TVVMVElMSU5FIHwgcmUuUykKK2Z1bmN0aW9uUGFyYW1ldGVyRmluZGVyID0gcmUuY29tcGlsZShy
Il4oPzpmdW5jdGlvbnxjb25zdHJ1Y3RvcilccysoPzpcdyspXHMqXCgoKD86XHMqXHcrKT9ccyoo
PzpccyosXHMqXHcrKSopP1xzKlwpIiwgcmUuTVVMVElMSU5FIHwgcmUuUykKIAogbXVsdGlsaW5l
Q29tbWVudFJlZ0V4cCA9IHJlLmNvbXBpbGUociJcL1wqLio/XCpcLyIsIHJlLk1VTFRJTElORSB8
IHJlLlMpCiBzaW5nbGVMaW5lQ29tbWVudFJlZ0V4cCA9IHJlLmNvbXBpbGUociJcL1wvLio/XG4i
LCByZS5NVUxUSUxJTkUgfCByZS5TKQpAQCAtOTIsNyArOTMsMjcgQEAgZGVmIGdldENvcHlyaWdo
dChzb3VyY2UpOgogICAgIAogICAgIHJldHVybiBsaXN0KHNldChjb3B5UmlnaHRMaW5lcykpCiAK
LQorY2xhc3MgRnVuY3Rpb24ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwg
c291cmNlLCBpc0NvbnN0cnVjdG9yLCBwYXJhbWV0ZXJzKToKKyAgICAgICAgc2VsZi5uYW1lID0g
bmFtZQorICAgICAgICBzZWxmLnNvdXJjZSA9IHNvdXJjZQorICAgICAgICBzZWxmLmlzQ29uc3Ry
dWN0b3IgPSBpc0NvbnN0cnVjdG9yCisgICAgICAgIHNlbGYucGFyYW1ldGVycyA9IHBhcmFtZXRl
cnMKKworICAgIGRlZiBtYW5nbGVOYW1lKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHFOYW1lID0g
b2JqZWN0ICsgIi4iICsgc2VsZi5uYW1lCisgICAgICAgIG1hbmdsZWROYW1lID0gIiIKKyAgICAg
ICAgaSA9IDAKKyAgICAgICAgd2hpbGUgaSA8IGxlbihxTmFtZSk6CisgICAgICAgICAgICBpZiBx
TmFtZVtpXSA9PSAnLic6CisgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFt
ZSArIHFOYW1lW2kgKyAxXS51cHBlcigpCisgICAgICAgICAgICAgICAgaSA9IGkgKyAxCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1hbmdsZWROYW1lID0gbWFuZ2xlZE5hbWUg
KyBxTmFtZVtpXQorICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgIGlmIHNlbGYuaXNDb25z
dHJ1Y3RvcjoKKyAgICAgICAgICAgIG1hbmdsZWROYW1lID0gbWFuZ2xlZE5hbWUgKyAiQ29uc3Ry
dWN0b3IiCisgICAgICAgIHJldHVybiBtYW5nbGVkTmFtZQogCiBkZWYgZ2V0RnVuY3Rpb25zKHNv
dXJjZSk6CiAKQEAgLTEyNCwxMyArMTQ1LDE0IEBAIGRlZiBnZXRGdW5jdGlvbnMoc291cmNlKToK
ICAgICBmb3IgZnVuY3Rpb24gaW4gZnVuY3Rpb25zOgogICAgICAgICBmdW5jdGlvbiA9IG11bHRp
bGluZUNvbW1lbnRSZWdFeHAuc3ViKCIiLCBmdW5jdGlvbikKICAgICAgICAgZnVuY3Rpb25OYW1l
ID0gZnVuY3Rpb25OYW1lUmVnRXhwLmZpbmRhbGwoZnVuY3Rpb24pWzBdCisgICAgICAgIGZ1bmN0
aW9uSXNDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uSXNDb25zdHJ1Y3RvclJlZ0V4cC5tYXRjaChmdW5j
dGlvbikgIT0gTm9uZQogICAgICAgICBmdW5jdGlvblBhcmFtZXRlcnMgPSBmdW5jdGlvblBhcmFt
ZXRlckZpbmRlci5maW5kYWxsKGZ1bmN0aW9uKVswXS5zcGxpdCgnLCcpCiAgICAgICAgIGlmIGxl
bihmdW5jdGlvblBhcmFtZXRlcnNbMF0pID09IDA6CiAgICAgICAgICAgICBmdW5jdGlvblBhcmFt
ZXRlcnMgPSBbXQotICAgICAgICAgICAgCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoKGZ1bmN0aW9u
TmFtZSwgZnVuY3Rpb24sIGZ1bmN0aW9uUGFyYW1ldGVycykpCisKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChGdW5jdGlvbihmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uLCBmdW5jdGlvbklzQ29uc3RydWN0
b3IsIGZ1bmN0aW9uUGFyYW1ldGVycykpCiAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgICAKKwog
CiBkZWYgZ2VuZXJhdGVDb2RlKHNvdXJjZSk6CiAgICAgaW5wdXRGaWxlID0gb3Blbihzb3VyY2Us
ICJyIikKQEAgLTE0NCwxOSArMTY2LDYgQEAgZGVmIGdlbmVyYXRlQ29kZShzb3VyY2UpOgogICAg
ICAgICBzb3VyY2UgPSBzb3VyY2UucmVwbGFjZSgiXHJcbiIsICJcbiIpCiAgICAgcmV0dXJuIChi
YXNlTmFtZSwgZ2V0RnVuY3Rpb25zKHNvdXJjZSksIGdldENvcHlyaWdodChzb3VyY2UpKQogCi1k
ZWYgbWFuZ2xlTmFtZShvYmplY3QsIG5hbWUpOgotICAgIHFOYW1lID0gb2JqZWN0ICsgIi4iICsg
bmFtZQotICAgIG1hbmdsZWROYW1lID0gIiIKLSAgICBpID0gMAotICAgIHdoaWxlIGkgPCBsZW4o
cU5hbWUpOgotICAgICAgICBpZiBxTmFtZVtpXSA9PSAnLic6Ci0gICAgICAgICAgICBtYW5nbGVk
TmFtZSA9IG1hbmdsZWROYW1lICsgcU5hbWVbaSArIDFdLnVwcGVyKCkKLSAgICAgICAgICAgIGkg
PSBpICsgMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWFuZ2xlZE5hbWUgPSBtYW5nbGVk
TmFtZSArIHFOYW1lW2ldCi0gICAgICAgIGkgPSBpICsgMQotICAgIHJldHVybiBtYW5nbGVkTmFt
ZQotCiBidWlsdGlucyA9IFtdCiBjb3B5cmlnaHRzID0gW10KIChvdXRwdXRfYmFzZSwgXykgPSBv
cy5wYXRoLnNwbGl0ZXh0KGFyZ3Mub3V0cHV0KQpAQCAtMjA0LDI2ICsyMTMsMjggQEAgY29kZVJl
ZmVyZW5jZXMgPSBbXQogZm9yIChvYmplY3ROYW1lLCBmdW5jdGlvbnMpIGluIGJ1aWx0aW5zOgog
ICAgIHByaW50KCJHZW5lcmF0aW5nIGJpbmRpbmdzIGZvciB0aGUgJXMgYnVpbHRpbi4iICUgb2Jq
ZWN0TmFtZSkKICAgICBidWlsdGluc0hlYWRlci53cml0ZSgiLyogJXMgZnVuY3Rpb25zICovXG4i
ICUgb2JqZWN0TmFtZSkKLSAgICBmb3IgKG5hbWUsIGltcGxlbWVudGF0aW9uLCBfKSBpbiBmdW5j
dGlvbnM6Ci0gICAgICAgIG1hbmdsZWROYW1lID0gbWFuZ2xlTmFtZShvYmplY3ROYW1lLCBuYW1l
KQorICAgIGZvciBmdW5jdGlvbiBpbiBmdW5jdGlvbnM6CisgICAgICAgIG5hbWUgPSBmdW5jdGlv
bi5uYW1lCisgICAgICAgIG1hbmdsZWROYW1lID0gZnVuY3Rpb24ubWFuZ2xlTmFtZShvYmplY3RO
YW1lKQogICAgICAgICBtYW5nbGVkTmFtZSA9IG1hbmdsZWROYW1lWzBdLmxvd2VyKCkgKyBtYW5n
bGVkTmFtZVsxOl0gKyAiQ29kZSIKLSAgICAgICAgY29kZVJlZmVyZW5jZXMuYXBwZW5kKChtYW5n
bGVkTmFtZSwgbmFtZSwgaW1wbGVtZW50YXRpb24pKQorICAgICAgICBjb2RlUmVmZXJlbmNlcy5h
cHBlbmQoKG1hbmdsZWROYW1lLCBmdW5jdGlvbikpCiAgICAgICAgIGJ1aWx0aW5zSGVhZGVyLndy
aXRlKCJleHRlcm4gY29uc3QgY2hhciogc18lcztcbiIgJSBtYW5nbGVkTmFtZSkKICAgICAgICAg
YnVpbHRpbnNIZWFkZXIud3JpdGUoImV4dGVybiBjb25zdCBpbnQgc18lc0xlbmd0aDtcbiIgJSBt
YW5nbGVkTmFtZSkKKyAgICAgICAgYnVpbHRpbnNIZWFkZXIud3JpdGUoImV4dGVybiBjb25zdCBi
b29sIHNfJXNIYXNDb25zdHJ1Y3Q7XG4iICUgbWFuZ2xlZE5hbWUpCiAgICAgYnVpbHRpbnNIZWFk
ZXIud3JpdGUoIlxuIikKICAgICBidWlsdGluc0hlYWRlci53cml0ZSgiI2RlZmluZSBKU0NfRk9S
RUFDSF8lc19CVUlMVElOKG1hY3JvKSBcXFxuIiAlIG9iamVjdE5hbWUucmVwbGFjZSgiLiIsICJf
IikudXBwZXIoKSkKLSAgICBmb3IgKG5hbWUsIGltcGxlbWVudGF0aW9uLCBhcmd1bWVudHMpIGlu
IGZ1bmN0aW9uczoKLSAgICAgICAgbWFuZ2xlZE5hbWUgPSBtYW5nbGVOYW1lKG9iamVjdE5hbWUs
IG5hbWUpCi0gICAgICAgIGJ1aWx0aW5zSGVhZGVyLndyaXRlKCIgICAgbWFjcm8oJXMsICVzLCAl
ZCkgXFxcbiIgJSAobmFtZSwgbWFuZ2xlZE5hbWUsIGxlbihhcmd1bWVudHMpKSkKKyAgICBmb3Ig
ZnVuY3Rpb24gaW4gZnVuY3Rpb25zOgorICAgICAgICBtYW5nbGVkTmFtZSA9IGZ1bmN0aW9uLm1h
bmdsZU5hbWUob2JqZWN0TmFtZSkKKyAgICAgICAgYnVpbHRpbnNIZWFkZXIud3JpdGUoIiAgICBt
YWNybyglcywgJXMsICVkKSBcXFxuIiAlIChmdW5jdGlvbi5uYW1lLCBtYW5nbGVkTmFtZSwgbGVu
KGZ1bmN0aW9uLnBhcmFtZXRlcnMpKSkKICAgICBidWlsdGluc0hlYWRlci53cml0ZSgiXG4iKQot
ICAgIGZvciAobmFtZSwgaW1wbGVtZW50YXRpb24sIGFyZ3VtZW50cykgaW4gZnVuY3Rpb25zOgot
ICAgICAgICBidWlsdGluc0hlYWRlci53cml0ZSgiI2RlZmluZSBKU0NfQlVJTFRJTl8lcyAxXG4i
ICUgbWFuZ2xlTmFtZShvYmplY3ROYW1lLCBuYW1lKS51cHBlcigpKQorICAgIGZvciBmdW5jdGlv
biBpbiBmdW5jdGlvbnM6CisgICAgICAgIGJ1aWx0aW5zSGVhZGVyLndyaXRlKCIjZGVmaW5lIEpT
Q19CVUlMVElOXyVzIDFcbiIgJSBmdW5jdGlvbi5tYW5nbGVOYW1lKG9iamVjdE5hbWUpLnVwcGVy
KCkpCiAgICAgYnVpbHRpbnNIZWFkZXIud3JpdGUoIlxuXG4iKQogbmFtZXMgPSBbXQogYnVpbHRp
bnNIZWFkZXIud3JpdGUoIiNkZWZpbmUgSlNDX0ZPUkVBQ0hfQlVJTFRJTihtYWNybylcXFxuIikK
LWZvciAoY29kZVJlZmVyZW5jZSwgZnVuY3Rpb25OYW1lLCBzb3VyY2UpIGluIGNvZGVSZWZlcmVu
Y2VzOgotICAgIGJ1aWx0aW5zSGVhZGVyLndyaXRlKCIgICAgbWFjcm8oJXMsICVzLCBzXyVzTGVu
Z3RoKSBcXFxuIiAlIChjb2RlUmVmZXJlbmNlLCBmdW5jdGlvbk5hbWUsIGNvZGVSZWZlcmVuY2Up
KQotICAgIG5hbWVzLmFwcGVuZChmdW5jdGlvbk5hbWUpCitmb3IgKGNvZGVSZWZlcmVuY2UsIGZ1
bmN0aW9uKSBpbiBjb2RlUmVmZXJlbmNlczoKKyAgICBidWlsdGluc0hlYWRlci53cml0ZSgiICAg
IG1hY3JvKCVzLCAlcywgc18lc0xlbmd0aCkgXFxcbiIgJSAoY29kZVJlZmVyZW5jZSwgZnVuY3Rp
b24ubmFtZSwgY29kZVJlZmVyZW5jZSkpCisgICAgbmFtZXMuYXBwZW5kKGZ1bmN0aW9uLm5hbWUp
CiAKIGJ1aWx0aW5zSGVhZGVyLndyaXRlKCJcblxuIikKIGJ1aWx0aW5zSGVhZGVyLndyaXRlKCIj
ZGVmaW5lIEpTQ19GT1JFQUNIX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShtYWNybykgXFxcbiIpCkBA
IC0yNjEsNyArMjcyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICIiIiAgJSAoZ2VuZXJhdG9yU3Ry
aW5nLCBjb3B5cmlnaHRUZXh0KSkKIAotZm9yIChjb2RlUmVmZXJlbmNlLCBuYW1lLCBzb3VyY2Up
IGluIGNvZGVSZWZlcmVuY2VzOgorZm9yIChjb2RlUmVmZXJlbmNlLCBmdW5jdGlvbikgaW4gY29k
ZVJlZmVyZW5jZXM6CisgICAgc291cmNlID0gZnVuY3Rpb24uc291cmNlCiAgICAgc291cmNlID0g
IihmdW5jdGlvbiAiICsgc291cmNlW3NvdXJjZS5pbmRleCgiKCIpOl0gKyAiKSIKICAgICBsaW5l
cyA9IGpzb24uZHVtcHMoc291cmNlKVsxOi0xXS5zcGxpdCgiXFxuIikKICAgICBzb3VyY2VMZW5n
dGggPSBsZW4oc291cmNlKQpAQCAtMjcwLDYgKzI4MiwxMCBAQCBmb3IgKGNvZGVSZWZlcmVuY2Us
IG5hbWUsIHNvdXJjZSkgaW4gY29kZVJlZmVyZW5jZXM6CiAgICAgICAgIHNvdXJjZSA9IHNvdXJj
ZSArICgiICAgIFwiJXNcXG5cIiBcXFxuIiAlIGxpbmUpCiAgICAgYnVpbHRpbnNJbXBsZW1lbnRh
dGlvbi53cml0ZSgiY29uc3QgY2hhciogc18lcyA9XG4lcztcblxuIiAlIChjb2RlUmVmZXJlbmNl
LCBzb3VyY2UpKQogICAgIGJ1aWx0aW5zSW1wbGVtZW50YXRpb24ud3JpdGUoImNvbnN0IGludCBz
XyVzTGVuZ3RoID0gJWQ7XG5cbiIgJSAoY29kZVJlZmVyZW5jZSwgc291cmNlTGVuZ3RoICsgMSkp
ICMgKyAxIGZvciBcbgorICAgIGhhc0NvbnN0cnVjdCA9ICJmYWxzZSIKKyAgICBpZiBmdW5jdGlv
bi5pc0NvbnN0cnVjdG9yOgorICAgICAgICBoYXNDb25zdHJ1Y3QgPSAidHJ1ZSIKKyAgICBidWls
dGluc0ltcGxlbWVudGF0aW9uLndyaXRlKCJjb25zdCBib29sIHNfJXNIYXNDb25zdHJ1Y3QgPSAl
cztcblxuIiAlIChjb2RlUmVmZXJlbmNlLCBoYXNDb25zdHJ1Y3QpKSAjICsgMSBmb3IgXG4KIAog
YnVpbHRpbnNJbXBsZW1lbnRhdGlvbi53cml0ZSgiIiIKICNkZWZpbmUgSlNDX0RFRklORV9CVUlM
VElOX0dFTkVSQVRPUihjb2RlTmFtZSwgZnVuY3Rpb25OYW1lLCBhcmd1bWVudENvdW50KSBcXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggZTg0ZTkz
NDI5NzFjYmQ1MWZmYjY5NTcyOWU4ZmU5MjJiNjRjMGQyOS4uZjFlMzQ0NWQ3NzdhN2ViMzI1ZjEw
OWU3MTNhMmRmNmU5NDc5MWZhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCkBAIC03ODMsNyArNzgzLDcgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoCiAg
ICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxl
ID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKLSAgICAg
ICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5pc0J1aWx0aW5GdW5j
dGlvbigpKSB7CisgICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmICFmdW5jdGlvbkV4ZWN1dGFi
bGUtPmhhc0NvbnN0cnVjdCgpKSB7CiAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkpOwogICAg
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwogICAgICAgICB9CkBAIC04NDgsNyArODQ4LDcgQEAgaW5saW5lIGNoYXIqIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oCiAgICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNK
SVRDb2RlRm9yKGtpbmQpKSkgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUp
OwogCi0gICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+aXNC
dWlsdGluRnVuY3Rpb24oKSkgeworICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiAhZnVuY3Rp
b25FeGVjdXRhYmxlLT5oYXNDb25zdHJ1Y3QoKSkgewogICAgICAgICAgICAgZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBmdW5j
dGlvbikpOwogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCAxOTM0ZTU3MDQzOGUzY2JlYzlhNDhh
MTZmNzMwZDQ1M2VlZmI2NWI0Li45MDFiNjE1NDg3YzdiN2Q0MTU4MzU5MzU1MDE2ODkwM2M1YmUw
MmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAKQEAgLTExMDQsNyArMTEwNCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBD
YWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlCiAgICAgZWxz
ZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKLSAgICAgICAgaWYg
KCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5pc0J1aWx0aW5GdW5jdGlvbigp
KQorICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiAhZnVuY3Rpb25FeGVjdXRhYmxlLT5oYXND
b25zdHJ1Y3QoKSkKICAgICAgICAgICAgIExMSU5UX0NBTExfVEhST1coZXhlYywgY3JlYXRlTm90
QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKSk7CiAKICAgICAgICAgSlNPYmplY3QqIGVy
cm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUs
IGNhbGxlZSwgc2NvcGUsIGtpbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwCmluZGV4IDQ4YTcxYzc3YjFmNmJjOGQ5NDFhZWRjMzczN2UwODUwNDcxOWFhYWEuLjViNWM1
NzUyMDE5ZTE3NWI2OTRjYTMzZDFjYjA0ZmQ5OTczZGY5NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTE4OTgsNyArMTg5OCw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VDbGFzcyhUCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbklu
Zm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87CiAgICAgICAgICAgICBib29sIGlzQ29uc3RydWN0
b3IgPSAhaXNTdGF0aWNNZXRob2QgJiYgKmlkZW50ID09IHByb3BlcnR5TmFtZXMuY29uc3RydWN0
b3I7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwg
RnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgaXNTdGF0aWNNZXRob2QgPyBOb3JtYWxGdW5jdGlvbk1v
ZGUgOiBNZXRob2RNb2RlLCBmYWxzZSwgaXNDb25zdHJ1Y3RvciA/IGNvbnN0cnVjdG9yS2luZCA6
IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIG1ldGhvZFN0YXJ0
LCBtZXRob2RJbmZvLCBTdGFuZGFyZEZ1bmN0aW9uUGFyc2VUeXBlKSksICJDYW5ub3QgcGFyc2Ug
dGhpcyBtZXRob2QiKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5m
byhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBNZXRob2RNb2RlLCBmYWxzZSwgaXND
b25zdHJ1Y3RvciA/IGNvbnN0cnVjdG9yS2luZCA6IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3Vw
ZXJCaW5kaW5nOjpOZWVkZWQsIG1ldGhvZFN0YXJ0LCBtZXRob2RJbmZvLCBTdGFuZGFyZEZ1bmN0
aW9uUGFyc2VUeXBlKSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKICAgICAgICAgICAg
IGZhaWxJZlRydWUoIWlkZW50IHx8IChkZWNsYXJlVmFyaWFibGUoaWRlbnQpICYgRGVjbGFyYXRp
b25SZXN1bHQ6OkludmFsaWRTdHJpY3RNb2RlKSwgIkNhbm5vdCBkZWNsYXJlIGEgbWV0aG9kIG5h
bWVkICciLCBtZXRob2RJbmZvLm5hbWUtPmltcGwoKSwgIiciKTsKICAgICAgICAgICAgIG1ldGhv
ZEluZm8ubmFtZSA9IGlzQ29uc3RydWN0b3IgPyBjbGFzc05hbWUgOiBpZGVudDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKaW5kZXggMDAwMWQ1YzQ0MjJi
YWM1OWY3ZjA4ZmQ0ODFmZDUzNjhlYmRlNzEzNS4uODdiY2E2MTU4NGU0MTYwMjFjNGFhZGIyYjJi
N2I0OGU4OTg1OWQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29kZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2Fj
aGUuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENv
ZGVDYWNoZTo6Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoVk0mIHYKICAgICBi
b2R5LT5zZXRFbmRQb3NpdGlvbihwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKTsKICAgICAvLyBU
aGUgRnVuY3Rpb24gY29uc3RydWN0b3Igb25seSBoYXMgYWNjZXNzIHRvIGdsb2JhbCB2YXJpYWJs
ZXMsIHNvIG5vIHZhcmlhYmxlcyB3aWxsIGJlIHVuZGVyIFREWi4KICAgICBWYXJpYWJsZUVudmly
b25tZW50IGVtcHR5VERaVmFyaWFibGVzOwotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRl
KCZ2bSwgc291cmNlLCBib2R5LCBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBlbXB0eVREWlZhcmlh
Ymxlcyk7CisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoJnZtLCBzb3VyY2UsIGJvZHks
IFVubGlua2VkTm9ybWFsRnVuY3Rpb24sIENvbnN0cnVjdEFiaWxpdHk6Okhhc0NvbnN0cnVjdCwg
ZW1wdHlURFpWYXJpYWJsZXMpOwogICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+bV9uYW1lVmFsdWUu
c2V0KHZtLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGpzU3RyaW5nKCZ2bSwgbmFtZS5zdHJpbmcoKSkp
OwogCiAgICAgbV9zb3VyY2VDb2RlLmFkZENhY2hlKGtleSwgU291cmNlQ29kZVZhbHVlKHZtLCBm
dW5jdGlvbkV4ZWN1dGFibGUsIG1fc291cmNlQ29kZS5hZ2UoKSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5kZXggZmRhNTI4OTY1
OWM0ODdmNGZmYjg0ZDQ0MDhkOGYwY2ExNTI2ZDIwZi4uOWI5Mzk4N2IxYjE2ZGI1M2VjOTVhNDM3
NjE3MWI3Y2RmMGM5NTNiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC0yNTMsNyArMjUzLDYgQEAKIAogI2RlZmluZSBKU0Nf
Q09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKG1hY3JvKSBcCiAg
ICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNTX0VBQ0hfTkFNRShtYWNybykgXAotICAg
IG1hY3JvKHN5bWJvbEl0ZXJhdG9yKSBcCiAgICAgbWFjcm8oaXRlcmF0ZWRPYmplY3QpIFwKICAg
ICBtYWNybyhhcnJheUl0ZXJhdG9yTmV4dEluZGV4KSBcCiAgICAgbWFjcm8oYXJyYXlJdGVyYXRp
b25LaW5kKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKaW5k
ZXggOGQ4NzEwN2E1ODYzZWRmZjQ1YTJlM2QzM2QxNWVhOGU0NGMyNTUyMi4uYWQ1MmQyYjZiNWQ3
OWJkZjFhYTY4ZDJmNjM2ZDQ4N2NhNjRiZjQwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaApAQCAtNjMwLDYgKzYzMCw3IEBAIGNsYXNzIEZ1bmN0aW9uRXhl
Y3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKICAgICAgICAgCiAgICAg
RnVuY3Rpb25Nb2RlIGZ1bmN0aW9uTW9kZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxl
LT5mdW5jdGlvbk1vZGUoKTsgfQogICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsgfQorICAg
IGJvb2wgaGFzQ29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUt
Pmhhc0NvbnN0cnVjdCgpOyB9CiAgICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5pc0NsYXNzQ29uc3RydWN0b3JG
dW5jdGlvbigpOyB9CiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSgpIHsgcmV0dXJuIG1fdW5s
aW5rZWRFeGVjdXRhYmxlLT5uYW1lKCk7IH0KICAgICBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJl
ZE5hbWUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCk7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggMWI4
YzQwN2VjM2Q0OTQ5YjYwNmVjOTViOWFjOWI0ZTJkZmM2ODEyZi4uODAyNTE4NjlhMGU1YmEyMTgz
ZTcyYzEyNTMzODNmMDY1YzMzN2M4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5jcHAKQEAgLTU1MiwxNCArNTUyLDE2IEBAIENvbnN0cnVjdFR5cGUgSlNG
dW5jdGlvbjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqIGNlbGwsIENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oY2VsbCk7CiAKLSAgICBpZiAodGhpc09iamVjdC0+aXNCdWlsdGluRnVuY3Rpb24oKSkKLSAg
ICAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVOb25lOwotCiAgICAgaWYgKHRoaXNPYmplY3QtPmlz
SG9zdEZ1bmN0aW9uKCkpIHsKICAgICAgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24g
PSB0aGlzT2JqZWN0LT5uYXRpdmVDb25zdHJ1Y3RvcigpOwogICAgICAgICByZXR1cm4gQ29uc3Ry
dWN0VHlwZUhvc3Q7CiAgICAgfQotICAgIGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRh
YmxlID0gdGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCk7CisKKyAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpOworICAg
IGlmICghZnVuY3Rpb25FeGVjdXRhYmxlLT5oYXNDb25zdHJ1Y3QoKSkKKyAgICAgICAgcmV0dXJu
IENvbnN0cnVjdFR5cGVOb25lOworCisgICAgY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1
dGFibGUgPSBmdW5jdGlvbkV4ZWN1dGFibGU7CiAgICAgY29uc3RydWN0RGF0YS5qcy5zY29wZSA9
IHRoaXNPYmplY3QtPnNjb3BlKCk7CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVKUzsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRl
eCA0MTljMWIyNzc5OTQyOGI2ZjZhZjU5NTgyMjE5ZGY5YjNmMTUxODNmLi4wNDNlOTM4OWNlYzY5
MDU4OWE1NmEzOGFjNWIxODk2M2YxZmZiYWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC01MDYsNyArNTA2LDcgQEAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPiBqc05hbWUsIGxvd2Vy
TmFtZSAjIyBDb25zdHJ1Y3QKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5
TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZEtleVByaXZhdGVOYW1lLCBqc051bWJlcihBcnJheUl0
ZXJhdGVLZXkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEds
b2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5hcnJheUl0ZXJhdGlvbktpbmRWYWx1
ZVByaXZhdGVOYW1lLCBqc051bWJlcihBcnJheUl0ZXJhdGVWYWx1ZSksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3Bl
cnR5TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZEtleVZhbHVlUHJpdmF0ZU5hbWUsIGpzTnVtYmVy
KEFycmF5SXRlcmF0ZUtleVZhbHVlKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
LAotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+c3ltYm9sSXRl
cmF0b3JQcml2YXRlTmFtZSwgU3ltYm9sOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PFN5bWJvbElt
cGwmPigqdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wuaW1wbCgpKSksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnN5bWJvbEl0ZXJhdG9yUHJpdmF0ZU5hbWUo
KSwgU3ltYm9sOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqdm0ucHJvcGVy
dHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wuaW1wbCgpKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KSwKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgICAgIEdsb2JhbFByb3BlcnR5
SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5Qcm9taXNlUHJpdmF0ZU5hbWUsIG1fcHJvbWlzZUNvbnN0
cnVjdG9yLmdldCgpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAg
IEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5wcm9taXNlUGVuZGluZ1ByaXZh
dGVOYW1lLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNQcm9taXNlOjpTdGF0dXM6
OlBlbmRpbmcpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9ub24tY29uc3RydWN0b3JzLmpz
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9ub24tY29uc3RydWN0b3JzLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjMyZGU3MTk5MTQzNDlhZjQ4MGY0YzI2MTdjODBkZjA5OGMzMzljYzcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL25vbi1j
b25zdHJ1Y3RvcnMuanMKQEAgLTAsMCArMSwxMTYgQEAKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1
bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93biA9IGZhbHNlOworICAgIHZh
ciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBlcnJvciA9IGU7Cisg
ICAgfQorICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90
IHRocm93bicpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7Cit9CisK
K2NsYXNzIENsYXNzVGVzdCB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgfQorCisgICAgbWV0
aG9kKCkgeworICAgIH0KKworICAgIGdldCBnZXR0ZXIoKSB7CisgICAgICAgIHJldHVybiAyMDsK
KyAgICB9CisKKyAgICBzZXQgc2V0dGVyKG5hbWUpIHsKKyAgICB9CisKKyAgICBzdGF0aWMgbWV0
aG9kKCkgeworICAgIH0KKworICAgIHN0YXRpYyBnZXQgZ2V0dGVyKCkgeworICAgICAgICByZXR1
cm4gMjA7CisgICAgfQorCisgICAgc3RhdGljIHNldCBzZXR0ZXIobmFtZSkgeworICAgICAgICBy
ZXR1cm4gMjA7CisgICAgfQorfTsKKworLy8gU2hvdWxkIG5vdCB0aHJvdyAoJ2NvbnN0cnVjdG9y
JyBpcyBhIGZ1bmN0aW9uKS4KK3ZhciB0ZXN0ID0gbmV3IENsYXNzVGVzdCgpOwordmFyIHRlc3Qy
ID0gbmV3IHRlc3QuY29uc3RydWN0b3IoKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIG5l
dyB0ZXN0Lm1ldGhvZCgpOworfSwgYFR5cGVFcnJvcjogZnVuY3Rpb24gaXMgbm90IGEgY29uc3Ry
dWN0b3IgKGV2YWx1YXRpbmcgJ25ldyB0ZXN0Lm1ldGhvZCgpJylgKTsKKworc2hvdWxkVGhyb3co
KCkgPT4geworICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih0ZXN0Ll9fcHJvdG9fXywgJ2dldHRlcicpOworICAgIG5ldyBkZXNjcmlwdG9yLmdldCgp
OworfSwgYFR5cGVFcnJvcjogZnVuY3Rpb24gaXMgbm90IGEgY29uc3RydWN0b3IgKGV2YWx1YXRp
bmcgJ25ldyBkZXNjcmlwdG9yLmdldCgpJylgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAg
IHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0ZXN0Ll9f
cHJvdG9fXywgJ3NldHRlcicpOworICAgIG5ldyBkZXNjcmlwdG9yLnNldCgpOworfSwgYFR5cGVF
cnJvcjogZnVuY3Rpb24gaXMgbm90IGEgY29uc3RydWN0b3IgKGV2YWx1YXRpbmcgJ25ldyBkZXNj
cmlwdG9yLnNldCgpJylgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIG5ldyBDbGFzc1Rl
c3QubWV0aG9kKCk7Cit9LCBgVHlwZUVycm9yOiBmdW5jdGlvbiBpcyBub3QgYSBjb25zdHJ1Y3Rv
ciAoZXZhbHVhdGluZyAnbmV3IENsYXNzVGVzdC5tZXRob2QoKScpYCk7CisKK3Nob3VsZFRocm93
KCgpID0+IHsKKyAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoQ2xhc3NUZXN0LCAnZ2V0dGVyJyk7CisgICAgbmV3IGRlc2NyaXB0b3IuZ2V0KCk7Cit9
LCBgVHlwZUVycm9yOiBmdW5jdGlvbiBpcyBub3QgYSBjb25zdHJ1Y3RvciAoZXZhbHVhdGluZyAn
bmV3IGRlc2NyaXB0b3IuZ2V0KCknKWApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgdmFy
IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKENsYXNzVGVzdCwg
J3NldHRlcicpOworICAgIG5ldyBkZXNjcmlwdG9yLnNldCgpOworfSwgYFR5cGVFcnJvcjogZnVu
Y3Rpb24gaXMgbm90IGEgY29uc3RydWN0b3IgKGV2YWx1YXRpbmcgJ25ldyBkZXNjcmlwdG9yLnNl
dCgpJylgKTsKKworCit2YXIgdGVzdCA9IHsKKyAgICBtZXRob2QoKSB7CisgICAgfSwKKworICAg
IGdldCBnZXR0ZXIoKSB7CisgICAgICAgIHJldHVybiAyMDsKKyAgICB9LAorCisgICAgc2V0IHNl
dHRlcihuYW1lKSB7CisgICAgfSwKKworICAgIG5vcm1hbDogZnVuY3Rpb24gKCkgeworICAgIH0s
CisKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICB9Cit9OworCitzaG91bGRUaHJvdygoKSA9PiB7
CisgICAgbmV3IHRlc3QubWV0aG9kKCk7Cit9LCBgVHlwZUVycm9yOiBmdW5jdGlvbiBpcyBub3Qg
YSBjb25zdHJ1Y3RvciAoZXZhbHVhdGluZyAnbmV3IHRlc3QubWV0aG9kKCknKWApOworCitzaG91
bGRUaHJvdygoKSA9PiB7CisgICAgbmV3IHRlc3QuY29uc3RydWN0b3IoKTsKK30sIGBUeXBlRXJy
b3I6IGZ1bmN0aW9uIGlzIG5vdCBhIGNvbnN0cnVjdG9yIChldmFsdWF0aW5nICduZXcgdGVzdC5j
b25zdHJ1Y3RvcigpJylgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIHZhciBkZXNjcmlw
dG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0ZXN0LCAnZ2V0dGVyJyk7Cisg
ICAgbmV3IGRlc2NyaXB0b3IuZ2V0KCk7Cit9LCBgVHlwZUVycm9yOiBmdW5jdGlvbiBpcyBub3Qg
YSBjb25zdHJ1Y3RvciAoZXZhbHVhdGluZyAnbmV3IGRlc2NyaXB0b3IuZ2V0KCknKWApOworCitz
aG91bGRUaHJvdygoKSA9PiB7CisgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHRlc3QsICdzZXR0ZXInKTsKKyAgICBuZXcgZGVzY3JpcHRvci5zZXQo
KTsKK30sIGBUeXBlRXJyb3I6IGZ1bmN0aW9uIGlzIG5vdCBhIGNvbnN0cnVjdG9yIChldmFsdWF0
aW5nICduZXcgZGVzY3JpcHRvci5zZXQoKScpYCk7CisKK25ldyB0ZXN0Lm5vcm1hbCgpOworCitz
aG91bGRUaHJvdygoKSA9PiB7CisgICAgdmFyIGFycm93ID0gKCkgPT4geyB9OworICAgIG5ldyBh
cnJvdygpOworfSwgYFR5cGVFcnJvcjogZnVuY3Rpb24gaXMgbm90IGEgY29uc3RydWN0b3IgKGV2
YWx1YXRpbmcgJ25ldyBhcnJvdygpJylgKTsK
</data>
<flag name="review"
          id="282445"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="282456"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>