<?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>111971</bug_id>
          
          <creation_ts>2013-03-11 04:04:09 -0700</creation_ts>
          <short_desc>[V8] Get rid of function-level static FunctionTemplates in generated bindings code</short_desc>
          <delta_ts>2013-03-12 03:49:30 -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>
          <dependson>112117</dependson>
          <blocked>111724</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Marja Hölttä">marja</reporter>
          <assigned_to name="Marja Hölttä">marja</assigned_to>
          <cc>abarth</cc>
    
    <cc>dcarney</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>852175</commentid>
    <comment_count>0</comment_count>
    <who name="Marja Hölttä">marja</who>
    <bug_when>2013-03-11 04:04:09 -0700</bug_when>
    <thetext>When we create and store function templates for main world and non-main worlds separately (see bug 111724), having function templates as static variables inside functions breaks it. (We cannot make it initialize with some world type when the execution runs through that line of code for the first time, and use it later for a different world type when the function is called again.)

The patch (which will be attached soon) gets rid of these function-level statics and stores the functiontemplates inside V8PerIsolateData instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852234</commentid>
    <comment_count>1</comment_count>
      <attachid>192456</attachid>
    <who name="Marja Hölttä">marja</who>
    <bug_when>2013-03-11 06:15:07 -0700</bug_when>
    <thetext>Created attachment 192456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852249</commentid>
    <comment_count>2</comment_count>
      <attachid>192456</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-03-11 06:55:45 -0700</bug_when>
    <thetext>Comment on attachment 192456
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:807
&gt; +    // This is only for getting a unique pointer which we can pass to privateTemplateMap.
&gt; +    static String privateTemplateUniqueKey = &quot;${funcName}PrivateTemplate&quot;;
&gt; +    WrapperWorldType currentWorldType = worldType(info.GetIsolate());
&gt; +    V8PerIsolateData::PrivateTemplateMap&amp; templateMap = V8PerIsolateData::from(info.GetIsolate())-&gt;privateTemplateMap(currentWorldType);
&gt; +    v8::Persistent&lt;v8::FunctionTemplate&gt; privateTemplate;
&gt; +    V8PerIsolateData::PrivateTemplateMap::iterator result = templateMap.find(&amp;privateTemplateUniqueKey);
&gt; +    if (result == templateMap.end()) {
&gt; +        privateTemplate = v8::Persistent&lt;v8::FunctionTemplate&gt;::New(info.GetIsolate(), $newTemplateString);
&gt; +        templateMap.add(&amp;privateTemplateUniqueKey, privateTemplate);
&gt; +    } else
&gt; +        privateTemplate = result-&gt;value;
&gt; +
&gt; +    v8::Handle&lt;v8::Object&gt; holder = info.This()-&gt;FindInstanceInPrototypeChain(${v8InterfaceName}::GetTemplate(info.GetIsolate(), currentWorldType));

You are duplicating the code to multiple places in V8LocationCustom.cpp. Shall we create a helper method that does the work in V8PerIsolateData.cpp ?

Just to confirm: This change won&apos;t affect any performance-sensitive DOM attributes, right?

&gt; Source/WebCore/bindings/v8/V8PerIsolateData.h:73
&gt; +    typedef HashMap&lt;void*, v8::Persistent&lt;v8::FunctionTemplate&gt; &gt; PrivateTemplateMap;

Maybe PerWorldTemplateMap is a better name?

&gt; Source/WebCore/bindings/v8/V8PerIsolateData.h:75
&gt; +    PrivateTemplateMap&amp; privateTemplateMap(WrapperWorldType worldType)

perWorldTemplateMap ?

&gt; Source/WebCore/bindings/v8/V8PerIsolateData.h:147
&gt; +    PrivateTemplateMap m_privateTemplatesForMainWorld;

m_perWorldTemplatesForMainWorld ?

&gt; Source/WebCore/bindings/v8/V8PerIsolateData.h:148
&gt; +    PrivateTemplateMap m_privateTemplatesForNonMainWorld;

m_perWorldTemplatesForNonMainWorld ?

Let&apos;s add a comment about what &quot;NonMainWorld&quot; means, i.e. let&apos;s say that this template map can be used for both an isolated world and a worker world.

&gt; Source/WebCore/bindings/v8/custom/V8LocationCustom.cpp:198
&gt; +        static String sharedTemplateUniqueKey = &quot;$replaceSharedTemplate&quot;;

&quot;$replaceSharedTemplate&quot; =&gt; &quot;replaceSharedTemplate&quot;

A helper method will resolve your typo:)

&gt; Source/WebCore/bindings/v8/custom/V8LocationCustom.cpp:234
&gt; +        static String sharedTemplateUniqueKey = &quot;${funcName}SharedTemplate&quot;;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852355</commentid>
    <comment_count>3</comment_count>
      <attachid>192476</attachid>
    <who name="Marja Hölttä">marja</who>
    <bug_when>2013-03-11 08:39:12 -0700</bug_when>
    <thetext>Created attachment 192476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852356</commentid>
    <comment_count>4</comment_count>
      <attachid>192456</attachid>
    <who name="Marja Hölttä">marja</who>
    <bug_when>2013-03-11 08:39:24 -0700</bug_when>
    <thetext>Comment on attachment 192456
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:807
&gt;&gt; +    v8::Handle&lt;v8::Object&gt; holder = info.This()-&gt;FindInstanceInPrototypeChain(${v8InterfaceName}::GetTemplate(info.GetIsolate(), currentWorldType));
&gt; 
&gt; You are duplicating the code to multiple places in V8LocationCustom.cpp. Shall we create a helper method that does the work in V8PerIsolateData.cpp ?
&gt; 
&gt; Just to confirm: This change won&apos;t affect any performance-sensitive DOM attributes, right?

Helper method created.

&gt;&gt; Source/WebCore/bindings/v8/V8PerIsolateData.h:73
&gt;&gt; +    typedef HashMap&lt;void*, v8::Persistent&lt;v8::FunctionTemplate&gt; &gt; PrivateTemplateMap;
&gt; 
&gt; Maybe PerWorldTemplateMap is a better name?

This no longer exists, everything is stored in the same map, as discussed.

&gt;&gt; Source/WebCore/bindings/v8/V8PerIsolateData.h:75
&gt;&gt; +    PrivateTemplateMap&amp; privateTemplateMap(WrapperWorldType worldType)
&gt; 
&gt; perWorldTemplateMap ?

The same here.

&gt;&gt; Source/WebCore/bindings/v8/V8PerIsolateData.h:147
&gt;&gt; +    PrivateTemplateMap m_privateTemplatesForMainWorld;
&gt; 
&gt; m_perWorldTemplatesForMainWorld ?

This no longer exists.

&gt;&gt; Source/WebCore/bindings/v8/V8PerIsolateData.h:148
&gt;&gt; +    PrivateTemplateMap m_privateTemplatesForNonMainWorld;
&gt; 
&gt; m_perWorldTemplatesForNonMainWorld ?
&gt; 
&gt; Let&apos;s add a comment about what &quot;NonMainWorld&quot; means, i.e. let&apos;s say that this template map can be used for both an isolated world and a worker world.

This no longer exists.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8LocationCustom.cpp:198
&gt;&gt; +        static String sharedTemplateUniqueKey = &quot;$replaceSharedTemplate&quot;;
&gt; 
&gt; &quot;$replaceSharedTemplate&quot; =&gt; &quot;replaceSharedTemplate&quot;
&gt; 
&gt; A helper method will resolve your typo:)

Fixed

&gt;&gt; Source/WebCore/bindings/v8/custom/V8LocationCustom.cpp:234
&gt;&gt; +        static String sharedTemplateUniqueKey = &quot;${funcName}SharedTemplate&quot;;
&gt; 
&gt; Ditto.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852953</commentid>
    <comment_count>5</comment_count>
      <attachid>192476</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-03-11 18:23:58 -0700</bug_when>
    <thetext>Comment on attachment 192476
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:809
&gt; +        static String sharedTemplateUniqueKey = &quot;${funcName}SharedTemplate&quot;;
&gt; +        v8::Persistent&lt;v8::FunctionTemplate&gt; sharedTemplate = V8PerIsolateData::from(info.GetIsolate())-&gt;privateTemplate(currentWorldType, &amp;sharedTemplateUniqueKey, $newTemplateParams);

I understand that we need to use a different template from &apos;privateTemplate&apos;, but still I don&apos;t understand why it is called &apos;sharedTemplate&apos; (What does &apos;shared&apos; mean?). We might want a more descriptive name.

Either way you can fix it in a follow-up patch.

&gt; Source/WebCore/bindings/v8/V8PerIsolateData.h:68
&gt; +    typedef HashMap&lt;void*, v8::Persistent&lt;v8::FunctionTemplate&gt; &gt; TemplateMap;

Do you have a plan to use any key whose type is not a string? (Although we discussed it offline, I forgot where we reached:-)

Otherwise, you can use a string key for safety. void* is hacky (and might be vulnerable).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853141</commentid>
    <comment_count>6</comment_count>
      <attachid>192476</attachid>
    <who name="Marja Hölttä">marja</who>
    <bug_when>2013-03-12 00:30:23 -0700</bug_when>
    <thetext>Comment on attachment 192476
Patch

Offline discussion: void* needs to be void*, since WrapperTypeInfo* pointers are also used as a key. Renaming private &amp; shared left out of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853156</commentid>
    <comment_count>7</comment_count>
      <attachid>192476</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-12 00:54:44 -0700</bug_when>
    <thetext>Comment on attachment 192476
Patch

Clearing flags on attachment: 192476

Committed r145494: &lt;http://trac.webkit.org/changeset/145494&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853157</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-12 00:54:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853209</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-12 02:06:33 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 112117</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853250</commentid>
    <comment_count>10</comment_count>
      <attachid>192685</attachid>
    <who name="Marja Hölttä">marja</who>
    <bug_when>2013-03-12 02:53:19 -0700</bug_when>
    <thetext>Created attachment 192685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853255</commentid>
    <comment_count>11</comment_count>
    <who name="Marja Hölttä">marja</who>
    <bug_when>2013-03-12 02:55:01 -0700</bug_when>
    <thetext>The new patch changes static String -&gt; static const char*; no other changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853259</commentid>
    <comment_count>12</comment_count>
      <attachid>192685</attachid>
    <who name="">jochen</who>
    <bug_when>2013-03-12 02:59:08 -0700</bug_when>
    <thetext>Comment on attachment 192685
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853294</commentid>
    <comment_count>13</comment_count>
      <attachid>192685</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-12 03:49:25 -0700</bug_when>
    <thetext>Comment on attachment 192685
Patch

Clearing flags on attachment: 192685

Committed r145511: &lt;http://trac.webkit.org/changeset/145511&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853295</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-12 03:49:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192456</attachid>
            <date>2013-03-11 06:15:07 -0700</date>
            <delta_ts>2013-03-11 08:39:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111971-20130311141107.patch</filename>
            <type>text/plain</type>
            <size>20227</size>
            <attacher name="Marja Hölttä">marja</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc1ZTUwMDYyZDc1YmEx
OGYzNmYwYzAzYzMwNTUyNzg3ZTMyYmFhNi4uZTE0ZWVlZjgzMTM0YWJlYjRkZWU0M2ZlOWQ0OTI5
ZjA5Y2QzNmIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMzIEBACiAyMDEzLTAzLTExICBNYXJq
YSBIw7ZsdHTDpCAgPG1hcmphQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbVjhdIEdldCByaWQg
b2YgZnVuY3Rpb24tbGV2ZWwgc3RhdGljIEZ1bmN0aW9uVGVtcGxhdGVzIGluIGdlbmVyYXRlZCBi
aW5kaW5ncyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTE5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiB0aGUgZnV0dXJlIHdlJ2xsIGNyZWF0ZSBhbmQgc3RvcmUgZnVuY3Rpb24gdGVtcGxh
dGVzIGZvciBtYWluIHdvcmxkCisgICAgICAgIGFuZCBub24tbWFpbiB3b3JsZHMgc2VwYXJhdGVs
eSAoc2VlIGJ1ZyAxMTE3MjQpLCBoYXZpbmcgZnVuY3Rpb24KKyAgICAgICAgdGVtcGxhdGVzIGFz
IHN0YXRpYyB2YXJpYWJsZXMgaW5zaWRlIGZ1bmN0aW9ucyB3aWxsIGJyZWFrIHRoZQorICAgICAg
ICBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAodXBkYXRlZCB0aGUgYmlu
ZGluZ3MgdGVzdCBleHBlY3RhdGlvbnMpLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZURvbWFpblNhZmVGdW5jdGlvbkdl
dHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURP
TU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRl
cm5hbDo6cG9zdE1lc3NhZ2VBdHRyR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFBl
cklzb2xhdGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UGVySXNvbGF0ZURhdGE6OnJl
cG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFBlcklzb2xhdGVEYXRh
Lmg6CisgICAgICAgIChWOFBlcklzb2xhdGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UGVy
SXNvbGF0ZURhdGE6OnByaXZhdGVUZW1wbGF0ZU1hcCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhMb2NhdGlv
bjo6cmVsb2FkQXR0ckdldHRlckN1c3RvbSk6CisgICAgICAgIChXZWJDb3JlOjpWOExvY2F0aW9u
OjpyZXBsYWNlQXR0ckdldHRlckN1c3RvbSk6CisgICAgICAgIChXZWJDb3JlOjpWOExvY2F0aW9u
Ojphc3NpZ25BdHRyR2V0dGVyQ3VzdG9tKToKKworMjAxMy0wMy0xMSAgTWFyamEgSMO2bHR0w6Qg
IDxtYXJqYUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgW1Y4XSBGaXggVjhJbmplY3RlZFNjcmlw
dE1hbmFnZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMTk2OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCmluZGV4IGUzOGFmNGQxNTY1ZGQ5YmU1ZGY0YmY1MDdmM2YyOGY2ZGZjMDE0
M2MuLjIwYjQ1MTQyYTM4NmYyYWMxZDUxODJlNWYyMGUzNjFiZjYxNjFmNzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC03
OTIsOCArNzkyLDE5IEBAIHN1YiBHZW5lcmF0ZURvbWFpblNhZmVGdW5jdGlvbkdldHRlcgogICAg
IHB1c2goQGltcGxDb250ZW50SW50ZXJuYWxzLCA8PEVORCk7CiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+ICR7ZnVuY05hbWV9QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICBzdGF0aWMgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHByaXZhdGVUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KGluZm8uR2V0SXNvbGF0ZSgpLCAkbmV3VGVt
cGxhdGVTdHJpbmcpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5U
aGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oJHt2OEludGVyZmFjZU5hbWV9OjpH
ZXRUZW1wbGF0ZShpbmZvLkdldElzb2xhdGUoKSwgd29ybGRUeXBlKGluZm8uR2V0SXNvbGF0ZSgp
KSkpOworICAgIC8vIFRoaXMgaXMgb25seSBmb3IgZ2V0dGluZyBhIHVuaXF1ZSBwb2ludGVyIHdo
aWNoIHdlIGNhbiBwYXNzIHRvIHByaXZhdGVUZW1wbGF0ZU1hcC4KKyAgICBzdGF0aWMgU3RyaW5n
IHByaXZhdGVUZW1wbGF0ZVVuaXF1ZUtleSA9ICIke2Z1bmNOYW1lfVByaXZhdGVUZW1wbGF0ZSI7
CisgICAgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlID0gd29ybGRUeXBlKGluZm8u
R2V0SXNvbGF0ZSgpKTsKKyAgICBWOFBlcklzb2xhdGVEYXRhOjpQcml2YXRlVGVtcGxhdGVNYXAm
IHRlbXBsYXRlTWFwID0gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpbmZvLkdldElzb2xhdGUoKSkt
PnByaXZhdGVUZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKTsKKyAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlOworICAgIFY4UGVySXNvbGF0
ZURhdGE6OlByaXZhdGVUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gdGVtcGxhdGVNYXAu
ZmluZCgmcHJpdmF0ZVRlbXBsYXRlVW5pcXVlS2V5KTsKKyAgICBpZiAocmVzdWx0ID09IHRlbXBs
YXRlTWFwLmVuZCgpKSB7CisgICAgICAgIHByaXZhdGVUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KGluZm8uR2V0SXNvbGF0ZSgpLCAkbmV3VGVtcGxh
dGVTdHJpbmcpOworICAgICAgICB0ZW1wbGF0ZU1hcC5hZGQoJnByaXZhdGVUZW1wbGF0ZVVuaXF1
ZUtleSwgcHJpdmF0ZVRlbXBsYXRlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHJpdmF0ZVRlbXBs
YXRlID0gcmVzdWx0LT52YWx1ZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVy
ID0gaW5mby5UaGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oJHt2OEludGVyZmFj
ZU5hbWV9OjpHZXRUZW1wbGF0ZShpbmZvLkdldElzb2xhdGUoKSwgY3VycmVudFdvcmxkVHlwZSkp
OwogICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNo
IGhlcmUgYnkgJ29iamVjdC5fX3Byb3RvX18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCiAg
ICAgICAgIC8vIGRvbWFpbiBzZWN1cml0eSBjaGVjayBhbHJlYWR5CkBAIC04MDEsNyArODEyLDE0
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtmdW5jTmFtZX1BdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjCiAgICAgfQogICAgICR7aW50ZXJmYWNlTmFtZX0q
IGltcCA9ICR7djhJbnRlcmZhY2VOYW1lfTo6dG9OYXRpdmUoaG9sZGVyKTsKICAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEJpbmRpbmdTdGF0ZTo6aW5z
dGFuY2UoKSwgaW1wLT5mcmFtZSgpLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKSB7Ci0gICAg
ICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkVGVt
cGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhpbmZvLkdl
dElzb2xhdGUoKSwgJG5ld1RlbXBsYXRlU3RyaW5nKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBz
aGFyZWRUZW1wbGF0ZVVuaXF1ZUtleSA9ICIke2Z1bmNOYW1lfVNoYXJlZFRlbXBsYXRlIjsKKyAg
ICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRl
OworICAgICAgICByZXN1bHQgPSB0ZW1wbGF0ZU1hcC5maW5kKCZzaGFyZWRUZW1wbGF0ZVVuaXF1
ZUtleSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gdGVtcGxhdGVNYXAuZW5kKCkpIHsKKyAgICAg
ICAgICAgIHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+OjpOZXcoaW5mby5HZXRJc29sYXRlKCksICRuZXdUZW1wbGF0ZVN0cmluZyk7CisgICAgICAg
ICAgICB0ZW1wbGF0ZU1hcC5hZGQoJnNoYXJlZFRlbXBsYXRlVW5pcXVlS2V5LCBzaGFyZWRUZW1w
bGF0ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2hhcmVkVGVtcGxhdGUgPSByZXN1
bHQtPnZhbHVlOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDc4YzNmZmY1
ZjU1NjA3NGQwOWVkMjI3NzkxYjM5ZDdjYmViN2ExMDguLmY3MjcwZGRjMjk1M2EwNWNlZTg0NTQ3
NDhiOTcxYzUzNDE3N2E1ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBA
IC0xMjgsOCArMTI4LDE5IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9zdE1lc3Nh
Z2VNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAKIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gcG9zdE1lc3NhZ2VBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAgIHN0YXRpYyB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlID0gdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoaW5mby5HZXRJc29sYXRlKCks
IHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdEFjdGl2ZURPTU9iamVjdFY4SW50ZXJuYWw6
OnBvc3RNZXNzYWdlTWV0aG9kQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIHY4OjpTaWduYXR1cmU6
Ok5ldyhWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFJhd1RlbXBsYXRlKGluZm8uR2V0SXNvbGF0
ZSgpKSkpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uVGhpcygp
LT5GaW5kSW5zdGFuY2VJblByb3RvdHlwZUNoYWluKFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0
VGVtcGxhdGUoaW5mby5HZXRJc29sYXRlKCksIHdvcmxkVHlwZShpbmZvLkdldElzb2xhdGUoKSkp
KTsKKyAgICAvLyBUaGlzIGlzIG9ubHkgZm9yIGdldHRpbmcgYSB1bmlxdWUgcG9pbnRlciB3aGlj
aCB3ZSBjYW4gcGFzcyB0byBwcml2YXRlVGVtcGxhdGVNYXAuCisgICAgc3RhdGljIFN0cmluZyBw
cml2YXRlVGVtcGxhdGVVbmlxdWVLZXkgPSAicG9zdE1lc3NhZ2VQcml2YXRlVGVtcGxhdGUiOwor
ICAgIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSA9IHdvcmxkVHlwZShpbmZvLkdl
dElzb2xhdGUoKSk7CisgICAgVjhQZXJJc29sYXRlRGF0YTo6UHJpdmF0ZVRlbXBsYXRlTWFwJiB0
ZW1wbGF0ZU1hcCA9IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaW5mby5HZXRJc29sYXRlKCkpLT5w
cml2YXRlVGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSk7CisgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHByaXZhdGVUZW1wbGF0ZTsKKyAgICBWOFBlcklzb2xhdGVE
YXRhOjpQcml2YXRlVGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IHRlbXBsYXRlTWFwLmZp
bmQoJnByaXZhdGVUZW1wbGF0ZVVuaXF1ZUtleSk7CisgICAgaWYgKHJlc3VsdCA9PSB0ZW1wbGF0
ZU1hcC5lbmQoKSkgeworICAgICAgICBwcml2YXRlVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhpbmZvLkdldElzb2xhdGUoKSwgdjg6OkZ1bmN0aW9u
VGVtcGxhdGU6Ok5ldyhUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VN
ZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4VGVzdEFj
dGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUoaW5mby5HZXRJc29sYXRlKCkpKSkpOworICAg
ICAgICB0ZW1wbGF0ZU1hcC5hZGQoJnByaXZhdGVUZW1wbGF0ZVVuaXF1ZUtleSwgcHJpdmF0ZVRl
bXBsYXRlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHJpdmF0ZVRlbXBsYXRlID0gcmVzdWx0LT52
YWx1ZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5UaGlzKCkt
PkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRU
ZW1wbGF0ZShpbmZvLkdldElzb2xhdGUoKSwgY3VycmVudFdvcmxkVHlwZSkpOwogICAgIGlmICho
b2xkZXIuSXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUgYnkgJ29i
amVjdC5fX3Byb3RvX18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCiAgICAgICAgIC8vIGRv
bWFpbiBzZWN1cml0eSBjaGVjayBhbHJlYWR5CkBAIC0xMzcsNyArMTQ4LDE0IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9zdE1lc3NhZ2VBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjCiAgICAgfQogICAgIFRlc3RBY3RpdmVET01PYmplY3QqIGltcCA9IFY4
VGVzdEFjdGl2ZURPTU9iamVjdDo6dG9OYXRpdmUoaG9sZGVyKTsKICAgICBpZiAoIUJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEJpbmRpbmdTdGF0ZTo6aW5zdGFuY2Uo
KSwgaW1wLT5mcmFtZSgpLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKSB7Ci0gICAgICAgIHN0
YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkVGVtcGxhdGUg
PSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhpbmZvLkdldElzb2xh
dGUoKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRl
cm5hbDo6cG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgdjg6OlNpZ25h
dHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUoaW5mby5HZXRJ
c29sYXRlKCkpKSkpOworICAgICAgICBzdGF0aWMgU3RyaW5nIHNoYXJlZFRlbXBsYXRlVW5pcXVl
S2V5ID0gInBvc3RNZXNzYWdlU2hhcmVkVGVtcGxhdGUiOworICAgICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkVGVtcGxhdGU7CisgICAgICAgIHJlc3VsdCA9
IHRlbXBsYXRlTWFwLmZpbmQoJnNoYXJlZFRlbXBsYXRlVW5pcXVlS2V5KTsKKyAgICAgICAgaWYg
KHJlc3VsdCA9PSB0ZW1wbGF0ZU1hcC5lbmQoKSkgeworICAgICAgICAgICAgc2hhcmVkVGVtcGxh
dGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhpbmZvLkdldElz
b2xhdGUoKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0QWN0aXZlRE9NT2JqZWN0VjhJ
bnRlcm5hbDo6cG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgdjg6OlNp
Z25hdHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUoaW5mby5H
ZXRJc29sYXRlKCkpKSkpOworICAgICAgICAgICAgdGVtcGxhdGVNYXAuYWRkKCZzaGFyZWRUZW1w
bGF0ZVVuaXF1ZUtleSwgc2hhcmVkVGVtcGxhdGUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHNoYXJlZFRlbXBsYXRlID0gcmVzdWx0LT52YWx1ZTsKICAgICAgICAgcmV0dXJuIHNoYXJl
ZFRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQZXJJc29sYXRlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFBlcklzb2xhdGVEYXRhLmNwcAppbmRleCAwMTAwY2U2ZmFmNjI4NWQ2NGNl
NWUyZjIyZTZiYzNhODM3MTJjN2Q1Li40NGViNzYzYzMzYmE1NzU1NjdhOTc0ZjY1ODA4NjZiNDdl
OTRiODBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlcklzb2xh
dGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlcklzb2xhdGVE
YXRhLmNwcApAQCAtMTExLDYgKzExMSw4IEBAIHZvaWQgVjhQZXJJc29sYXRlRGF0YTo6cmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uCiAgICAg
aW5mby5hZGRNZW1iZXIobV9kb21EYXRhU3RvcmUsICJkb21EYXRhU3RvcmUiKTsKICAgICBpbmZv
LmFkZE1lbWJlcihtX2hpZGRlblByb3BlcnR5TmFtZSwgImhpZGRlblByb3BlcnR5TmFtZSIpOwog
ICAgIGluZm8uYWRkTWVtYmVyKG1fZ2NFdmVudERhdGEsICJnY0V2ZW50RGF0YSIpOworICAgIGlu
Zm8uYWRkTWVtYmVyKG1fcHJpdmF0ZVRlbXBsYXRlc0Zvck1haW5Xb3JsZCwgInByaXZhdGVUZW1w
bGF0ZXNGb3JNYWluV29ybGQiKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX3ByaXZhdGVUZW1wbGF0
ZXNGb3JOb25NYWluV29ybGQsICJwcml2YXRlVGVtcGxhdGVzRm9yTm9uTWFpbldvcmxkIik7CiAK
ICAgICBpbmZvLmFkZFByaXZhdGVCdWZmZXIoU2NyaXB0UHJvZmlsZXI6OnByb2ZpbGVyU25hcHNo
b3RzU2l6ZSgpLCBXZWJDb3JlTWVtb3J5VHlwZXM6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQsICJI
ZWFwU25hcHNob3RzIiwgInNuYXBzaG90cyIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFBlcklzb2xhdGVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFBlcklzb2xhdGVEYXRhLmgKaW5kZXggMzNjZDg0OTk0Nzk3ODg4YzgzOGQxMTQwZjk4
ZWM2MGVkNmFiMzYwOC4uNDUzZDY0YzBlZmFmYmMxOWRjMzliMDgzNzdkOWE0MDE5NWZiNDEzYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJJc29sYXRlRGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVySXNvbGF0ZURhdGEuaApAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBWOFBlcklzb2xhdGVEYXRhX2gKIAogI2luY2x1ZGUgIlNj
b3BlZFBlcnNpc3RlbnQuaCIKKyNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKICNpbmNsdWRl
IDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KQEAgLTY5LDYgKzcwLDE1IEBAIHB1YmxpYzoKICAgICBUZW1wbGF0ZU1hcCYgcmF3VGVtcGxh
dGVNYXAoKSB7IHJldHVybiBtX3Jhd1RlbXBsYXRlczsgfQogICAgIFRlbXBsYXRlTWFwJiB0ZW1w
bGF0ZU1hcCgpIHsgcmV0dXJuIG1fdGVtcGxhdGVzOyB9CiAKKyAgICB0eXBlZGVmIEhhc2hNYXA8
dm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiA+IFByaXZhdGVUZW1w
bGF0ZU1hcDsKKworICAgIFByaXZhdGVUZW1wbGF0ZU1hcCYgcHJpdmF0ZVRlbXBsYXRlTWFwKFdy
YXBwZXJXb3JsZFR5cGUgd29ybGRUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKHdvcmxkVHlwZSA9
PSBNYWluV29ybGQpCisgICAgICAgICAgICByZXR1cm4gbV9wcml2YXRlVGVtcGxhdGVzRm9yTWFp
bldvcmxkOworICAgICAgICByZXR1cm4gbV9wcml2YXRlVGVtcGxhdGVzRm9yTm9uTWFpbldvcmxk
OworICAgIH0KKwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRvU3RyaW5n
VGVtcGxhdGUoKTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4mIGxh
enlFdmVudExpc3RlbmVyVG9TdHJpbmdUZW1wbGF0ZSgpCiAgICAgewpAQCAtMTM0LDYgKzE0NCw4
IEBAIHByaXZhdGU6CiAKICAgICBUZW1wbGF0ZU1hcCBtX3Jhd1RlbXBsYXRlczsKICAgICBUZW1w
bGF0ZU1hcCBtX3RlbXBsYXRlczsKKyAgICBQcml2YXRlVGVtcGxhdGVNYXAgbV9wcml2YXRlVGVt
cGxhdGVzRm9yTWFpbldvcmxkOworICAgIFByaXZhdGVUZW1wbGF0ZU1hcCBtX3ByaXZhdGVUZW1w
bGF0ZXNGb3JOb25NYWluV29ybGQ7CiAgICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gbV90b1N0cmluZ1RlbXBsYXRlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBtX2xhenlFdmVudExpc3RlbmVyVG9TdHJpbmdUZW1wbGF0ZTsKICAgICBP
d25QdHI8U3RyaW5nQ2FjaGU+IG1fc3RyaW5nQ2FjaGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAKaW5kZXggNmI2ZmU2
ZjYxNWRlNzM2ZGZkYWY0NzVhMTQyMDczZjNlN2UzZmEzNi4uNWU5MjZhZGNhYmRlZmRjZjlmM2M4
OTQwY2IwN2NmYWU1ZGZkZWNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcApAQCAtMTM5LDggKzEzOSwxOSBAQCB2
b2lkIFY4TG9jYXRpb246OnNlYXJjaEF0dHJTZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIHY4OjpMb2NhbDx2OAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TG9jYXRpb246
OnJlbG9hZEF0dHJHZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBp
bmZvLkdldElzb2xhdGUoKTsKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHByaXZhdGVUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMb2NhdGlv
bjo6cmVsb2FkTWV0aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJlOjpOZXco
VjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKSk7Ci0gICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLlRoaXMoKS0+RmluZEluc3RhbmNlSW5Qcm90b3R5cGVD
aGFpbihWOExvY2F0aW9uOjpHZXRUZW1wbGF0ZShpc29sYXRlLCB3b3JsZFR5cGUoaXNvbGF0ZSkp
KTsKKyAgICAvLyBUaGlzIGlzIG9ubHkgZm9yIGdldHRpbmcgYSB1bmlxdWUgcG9pbnRlciB3aGlj
aCB3ZSBjYW4gcGFzcyB0byBwcml2YXRlVGVtcGxhdGVNYXAuCisgICAgc3RhdGljIFN0cmluZyBw
cml2YXRlVGVtcGxhdGVVbmlxdWVLZXkgPSAicmVsb2FkUHJpdmF0ZVRlbXBsYXRlIjsKKyAgICBX
cmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUgPSB3b3JsZFR5cGUoaXNvbGF0ZSk7Cisg
ICAgVjhQZXJJc29sYXRlRGF0YTo6UHJpdmF0ZVRlbXBsYXRlTWFwJiB0ZW1wbGF0ZU1hcCA9IFY4
UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnByaXZhdGVUZW1wbGF0ZU1hcChjdXJyZW50
V29ybGRUeXBlKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJp
dmF0ZVRlbXBsYXRlOworICAgIFY4UGVySXNvbGF0ZURhdGE6OlByaXZhdGVUZW1wbGF0ZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gdGVtcGxhdGVNYXAuZmluZCgmcHJpdmF0ZVRlbXBsYXRlVW5pcXVl
S2V5KTsKKyAgICBpZiAocmVzdWx0ID09IHRlbXBsYXRlTWFwLmVuZCgpKSB7CisgICAgICAgIHBy
aXZhdGVUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3
KGlzb2xhdGUsIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMb2NhdGlvbjo6cmVsb2FkTWV0
aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6
R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKSk7CisgICAgICAgIHRlbXBsYXRlTWFwLmFkZCgmcHJp
dmF0ZVRlbXBsYXRlVW5pcXVlS2V5LCBwcml2YXRlVGVtcGxhdGUpOworICAgIH0gZWxzZQorICAg
ICAgICBwcml2YXRlVGVtcGxhdGUgPSByZXN1bHQtPnZhbHVlOworCisgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLlRoaXMoKS0+RmluZEluc3RhbmNlSW5Qcm90b3R5cGVD
aGFpbihWOExvY2F0aW9uOjpHZXRUZW1wbGF0ZShpc29sYXRlLCBjdXJyZW50V29ybGRUeXBlKSk7
CiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHsKICAgICAgICAgLy8gY2FuIG9ubHkgcmVhY2gg
aGVyZSBieSAnb2JqZWN0Ll9fcHJvdG9fXy5mdW5jJywgYW5kIGl0IHNob3VsZCBwYXNzZWQKICAg
ICAgICAgLy8gZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVhZHkKQEAgLTE0OCw3ICsxNTksMTQg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TG9jYXRpb246OnJlbG9hZEF0dHJHZXR0ZXJDdXN0
b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG4KICAgICB9CiAgICAgTG9jYXRpb24qIGltcCA9IFY4
TG9jYXRpb246OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9GcmFtZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCksIGltcC0+ZnJh
bWUoKSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkgewotICAgICAgICBzdGF0aWMgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoaXNvbGF0ZSwgdjg6OkZ1bmN0aW9uVGVt
cGxhdGU6Ok5ldyhWOExvY2F0aW9uOjpyZWxvYWRNZXRob2RDdXN0b20sIHY4VW5kZWZpbmVkKCks
IHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSkp
KTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBzaGFyZWRUZW1wbGF0ZVVuaXF1ZUtleSA9ICJyZWxv
YWRTaGFyZWRUZW1wbGF0ZSI7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBzaGFyZWRUZW1wbGF0ZTsKKyAgICAgICAgcmVzdWx0ID0gdGVtcGxhdGVNYXAuZmlu
ZCgmc2hhcmVkVGVtcGxhdGVVbmlxdWVLZXkpOworICAgICAgICBpZiAocmVzdWx0ID09IHRlbXBs
YXRlTWFwLmVuZCgpKSB7CisgICAgICAgICAgICBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5jdGlvblRlbXBs
YXRlOjpOZXcoVjhMb2NhdGlvbjo6cmVsb2FkTWV0aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2
ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKSk7
CisgICAgICAgICAgICB0ZW1wbGF0ZU1hcC5hZGQoJnNoYXJlZFRlbXBsYXRlVW5pcXVlS2V5LCBz
aGFyZWRUZW1wbGF0ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2hhcmVkVGVtcGxh
dGUgPSByZXN1bHQtPnZhbHVlOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1
bmN0aW9uKCk7CiAgICAgfQogICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9u
KCk7CkBAIC0xNTcsOCArMTc1LDE5IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOExvY2F0aW9u
OjpyZWxvYWRBdHRyR2V0dGVyQ3VzdG9tKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuCiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhMb2NhdGlvbjo6cmVwbGFjZUF0dHJHZXR0ZXJDdXN0b20odjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAg
ICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdldElzb2xhdGUoKTsKLSAgICBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHByaXZhdGVUZW1wbGF0ZSA9IHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5j
dGlvblRlbXBsYXRlOjpOZXcoVjhMb2NhdGlvbjo6cmVwbGFjZU1ldGhvZEN1c3RvbSwgdjhVbmRl
ZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKGlz
b2xhdGUpKSkpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5UaGlz
KCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhMb2NhdGlvbjo6R2V0VGVtcGxhdGUo
aXNvbGF0ZSwgd29ybGRUeXBlKGlzb2xhdGUpKSk7CisgICAgLy8gVGhpcyBpcyBvbmx5IGZvciBn
ZXR0aW5nIGEgdW5pcXVlIHBvaW50ZXIgd2hpY2ggd2UgY2FuIHBhc3MgdG8gcHJpdmF0ZVRlbXBs
YXRlTWFwLgorICAgIHN0YXRpYyBTdHJpbmcgcHJpdmF0ZVRlbXBsYXRlVW5pcXVlS2V5ID0gInJl
cGxhY2VQcml2YXRlVGVtcGxhdGUiOworICAgIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxk
VHlwZSA9IHdvcmxkVHlwZShpbmZvLkdldElzb2xhdGUoKSk7CisgICAgVjhQZXJJc29sYXRlRGF0
YTo6UHJpdmF0ZVRlbXBsYXRlTWFwJiB0ZW1wbGF0ZU1hcCA9IFY4UGVySXNvbGF0ZURhdGE6OmZy
b20oaXNvbGF0ZSktPnByaXZhdGVUZW1wbGF0ZU1hcChjdXJyZW50V29ybGRUeXBlKTsKKyAgICB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlOworICAg
IFY4UGVySXNvbGF0ZURhdGE6OlByaXZhdGVUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
dGVtcGxhdGVNYXAuZmluZCgmcHJpdmF0ZVRlbXBsYXRlVW5pcXVlS2V5KTsKKyAgICBpZiAocmVz
dWx0ID09IHRlbXBsYXRlTWFwLmVuZCgpKSB7CisgICAgICAgIHByaXZhdGVUZW1wbGF0ZSA9IHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5j
dGlvblRlbXBsYXRlOjpOZXcoVjhMb2NhdGlvbjo6cmVwbGFjZU1ldGhvZEN1c3RvbSwgdjhVbmRl
ZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKGlz
b2xhdGUpKSkpOworICAgICAgICB0ZW1wbGF0ZU1hcC5hZGQoJnByaXZhdGVUZW1wbGF0ZVVuaXF1
ZUtleSwgcHJpdmF0ZVRlbXBsYXRlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHJpdmF0ZVRlbXBs
YXRlID0gcmVzdWx0LT52YWx1ZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVy
ID0gaW5mby5UaGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhMb2NhdGlvbjo6
R2V0VGVtcGxhdGUoaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSkpOwogICAgIGlmIChob2xkZXIu
SXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUgYnkgJ29iamVjdC5f
X3Byb3RvX18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCiAgICAgICAgIC8vIGRvbWFpbiBz
ZWN1cml0eSBjaGVjayBhbHJlYWR5CkBAIC0xNjYsNyArMTk1LDE0IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOExvY2F0aW9uOjpyZXBsYWNlQXR0ckdldHRlckN1c3RvbSh2ODo6TG9jYWw8djg6
OlN0cmluZz4KICAgICB9CiAgICAgTG9jYXRpb24qIGltcCA9IFY4TG9jYXRpb246OnRvTmF0aXZl
KGhvbGRlcik7CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9G
cmFtZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCksIGltcC0+ZnJhbWUoKSwgRG9Ob3RSZXBvcnRT
ZWN1cml0eUVycm9yKSkgewotICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+OjpOZXcoaXNvbGF0ZSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhWOExvY2F0
aW9uOjpyZXBsYWNlTWV0aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJlOjpO
ZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKSk7CisgICAgICAgIHN0YXRp
YyBTdHJpbmcgc2hhcmVkVGVtcGxhdGVVbmlxdWVLZXkgPSAiJHJlcGxhY2VTaGFyZWRUZW1wbGF0
ZSI7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRU
ZW1wbGF0ZTsKKyAgICAgICAgcmVzdWx0ID0gdGVtcGxhdGVNYXAuZmluZCgmc2hhcmVkVGVtcGxh
dGVVbmlxdWVLZXkpOworICAgICAgICBpZiAocmVzdWx0ID09IHRlbXBsYXRlTWFwLmVuZCgpKSB7
CisgICAgICAgICAgICBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMb2Nh
dGlvbjo6cmVwbGFjZU1ldGhvZEN1c3RvbSwgdjhVbmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6
TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKGlzb2xhdGUpKSkpOworICAgICAgICAgICAg
dGVtcGxhdGVNYXAuYWRkKCZzaGFyZWRUZW1wbGF0ZVVuaXF1ZUtleSwgc2hhcmVkVGVtcGxhdGUp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNoYXJlZFRlbXBsYXRlID0gcmVzdWx0LT52
YWx1ZTsKICAgICAgICAgcmV0dXJuIHNoYXJlZFRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwogICAg
IH0KICAgICByZXR1cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwpAQCAtMTc1LDkg
KzIxMSwxOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhMb2NhdGlvbjo6cmVwbGFjZUF0dHJH
ZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhMb2NhdGlvbjo6YXNzaWduQXR0ckdldHRlckN1c3RvbSh2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSA9IGluZm8uR2V0SXNvbGF0ZSgpOwotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlID0KLSAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoaXNvbGF0ZSwgdjg6OkZ1bmN0aW9uVGVt
cGxhdGU6Ok5ldyhWOExvY2F0aW9uOjphc3NpZ25NZXRob2RDdXN0b20sIHY4VW5kZWZpbmVkKCks
IHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSkp
KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uVGhpcygpLT5GaW5k
SW5zdGFuY2VJblByb3RvdHlwZUNoYWluKFY4TG9jYXRpb246OkdldFRlbXBsYXRlKGlzb2xhdGUs
IHdvcmxkVHlwZShpc29sYXRlKSkpOworICAgIC8vIFRoaXMgaXMgb25seSBmb3IgZ2V0dGluZyBh
IHVuaXF1ZSBwb2ludGVyIHdoaWNoIHdlIGNhbiBwYXNzIHRvIHByaXZhdGVUZW1wbGF0ZU1hcC4K
KyAgICBzdGF0aWMgU3RyaW5nIHByaXZhdGVUZW1wbGF0ZVVuaXF1ZUtleSA9ICJhc3NpZ25Qcml2
YXRlVGVtcGxhdGUiOworICAgIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSA9IHdv
cmxkVHlwZShpbmZvLkdldElzb2xhdGUoKSk7CisgICAgVjhQZXJJc29sYXRlRGF0YTo6UHJpdmF0
ZVRlbXBsYXRlTWFwJiB0ZW1wbGF0ZU1hcCA9IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaW5mby5H
ZXRJc29sYXRlKCkpLT5wcml2YXRlVGVtcGxhdGVNYXAoY3VycmVudFdvcmxkVHlwZSk7CisgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHByaXZhdGVUZW1wbGF0ZTsKKyAg
ICBWOFBlcklzb2xhdGVEYXRhOjpQcml2YXRlVGVtcGxhdGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IHRlbXBsYXRlTWFwLmZpbmQoJnByaXZhdGVUZW1wbGF0ZVVuaXF1ZUtleSk7CisgICAgaWYgKHJl
c3VsdCA9PSB0ZW1wbGF0ZU1hcC5lbmQoKSkgeworICAgICAgICBwcml2YXRlVGVtcGxhdGUgPSB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhpc29sYXRlLCB2ODo6RnVu
Y3Rpb25UZW1wbGF0ZTo6TmV3KFY4TG9jYXRpb246OmFzc2lnbk1ldGhvZEN1c3RvbSwgdjhVbmRl
ZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKGlz
b2xhdGUpKSkpOworICAgICAgICB0ZW1wbGF0ZU1hcC5hZGQoJnByaXZhdGVUZW1wbGF0ZVVuaXF1
ZUtleSwgcHJpdmF0ZVRlbXBsYXRlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHJpdmF0ZVRlbXBs
YXRlID0gcmVzdWx0LT52YWx1ZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVy
ID0gaW5mby5UaGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhMb2NhdGlvbjo6
R2V0VGVtcGxhdGUoaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSkpOwogICAgIGlmIChob2xkZXIu
SXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUgYnkgJ29iamVjdC5f
X3Byb3RvX18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCiAgICAgICAgIC8vIGRvbWFpbiBz
ZWN1cml0eSBjaGVjayBhbHJlYWR5CkBAIC0xODUsNyArMjMxLDE0IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOExvY2F0aW9uOjphc3NpZ25BdHRyR2V0dGVyQ3VzdG9tKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuCiAgICAgfQogICAgIExvY2F0aW9uKiBpbXAgPSBWOExvY2F0aW9uOjp0b05hdGl2
ZShob2xkZXIpOwogICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RnJhbWUoQmluZGluZ1N0YXRlOjppbnN0YW5jZSgpLCBpbXAtPmZyYW1lKCksIERvTm90UmVwb3J0
U2VjdXJpdHlFcnJvcikpIHsKLSAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMb2Nh
dGlvbjo6YXNzaWduTWV0aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJlOjpO
ZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKSk7CisgICAgICAgIHN0YXRp
YyBTdHJpbmcgc2hhcmVkVGVtcGxhdGVVbmlxdWVLZXkgPSAiJHtmdW5jTmFtZX1TaGFyZWRUZW1w
bGF0ZSI7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFy
ZWRUZW1wbGF0ZTsKKyAgICAgICAgcmVzdWx0ID0gdGVtcGxhdGVNYXAuZmluZCgmc2hhcmVkVGVt
cGxhdGVVbmlxdWVLZXkpOworICAgICAgICBpZiAocmVzdWx0ID09IHRlbXBsYXRlTWFwLmVuZCgp
KSB7CisgICAgICAgICAgICBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhM
b2NhdGlvbjo6YXNzaWduTWV0aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJl
OjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKSk7CisgICAgICAgICAg
ICB0ZW1wbGF0ZU1hcC5hZGQoJnNoYXJlZFRlbXBsYXRlVW5pcXVlS2V5LCBzaGFyZWRUZW1wbGF0
ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2hhcmVkVGVtcGxhdGUgPSByZXN1bHQt
PnZhbHVlOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAg
ICAgfQogICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7Cg==
</data>
<flag name="review"
          id="213725"
          type_id="1"
          status="-"
          setter="marja"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192476</attachid>
            <date>2013-03-11 08:39:12 -0700</date>
            <delta_ts>2013-03-12 02:53:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111971-20130311163511.patch</filename>
            <type>text/plain</type>
            <size>18226</size>
            <attacher name="Marja Hölttä">marja</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc1ZTUwMDYyZDc1YmEx
OGYzNmYwYzAzYzMwNTUyNzg3ZTMyYmFhNi4uMDI1MTg1MWYwMTc2YTRjNGJhOTIyNDVjZjhhOTlh
YzYwYjJhMWU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM0IEBACiAyMDEzLTAzLTExICBNYXJq
YSBIw7ZsdHTDpCAgPG1hcmphQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbVjhdIEdldCByaWQg
b2YgZnVuY3Rpb24tbGV2ZWwgc3RhdGljIEZ1bmN0aW9uVGVtcGxhdGVzIGluIGdlbmVyYXRlZCBi
aW5kaW5ncyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTE5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiB0aGUgZnV0dXJlIHdlJ2xsIGNyZWF0ZSBhbmQgc3RvcmUgZnVuY3Rpb24gdGVtcGxh
dGVzIGZvciBtYWluIHdvcmxkCisgICAgICAgIGFuZCBub24tbWFpbiB3b3JsZHMgc2VwYXJhdGVs
eSAoc2VlIGJ1ZyAxMTE3MjQpLCBoYXZpbmcgZnVuY3Rpb24KKyAgICAgICAgdGVtcGxhdGVzIGFz
IHN0YXRpYyB2YXJpYWJsZXMgaW5zaWRlIGZ1bmN0aW9ucyB3aWxsIGJyZWFrIHRoZQorICAgICAg
ICBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAodXBkYXRlZCB0aGUgYmlu
ZGluZ3MgdGVzdCBleHBlY3RhdGlvbnMpLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZURvbWFpblNhZmVGdW5jdGlvbkdl
dHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURP
TU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRl
cm5hbDo6cG9zdE1lc3NhZ2VBdHRyR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFBl
cklzb2xhdGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UGVySXNvbGF0ZURhdGE6OlY4
UGVySXNvbGF0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VjhQZXJJc29sYXRlRGF0YTo6cHJp
dmF0ZVRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4UGVySXNvbGF0ZURhdGEuaDoKKyAgICAgICAgKFY4UGVySXNvbGF0ZURhdGEpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlY4TG9jYXRpb246OnJlbG9hZEF0dHJHZXR0ZXJDdXN0b20pOgorICAgICAgICAoV2Vi
Q29yZTo6VjhMb2NhdGlvbjo6cmVwbGFjZUF0dHJHZXR0ZXJDdXN0b20pOgorICAgICAgICAoV2Vi
Q29yZTo6VjhMb2NhdGlvbjo6YXNzaWduQXR0ckdldHRlckN1c3RvbSk6CisKKzIwMTMtMDMtMTEg
IE1hcmphIEjDtmx0dMOkICA8bWFyamFAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtWOF0gRml4
IFY4SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTE5NjgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBlMzhhZjRkMTU2NWRkOWJlNWRmNGJm
NTA3ZjNmMjhmNmRmYzAxNDNjLi5hY2M3MzdiM2E2Yzc1ZGRlN2U5YmQ1OGE4N2FiYTU5YmVmNDhk
MTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQpAQCAtNzg2LDE0ICs3ODYsMTggQEAgc3ViIEdlbmVyYXRlRG9tYWluU2FmZUZ1
bmN0aW9uR2V0dGVyCiAgICAgICAgICRzaWduYXR1cmUgPSAidjg6OkxvY2FsPHY4OjpTaWduYXR1
cmU+KCkiOwogICAgIH0KIAotICAgIG15ICRuZXdUZW1wbGF0ZVN0cmluZyA9ICJ2ODo6RnVuY3Rp
b25UZW1wbGF0ZTo6TmV3KCR7aW50ZXJmYWNlTmFtZX1WOEludGVybmFsOjoke2Z1bmNOYW1lfU1l
dGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCAkc2lnbmF0dXJlKSI7CisgICAgbXkgJG5ld1Rl
bXBsYXRlUGFyYW1zID0gIiR7aW50ZXJmYWNlTmFtZX1WOEludGVybmFsOjoke2Z1bmNOYW1lfU1l
dGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCAkc2lnbmF0dXJlIjsKIAogICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJGcmFtZS5oIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnRJbnRlcm5hbHMsIDw8
RU5EKTsKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtmdW5jTmFtZX1BdHRyR2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQogewotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJp
dmF0ZVRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXco
aW5mby5HZXRJc29sYXRlKCksICRuZXdUZW1wbGF0ZVN0cmluZyk7Ci0gICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLlRoaXMoKS0+RmluZEluc3RhbmNlSW5Qcm90b3R5cGVD
aGFpbigke3Y4SW50ZXJmYWNlTmFtZX06OkdldFRlbXBsYXRlKGluZm8uR2V0SXNvbGF0ZSgpLCB3
b3JsZFR5cGUoaW5mby5HZXRJc29sYXRlKCkpKSk7CisgICAgLy8gVGhpcyBpcyBvbmx5IGZvciBn
ZXR0aW5nIGEgdW5pcXVlIHBvaW50ZXIgd2hpY2ggd2UgY2FuIHBhc3MgdG8gcHJpdmF0ZVRlbXBs
YXRlLgorICAgIHN0YXRpYyBTdHJpbmcgcHJpdmF0ZVRlbXBsYXRlVW5pcXVlS2V5ID0gIiR7ZnVu
Y05hbWV9UHJpdmF0ZVRlbXBsYXRlIjsKKyAgICBXcmFwcGVyV29ybGRUeXBlIGN1cnJlbnRXb3Js
ZFR5cGUgPSB3b3JsZFR5cGUoaW5mby5HZXRJc29sYXRlKCkpOworICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlVGVtcGxhdGUgPSBWOFBlcklzb2xhdGVEYXRh
Ojpmcm9tKGluZm8uR2V0SXNvbGF0ZSgpKS0+cHJpdmF0ZVRlbXBsYXRlKGN1cnJlbnRXb3JsZFR5
cGUsICZwcml2YXRlVGVtcGxhdGVVbmlxdWVLZXksICRuZXdUZW1wbGF0ZVBhcmFtcyk7CisKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uVGhpcygpLT5GaW5kSW5zdGFu
Y2VJblByb3RvdHlwZUNoYWluKCR7djhJbnRlcmZhY2VOYW1lfTo6R2V0VGVtcGxhdGUoaW5mby5H
ZXRJc29sYXRlKCksIGN1cnJlbnRXb3JsZFR5cGUpKTsKICAgICBpZiAoaG9sZGVyLklzRW1wdHko
KSkgewogICAgICAgICAvLyBjYW4gb25seSByZWFjaCBoZXJlIGJ5ICdvYmplY3QuX19wcm90b19f
LmZ1bmMnLCBhbmQgaXQgc2hvdWxkIHBhc3NlZAogICAgICAgICAvLyBkb21haW4gc2VjdXJpdHkg
Y2hlY2sgYWxyZWFkeQpAQCAtODAxLDcgKzgwNSw4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gJHtmdW5jTmFtZX1BdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBj
CiAgICAgfQogICAgICR7aW50ZXJmYWNlTmFtZX0qIGltcCA9ICR7djhJbnRlcmZhY2VOYW1lfTo6
dG9OYXRpdmUoaG9sZGVyKTsKICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0ZyYW1lKEJpbmRpbmdTdGF0ZTo6aW5zdGFuY2UoKSwgaW1wLT5mcmFtZSgpLCBEb05v
dFJlcG9ydFNlY3VyaXR5RXJyb3IpKSB7Ci0gICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhpbmZvLkdldElzb2xhdGUoKSwgJG5ld1RlbXBsYXRlU3Ry
aW5nKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBzaGFyZWRUZW1wbGF0ZVVuaXF1ZUtleSA9ICIk
e2Z1bmNOYW1lfVNoYXJlZFRlbXBsYXRlIjsKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShp
bmZvLkdldElzb2xhdGUoKSktPnByaXZhdGVUZW1wbGF0ZShjdXJyZW50V29ybGRUeXBlLCAmc2hh
cmVkVGVtcGxhdGVVbmlxdWVLZXksICRuZXdUZW1wbGF0ZVBhcmFtcyk7CiAgICAgICAgIHJldHVy
biBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFj
dGl2ZURPTU9iamVjdC5jcHAKaW5kZXggNzhjM2ZmZjVmNTU2MDc0ZDA5ZWQyMjc3OTFiMzlkN2Ni
ZWI3YTEwOC4uOWE2MmNjMDQ3ZjY4ZjQ4NWJhZDM3NmYyODgxMjYxYTY4NzBjMjAxNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2
ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTEyOCw4ICsxMjgsMTIgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3N0TWVzc2FnZU1ldGhvZENhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3N0TWVz
c2FnZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCiB7Ci0gICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBwcml2YXRlVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT46Ok5ldyhpbmZvLkdldElzb2xhdGUoKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5l
dyhUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFj
aywgdjhVbmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVj
dDo6R2V0UmF3VGVtcGxhdGUoaW5mby5HZXRJc29sYXRlKCkpKSkpOwotICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5UaGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBl
Q2hhaW4oVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpHZXRUZW1wbGF0ZShpbmZvLkdldElzb2xhdGUo
KSwgd29ybGRUeXBlKGluZm8uR2V0SXNvbGF0ZSgpKSkpOworICAgIC8vIFRoaXMgaXMgb25seSBm
b3IgZ2V0dGluZyBhIHVuaXF1ZSBwb2ludGVyIHdoaWNoIHdlIGNhbiBwYXNzIHRvIHByaXZhdGVU
ZW1wbGF0ZS4KKyAgICBzdGF0aWMgU3RyaW5nIHByaXZhdGVUZW1wbGF0ZVVuaXF1ZUtleSA9ICJw
b3N0TWVzc2FnZVByaXZhdGVUZW1wbGF0ZSI7CisgICAgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50
V29ybGRUeXBlID0gd29ybGRUeXBlKGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlID0gVjhQZXJJc29sYXRl
RGF0YTo6ZnJvbShpbmZvLkdldElzb2xhdGUoKSktPnByaXZhdGVUZW1wbGF0ZShjdXJyZW50V29y
bGRUeXBlLCAmcHJpdmF0ZVRlbXBsYXRlVW5pcXVlS2V5LCBUZXN0QWN0aXZlRE9NT2JqZWN0VjhJ
bnRlcm5hbDo6cG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgdjg6OlNp
Z25hdHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUoaW5mby5H
ZXRJc29sYXRlKCkpKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGlu
Zm8uVGhpcygpLT5GaW5kSW5zdGFuY2VJblByb3RvdHlwZUNoYWluKFY4VGVzdEFjdGl2ZURPTU9i
amVjdDo6R2V0VGVtcGxhdGUoaW5mby5HZXRJc29sYXRlKCksIGN1cnJlbnRXb3JsZFR5cGUpKTsK
ICAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkgewogICAgICAgICAvLyBjYW4gb25seSByZWFjaCBo
ZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1bmMnLCBhbmQgaXQgc2hvdWxkIHBhc3NlZAogICAg
ICAgICAvLyBkb21haW4gc2VjdXJpdHkgY2hlY2sgYWxyZWFkeQpAQCAtMTM3LDcgKzE0MSw4IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9zdE1lc3NhZ2VBdHRyR2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjCiAgICAgfQogICAgIFRlc3RBY3RpdmVET01PYmplY3Qq
IGltcCA9IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6dG9OYXRpdmUoaG9sZGVyKTsKICAgICBpZiAo
IUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEJpbmRpbmdTdGF0ZTo6
aW5zdGFuY2UoKSwgaW1wLT5mcmFtZSgpLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKSB7Ci0g
ICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVk
VGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhpbmZv
LkdldElzb2xhdGUoKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0QWN0aXZlRE9NT2Jq
ZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwg
djg6OlNpZ25hdHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUo
aW5mby5HZXRJc29sYXRlKCkpKSkpOworICAgICAgICBzdGF0aWMgU3RyaW5nIHNoYXJlZFRlbXBs
YXRlVW5pcXVlS2V5ID0gInBvc3RNZXNzYWdlU2hhcmVkVGVtcGxhdGUiOworICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkVGVtcGxhdGUgPSBWOFBlcklz
b2xhdGVEYXRhOjpmcm9tKGluZm8uR2V0SXNvbGF0ZSgpKS0+cHJpdmF0ZVRlbXBsYXRlKGN1cnJl
bnRXb3JsZFR5cGUsICZzaGFyZWRUZW1wbGF0ZVVuaXF1ZUtleSwgVGVzdEFjdGl2ZURPTU9iamVj
dFY4SW50ZXJuYWw6OnBvc3RNZXNzYWdlTWV0aG9kQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIHY4
OjpTaWduYXR1cmU6Ok5ldyhWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFJhd1RlbXBsYXRlKGlu
Zm8uR2V0SXNvbGF0ZSgpKSkpOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1
bmN0aW9uKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFBlcklzb2xhdGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVy
SXNvbGF0ZURhdGEuY3BwCmluZGV4IDAxMDBjZTZmYWY2Mjg1ZDY0Y2U1ZTJmMjJlNmJjM2E4Mzcx
MmM3ZDUuLjk4NmNhMjNjMTEwMWY0ZmIwM2YxNjcwMDUxMjIyMTgyMmFhNWZhNzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVySXNvbGF0ZURhdGEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVySXNvbGF0ZURhdGEuY3BwCkBAIC00NCw3
ICs0NCw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IFNlcXVlbmNlTWVtb3J5SW5zdHJ1bWVudGF0aW9u
VHJhaXRzPFdlYkNvcmU6OldyYXBwZXJUeXBlSW5mbyo+CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFY4UGVySXNvbGF0ZURhdGE6OlY4UGVySXNvbGF0ZURhdGEodjg6Oklzb2xhdGUqIGlzb2xhdGUp
Ci0gICAgOiBtX3N0cmluZ0NhY2hlKGFkb3B0UHRyKG5ldyBTdHJpbmdDYWNoZSgpKSkKKyAgICA6
IG1faXNvbGF0ZShpc29sYXRlKQorICAgICwgbV9zdHJpbmdDYWNoZShhZG9wdFB0cihuZXcgU3Ry
aW5nQ2FjaGUoKSkpCiAgICAgLCBtX2ludGVnZXJDYWNoZShhZG9wdFB0cihuZXcgSW50ZWdlckNh
Y2hlKCkpKQogICAgICwgbV9kb21EYXRhU3RvcmUoMCkKICAgICAsIG1faGlkZGVuUHJvcGVydHlO
YW1lKGFkb3B0UHRyKG5ldyBWOEhpZGRlblByb3BlcnR5TmFtZSgpKSkKQEAgLTEyMSw2ICsxMjIs
MTcgQEAgdm9pZCBWOFBlcklzb2xhdGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmpl
Y3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb24KICAgICBpbmZvLmlnbm9yZU1lbWJlcihtX2F1
eGlsaWFyeUNvbnRleHQpOwogfQogCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhQZXJJc29sYXRlRGF0YTo6cHJpdmF0ZVRlbXBsYXRlKFdyYXBwZXJXb3JsZFR5cGUsIHZv
aWQqIHByaXZhdGVQb2ludGVyLCB2ODo6SW52b2NhdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gZGF0YSwgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBzaWduYXR1
cmUsIGludCBsZW5ndGgpCit7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IHByaXZhdGVUZW1wbGF0ZTsKKyAgICBWOFBlcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gbV90ZW1wbGF0ZXMuZmluZChwcml2YXRlUG9pbnRlcik7CisgICAg
aWYgKHJlc3VsdCAhPSBtX3RlbXBsYXRlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+
dmFsdWU7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG5ld1ByaXZh
dGVUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KG1f
aXNvbGF0ZSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhjYWxsYmFjaywgZGF0YSwgc2lnbmF0
dXJlLCBsZW5ndGgpKTsKKyAgICBtX3RlbXBsYXRlcy5hZGQocHJpdmF0ZVBvaW50ZXIsIG5ld1By
aXZhdGVUZW1wbGF0ZSk7CisgICAgcmV0dXJuIG5ld1ByaXZhdGVUZW1wbGF0ZTsKK30KKwogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCiB2b2lkIFY4UGVySXNvbGF0ZURhdGE6OnZpc2l0RXh0ZXJuYWxT
dHJpbmdzKEV4dGVybmFsU3RyaW5nVmlzaXRvciogdmlzaXRvcikKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVySXNvbGF0ZURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UGVySXNvbGF0ZURhdGEuaAppbmRleCAzM2NkODQ5OTQ3OTc4ODhj
ODM4ZDExNDBmOThlYzYwZWQ2YWIzNjA4Li4wZTdhN2Y5ZTU4MjI5YWFiNzNjNzJlYWZmZTlhMTk4
MDMxMzQ0NjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlcklz
b2xhdGVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJJc29sYXRl
RGF0YS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFY4UGVySXNvbGF0ZURhdGFfaAogCiAj
aW5jbHVkZSAiU2NvcGVkUGVyc2lzdGVudC5oIgorI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5o
IgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIHN0YXRp
YyB2b2lkIGRpc3Bvc2Uodjg6Oklzb2xhdGUqKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxXcmFw
cGVyVHlwZUluZm8qLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gPiBUZW1w
bGF0ZU1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8dm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiA+IFRlbXBsYXRlTWFwOwogCiAgICAgVGVtcGxhdGVNYXAmIHJhd1Rl
bXBsYXRlTWFwKCkgeyByZXR1cm4gbV9yYXdUZW1wbGF0ZXM7IH0KICAgICBUZW1wbGF0ZU1hcCYg
dGVtcGxhdGVNYXAoKSB7IHJldHVybiBtX3RlbXBsYXRlczsgfQpAQCAtMTI3LDExICsxMjgsMTQg
QEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTaG91bGRDb2xsZWN0R2FyYmFnZVNvb24oKSB7IG1f
c2hvdWxkQ29sbGVjdEdhcmJhZ2VTb29uID0gZmFsc2U7IH0KICAgICBib29sIHNob3VsZENvbGxl
Y3RHYXJiYWdlU29vbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ29sbGVjdEdhcmJhZ2VTb29u
OyB9CiAKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRl
bXBsYXRlKFdyYXBwZXJXb3JsZFR5cGUsIHZvaWQqIHByaXZhdGVQb2ludGVyLCB2ODo6SW52b2Nh
dGlvbkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGF0YSwgdjg6OkhhbmRsZTx2ODo6
U2lnbmF0dXJlPiwgaW50IGxlbmd0aCA9IDApOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFY4
UGVySXNvbGF0ZURhdGEodjg6Oklzb2xhdGUqKTsKICAgICB+VjhQZXJJc29sYXRlRGF0YSgpOwog
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3JPZlRvU3RyaW5nKGNv
bnN0IHY4OjpBcmd1bWVudHMmKTsKIAorICAgIHY4OjpJc29sYXRlKiBtX2lzb2xhdGU7CiAgICAg
VGVtcGxhdGVNYXAgbV9yYXdUZW1wbGF0ZXM7CiAgICAgVGVtcGxhdGVNYXAgbV90ZW1wbGF0ZXM7
CiAgICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbV90b1N0cmluZ1Rl
bXBsYXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TG9jYXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TG9jYXRpb25DdXN0b20uY3BwCmluZGV4IDZiNmZlNmY2MTVkZTczNmRmZGFmNDc1YTE0MjA3M2Yz
ZTdlM2ZhMzYuLjg1OWRhZDM2ZDgxZmZiYjUyNjkzODlhYWY5NGVjMzI2OTljNjFmMDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1
c3RvbS5jcHAKQEAgLTEzOSw4ICsxMzksMTIgQEAgdm9pZCBWOExvY2F0aW9uOjpzZWFyY2hBdHRy
U2V0dGVyQ3VzdG9tKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djgKIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOExvY2F0aW9uOjpyZWxvYWRBdHRyR2V0dGVyQ3VzdG9tKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQog
ewogICAgIHY4OjpJc29sYXRlKiBpc29sYXRlID0gaW5mby5HZXRJc29sYXRlKCk7Ci0gICAgc3Rh
dGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlVGVtcGxhdGUg
PSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhpc29sYXRlLCB2ODo6
RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4TG9jYXRpb246OnJlbG9hZE1ldGhvZEN1c3RvbSwgdjhV
bmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRl
KGlzb2xhdGUpKSkpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5U
aGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhMb2NhdGlvbjo6R2V0VGVtcGxh
dGUoaXNvbGF0ZSwgd29ybGRUeXBlKGlzb2xhdGUpKSk7CisgICAgLy8gVGhpcyBpcyBvbmx5IGZv
ciBnZXR0aW5nIGEgdW5pcXVlIHBvaW50ZXIgd2hpY2ggd2UgY2FuIHBhc3MgdG8gcHJpdmF0ZVRl
bXBsYXRlLgorICAgIHN0YXRpYyBTdHJpbmcgcHJpdmF0ZVRlbXBsYXRlVW5pcXVlS2V5ID0gInJl
bG9hZFByaXZhdGVUZW1wbGF0ZSI7CisgICAgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRU
eXBlID0gd29ybGRUeXBlKGlzb2xhdGUpOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBwcml2YXRlVGVtcGxhdGUgPSBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xh
dGUpLT5wcml2YXRlVGVtcGxhdGUoY3VycmVudFdvcmxkVHlwZSwgJnByaXZhdGVUZW1wbGF0ZVVu
aXF1ZUtleSwgVjhMb2NhdGlvbjo6cmVsb2FkTWV0aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2
ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKTsK
KworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5UaGlzKCktPkZpbmRJ
bnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhMb2NhdGlvbjo6R2V0VGVtcGxhdGUoaXNvbGF0ZSwg
Y3VycmVudFdvcmxkVHlwZSkpOwogICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSB7CiAgICAgICAg
IC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUgYnkgJ29iamVjdC5fX3Byb3RvX18uZnVuYycsIGFuZCBp
dCBzaG91bGQgcGFzc2VkCiAgICAgICAgIC8vIGRvbWFpbiBzZWN1cml0eSBjaGVjayBhbHJlYWR5
CkBAIC0xNDgsNyArMTUyLDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TG9jYXRpb246OnJl
bG9hZEF0dHJHZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG4KICAgICB9CiAgICAg
TG9jYXRpb24qIGltcCA9IFY4TG9jYXRpb246OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgaWYgKCFC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShCaW5kaW5nU3RhdGU6Omlu
c3RhbmNlKCksIGltcC0+ZnJhbWUoKSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkgewotICAg
ICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRl
bXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoaXNvbGF0
ZSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhWOExvY2F0aW9uOjpyZWxvYWRNZXRob2RDdXN0
b20sIHY4VW5kZWZpbmVkKCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdU
ZW1wbGF0ZShpc29sYXRlKSkpKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBzaGFyZWRUZW1wbGF0
ZVVuaXF1ZUtleSA9ICJyZWxvYWRTaGFyZWRUZW1wbGF0ZSI7CisgICAgICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9IFY4UGVySXNvbGF0ZURh
dGE6OmZyb20oaW5mby5HZXRJc29sYXRlKCkpLT5wcml2YXRlVGVtcGxhdGUoY3VycmVudFdvcmxk
VHlwZSwgJnNoYXJlZFRlbXBsYXRlVW5pcXVlS2V5LCBWOExvY2F0aW9uOjpyZWxvYWRNZXRob2RD
dXN0b20sIHY4VW5kZWZpbmVkKCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRS
YXdUZW1wbGF0ZShpc29sYXRlKSkpOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdl
dEZ1bmN0aW9uKCk7CiAgICAgfQogICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0
aW9uKCk7CkBAIC0xNTcsOCArMTYyLDEyIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOExvY2F0
aW9uOjpyZWxvYWRBdHRyR2V0dGVyQ3VzdG9tKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuCiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhMb2NhdGlvbjo6cmVwbGFjZUF0dHJHZXR0ZXJDdXN0b20odjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7
CiAgICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdldElzb2xhdGUoKTsKLSAgICBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHByaXZhdGVUZW1wbGF0ZSA9
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpG
dW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMb2NhdGlvbjo6cmVwbGFjZU1ldGhvZEN1c3RvbSwgdjhV
bmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRl
KGlzb2xhdGUpKSkpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5U
aGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhMb2NhdGlvbjo6R2V0VGVtcGxh
dGUoaXNvbGF0ZSwgd29ybGRUeXBlKGlzb2xhdGUpKSk7CisgICAgLy8gVGhpcyBpcyBvbmx5IGZv
ciBnZXR0aW5nIGEgdW5pcXVlIHBvaW50ZXIgd2hpY2ggd2UgY2FuIHBhc3MgdG8gcHJpdmF0ZVRl
bXBsYXRlTWFwLgorICAgIHN0YXRpYyBTdHJpbmcgcHJpdmF0ZVRlbXBsYXRlVW5pcXVlS2V5ID0g
InJlcGxhY2VQcml2YXRlVGVtcGxhdGUiOworICAgIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVudFdv
cmxkVHlwZSA9IHdvcmxkVHlwZShpbmZvLkdldElzb2xhdGUoKSk7CisgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHByaXZhdGVUZW1wbGF0ZSA9IFY4UGVySXNvbGF0ZURh
dGE6OmZyb20oaXNvbGF0ZSktPnByaXZhdGVUZW1wbGF0ZShjdXJyZW50V29ybGRUeXBlLCAmcHJp
dmF0ZVRlbXBsYXRlVW5pcXVlS2V5LCBWOExvY2F0aW9uOjpyZXBsYWNlTWV0aG9kQ3VzdG9tLCB2
OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxh
dGUoaXNvbGF0ZSkpKTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5m
by5UaGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhMb2NhdGlvbjo6R2V0VGVt
cGxhdGUoaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSkpOwogICAgIGlmIChob2xkZXIuSXNFbXB0
eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUgYnkgJ29iamVjdC5fX3Byb3Rv
X18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCiAgICAgICAgIC8vIGRvbWFpbiBzZWN1cml0
eSBjaGVjayBhbHJlYWR5CkBAIC0xNjYsNyArMTc1LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4TG9jYXRpb246OnJlcGxhY2VBdHRyR2V0dGVyQ3VzdG9tKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PgogICAgIH0KICAgICBMb2NhdGlvbiogaW1wID0gVjhMb2NhdGlvbjo6dG9OYXRpdmUoaG9sZGVy
KTsKICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEJp
bmRpbmdTdGF0ZTo6aW5zdGFuY2UoKSwgaW1wLT5mcmFtZSgpLCBEb05vdFJlcG9ydFNlY3VyaXR5
RXJyb3IpKSB7Ci0gICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gc2hhcmVkVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT46Ok5ldyhpc29sYXRlLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4TG9jYXRpb246OnJl
cGxhY2VNZXRob2RDdXN0b20sIHY4VW5kZWZpbmVkKCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExv
Y2F0aW9uOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSkpKTsKKyAgICAgICAgc3RhdGljIFN0cmlu
ZyBzaGFyZWRUZW1wbGF0ZVVuaXF1ZUtleSA9ICJyZXBsYWNlU2hhcmVkVGVtcGxhdGUiOworICAg
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkVGVtcGxhdGUg
PSBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGluZm8uR2V0SXNvbGF0ZSgpKS0+cHJpdmF0ZVRlbXBs
YXRlKGN1cnJlbnRXb3JsZFR5cGUsICZzaGFyZWRUZW1wbGF0ZVVuaXF1ZUtleSwgVjhMb2NhdGlv
bjo6cmVwbGFjZU1ldGhvZEN1c3RvbSwgdjhVbmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3
KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKGlzb2xhdGUpKSk7CiAgICAgICAgIHJldHVybiBz
aGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIHByaXZhdGVU
ZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKQEAgLTE3NSw5ICsxODUsMTIgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4TG9jYXRpb246OnJlcGxhY2VBdHRyR2V0dGVyQ3VzdG9tKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPgogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TG9jYXRpb246OmFzc2lnbkF0dHJH
ZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCiB7CiAgICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdldElzb2xh
dGUoKTsKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHBy
aXZhdGVUZW1wbGF0ZSA9Ci0gICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMb2NhdGlvbjo6
YXNzaWduTWV0aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhM
b2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBpbmZvLlRoaXMoKS0+RmluZEluc3RhbmNlSW5Qcm90b3R5cGVDaGFp
bihWOExvY2F0aW9uOjpHZXRUZW1wbGF0ZShpc29sYXRlLCB3b3JsZFR5cGUoaXNvbGF0ZSkpKTsK
KyAgICAvLyBUaGlzIGlzIG9ubHkgZm9yIGdldHRpbmcgYSB1bmlxdWUgcG9pbnRlciB3aGljaCB3
ZSBjYW4gcGFzcyB0byBwcml2YXRlVGVtcGxhdGVNYXAuCisgICAgc3RhdGljIFN0cmluZyBwcml2
YXRlVGVtcGxhdGVVbmlxdWVLZXkgPSAiYXNzaWduUHJpdmF0ZVRlbXBsYXRlIjsKKyAgICBXcmFw
cGVyV29ybGRUeXBlIGN1cnJlbnRXb3JsZFR5cGUgPSB3b3JsZFR5cGUoaW5mby5HZXRJc29sYXRl
KCkpOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlVGVt
cGxhdGUgPSBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5wcml2YXRlVGVtcGxhdGUo
Y3VycmVudFdvcmxkVHlwZSwgJnByaXZhdGVUZW1wbGF0ZVVuaXF1ZUtleSwgVjhMb2NhdGlvbjo6
YXNzaWduTWV0aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhM
b2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKTsKKworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gaG9sZGVyID0gaW5mby5UaGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hh
aW4oVjhMb2NhdGlvbjo6R2V0VGVtcGxhdGUoaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSkpOwog
ICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNoIGhl
cmUgYnkgJ29iamVjdC5fX3Byb3RvX18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCiAgICAg
ICAgIC8vIGRvbWFpbiBzZWN1cml0eSBjaGVjayBhbHJlYWR5CkBAIC0xODUsNyArMTk4LDggQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TG9jYXRpb246OmFzc2lnbkF0dHJHZXR0ZXJDdXN0b20o
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG4KICAgICB9CiAgICAgTG9jYXRpb24qIGltcCA9IFY4TG9j
YXRpb246OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9GcmFtZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCksIGltcC0+ZnJhbWUo
KSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkgewotICAgICAgICBzdGF0aWMgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoaXNvbGF0ZSwgdjg6OkZ1bmN0aW9uVGVtcGxh
dGU6Ok5ldyhWOExvY2F0aW9uOjphc3NpZ25NZXRob2RDdXN0b20sIHY4VW5kZWZpbmVkKCksIHY4
OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSkpKTsK
KyAgICAgICAgc3RhdGljIFN0cmluZyBzaGFyZWRUZW1wbGF0ZVVuaXF1ZUtleSA9ICJhc3NpZ25T
aGFyZWRUZW1wbGF0ZSI7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBzaGFyZWRUZW1wbGF0ZSA9IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaW5mby5HZXRJc29s
YXRlKCkpLT5wcml2YXRlVGVtcGxhdGUoY3VycmVudFdvcmxkVHlwZSwgJnNoYXJlZFRlbXBsYXRl
VW5pcXVlS2V5LCBWOExvY2F0aW9uOjphc3NpZ25NZXRob2RDdXN0b20sIHY4VW5kZWZpbmVkKCks
IHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSkp
OwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAgICAgfQog
ICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192685</attachid>
            <date>2013-03-12 02:53:19 -0700</date>
            <delta_ts>2013-03-12 03:49:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111971-20130312104917.patch</filename>
            <type>text/plain</type>
            <size>18276</size>
            <attacher name="Marja Hölttä">marja</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc1ZTUwMDYyZDc1YmEx
OGYzNmYwYzAzYzMwNTUyNzg3ZTMyYmFhNi4uMDI1MTg1MWYwMTc2YTRjNGJhOTIyNDVjZjhhOTlh
YzYwYjJhMWU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM0IEBACiAyMDEzLTAzLTExICBNYXJq
YSBIw7ZsdHTDpCAgPG1hcmphQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbVjhdIEdldCByaWQg
b2YgZnVuY3Rpb24tbGV2ZWwgc3RhdGljIEZ1bmN0aW9uVGVtcGxhdGVzIGluIGdlbmVyYXRlZCBi
aW5kaW5ncyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTE5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiB0aGUgZnV0dXJlIHdlJ2xsIGNyZWF0ZSBhbmQgc3RvcmUgZnVuY3Rpb24gdGVtcGxh
dGVzIGZvciBtYWluIHdvcmxkCisgICAgICAgIGFuZCBub24tbWFpbiB3b3JsZHMgc2VwYXJhdGVs
eSAoc2VlIGJ1ZyAxMTE3MjQpLCBoYXZpbmcgZnVuY3Rpb24KKyAgICAgICAgdGVtcGxhdGVzIGFz
IHN0YXRpYyB2YXJpYWJsZXMgaW5zaWRlIGZ1bmN0aW9ucyB3aWxsIGJyZWFrIHRoZQorICAgICAg
ICBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAodXBkYXRlZCB0aGUgYmlu
ZGluZ3MgdGVzdCBleHBlY3RhdGlvbnMpLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZURvbWFpblNhZmVGdW5jdGlvbkdl
dHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURP
TU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRl
cm5hbDo6cG9zdE1lc3NhZ2VBdHRyR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFBl
cklzb2xhdGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UGVySXNvbGF0ZURhdGE6OlY4
UGVySXNvbGF0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VjhQZXJJc29sYXRlRGF0YTo6cHJp
dmF0ZVRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4UGVySXNvbGF0ZURhdGEuaDoKKyAgICAgICAgKFY4UGVySXNvbGF0ZURhdGEpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlY4TG9jYXRpb246OnJlbG9hZEF0dHJHZXR0ZXJDdXN0b20pOgorICAgICAgICAoV2Vi
Q29yZTo6VjhMb2NhdGlvbjo6cmVwbGFjZUF0dHJHZXR0ZXJDdXN0b20pOgorICAgICAgICAoV2Vi
Q29yZTo6VjhMb2NhdGlvbjo6YXNzaWduQXR0ckdldHRlckN1c3RvbSk6CisKKzIwMTMtMDMtMTEg
IE1hcmphIEjDtmx0dMOkICA8bWFyamFAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtWOF0gRml4
IFY4SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTE5NjgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBlMzhhZjRkMTU2NWRkOWJlNWRmNGJm
NTA3ZjNmMjhmNmRmYzAxNDNjLi44YzI1N2M5ZTdlOGY2Y2I2MDcwMGE2ZTI4YmI2ODcwNjJhMjky
MDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQpAQCAtNzg2LDE0ICs3ODYsMTggQEAgc3ViIEdlbmVyYXRlRG9tYWluU2FmZUZ1
bmN0aW9uR2V0dGVyCiAgICAgICAgICRzaWduYXR1cmUgPSAidjg6OkxvY2FsPHY4OjpTaWduYXR1
cmU+KCkiOwogICAgIH0KIAotICAgIG15ICRuZXdUZW1wbGF0ZVN0cmluZyA9ICJ2ODo6RnVuY3Rp
b25UZW1wbGF0ZTo6TmV3KCR7aW50ZXJmYWNlTmFtZX1WOEludGVybmFsOjoke2Z1bmNOYW1lfU1l
dGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCAkc2lnbmF0dXJlKSI7CisgICAgbXkgJG5ld1Rl
bXBsYXRlUGFyYW1zID0gIiR7aW50ZXJmYWNlTmFtZX1WOEludGVybmFsOjoke2Z1bmNOYW1lfU1l
dGhvZENhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCAkc2lnbmF0dXJlIjsKIAogICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJGcmFtZS5oIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnRJbnRlcm5hbHMsIDw8
RU5EKTsKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtmdW5jTmFtZX1BdHRyR2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQogewotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJp
dmF0ZVRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXco
aW5mby5HZXRJc29sYXRlKCksICRuZXdUZW1wbGF0ZVN0cmluZyk7Ci0gICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLlRoaXMoKS0+RmluZEluc3RhbmNlSW5Qcm90b3R5cGVD
aGFpbigke3Y4SW50ZXJmYWNlTmFtZX06OkdldFRlbXBsYXRlKGluZm8uR2V0SXNvbGF0ZSgpLCB3
b3JsZFR5cGUoaW5mby5HZXRJc29sYXRlKCkpKSk7CisgICAgLy8gVGhpcyBpcyBvbmx5IGZvciBn
ZXR0aW5nIGEgdW5pcXVlIHBvaW50ZXIgd2hpY2ggd2UgY2FuIHBhc3MgdG8gcHJpdmF0ZVRlbXBs
YXRlLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcml2YXRlVGVtcGxhdGVVbmlxdWVLZXkgPSAi
JHtmdW5jTmFtZX1Qcml2YXRlVGVtcGxhdGUiOworICAgIFdyYXBwZXJXb3JsZFR5cGUgY3VycmVu
dFdvcmxkVHlwZSA9IHdvcmxkVHlwZShpbmZvLkdldElzb2xhdGUoKSk7CisgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHByaXZhdGVUZW1wbGF0ZSA9IFY4UGVySXNvbGF0
ZURhdGE6OmZyb20oaW5mby5HZXRJc29sYXRlKCkpLT5wcml2YXRlVGVtcGxhdGUoY3VycmVudFdv
cmxkVHlwZSwgJnByaXZhdGVUZW1wbGF0ZVVuaXF1ZUtleSwgJG5ld1RlbXBsYXRlUGFyYW1zKTsK
KworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5UaGlzKCktPkZpbmRJ
bnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oJHt2OEludGVyZmFjZU5hbWV9OjpHZXRUZW1wbGF0ZShp
bmZvLkdldElzb2xhdGUoKSwgY3VycmVudFdvcmxkVHlwZSkpOwogICAgIGlmIChob2xkZXIuSXNF
bXB0eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUgYnkgJ29iamVjdC5fX3By
b3RvX18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCiAgICAgICAgIC8vIGRvbWFpbiBzZWN1
cml0eSBjaGVjayBhbHJlYWR5CkBAIC04MDEsNyArODA1LDggQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiAke2Z1bmNOYW1lfUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGMKICAgICB9CiAgICAgJHtpbnRlcmZhY2VOYW1lfSogaW1wID0gJHt2OEludGVyZmFjZU5h
bWV9Ojp0b05hdGl2ZShob2xkZXIpOwogICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRnJhbWUoQmluZGluZ1N0YXRlOjppbnN0YW5jZSgpLCBpbXAtPmZyYW1lKCks
IERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpIHsKLSAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KGluZm8uR2V0SXNvbGF0ZSgpLCAkbmV3VGVtcGxh
dGVTdHJpbmcpOworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogc2hhcmVkVGVtcGxhdGVVbmlx
dWVLZXkgPSAiJHtmdW5jTmFtZX1TaGFyZWRUZW1wbGF0ZSI7CisgICAgICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9IFY4UGVySXNvbGF0ZURh
dGE6OmZyb20oaW5mby5HZXRJc29sYXRlKCkpLT5wcml2YXRlVGVtcGxhdGUoY3VycmVudFdvcmxk
VHlwZSwgJnNoYXJlZFRlbXBsYXRlVW5pcXVlS2V5LCAkbmV3VGVtcGxhdGVQYXJhbXMpOwogICAg
ICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDc4YzNmZmY1ZjU1NjA3NGQwOWVkMjI3
NzkxYjM5ZDdjYmViN2ExMDguLjdjNmVhZWY3MzZjOWFkNWYwNGVmOTdmNzJiZGIwOGEyZTdhZDk3
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xMjgsOCArMTI4LDEy
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gcG9zdE1lc3NhZ2VBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoaW5mby5HZXRJc29sYXRlKCksIHY4OjpGdW5jdGlvblRl
bXBsYXRlOjpOZXcoVGVzdEFjdGl2ZURPTU9iamVjdFY4SW50ZXJuYWw6OnBvc3RNZXNzYWdlTWV0
aG9kQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOFRlc3RBY3Rp
dmVET01PYmplY3Q6OkdldFJhd1RlbXBsYXRlKGluZm8uR2V0SXNvbGF0ZSgpKSkpKTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uVGhpcygpLT5GaW5kSW5zdGFuY2VJ
blByb3RvdHlwZUNoYWluKFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUoaW5mby5H
ZXRJc29sYXRlKCksIHdvcmxkVHlwZShpbmZvLkdldElzb2xhdGUoKSkpKTsKKyAgICAvLyBUaGlz
IGlzIG9ubHkgZm9yIGdldHRpbmcgYSB1bmlxdWUgcG9pbnRlciB3aGljaCB3ZSBjYW4gcGFzcyB0
byBwcml2YXRlVGVtcGxhdGUuCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHByaXZhdGVUZW1wbGF0
ZVVuaXF1ZUtleSA9ICJwb3N0TWVzc2FnZVByaXZhdGVUZW1wbGF0ZSI7CisgICAgV3JhcHBlcldv
cmxkVHlwZSBjdXJyZW50V29ybGRUeXBlID0gd29ybGRUeXBlKGluZm8uR2V0SXNvbGF0ZSgpKTsK
KyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRl
ID0gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpbmZvLkdldElzb2xhdGUoKSktPnByaXZhdGVUZW1w
bGF0ZShjdXJyZW50V29ybGRUeXBlLCAmcHJpdmF0ZVRlbXBsYXRlVW5pcXVlS2V5LCBUZXN0QWN0
aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFjaywgdjhVbmRl
ZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3
VGVtcGxhdGUoaW5mby5HZXRJc29sYXRlKCkpKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGhvbGRlciA9IGluZm8uVGhpcygpLT5GaW5kSW5zdGFuY2VJblByb3RvdHlwZUNoYWluKFY4
VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0VGVtcGxhdGUoaW5mby5HZXRJc29sYXRlKCksIGN1cnJl
bnRXb3JsZFR5cGUpKTsKICAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkgewogICAgICAgICAvLyBj
YW4gb25seSByZWFjaCBoZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1bmMnLCBhbmQgaXQgc2hv
dWxkIHBhc3NlZAogICAgICAgICAvLyBkb21haW4gc2VjdXJpdHkgY2hlY2sgYWxyZWFkeQpAQCAt
MTM3LDcgKzE0MSw4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9zdE1lc3NhZ2VB
dHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjCiAgICAgfQogICAgIFRlc3RB
Y3RpdmVET01PYmplY3QqIGltcCA9IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6dG9OYXRpdmUoaG9s
ZGVyKTsKICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1l
KEJpbmRpbmdTdGF0ZTo6aW5zdGFuY2UoKSwgaW1wLT5mcmFtZSgpLCBEb05vdFJlcG9ydFNlY3Vy
aXR5RXJyb3IpKSB7Ci0gICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gc2hhcmVkVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT46Ok5ldyhpbmZvLkdldElzb2xhdGUoKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhU
ZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFjaywg
djhVbmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6
R2V0UmF3VGVtcGxhdGUoaW5mby5HZXRJc29sYXRlKCkpKSkpOworICAgICAgICBzdGF0aWMgY29u
c3QgY2hhciogc2hhcmVkVGVtcGxhdGVVbmlxdWVLZXkgPSAicG9zdE1lc3NhZ2VTaGFyZWRUZW1w
bGF0ZSI7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFy
ZWRUZW1wbGF0ZSA9IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaW5mby5HZXRJc29sYXRlKCkpLT5w
cml2YXRlVGVtcGxhdGUoY3VycmVudFdvcmxkVHlwZSwgJnNoYXJlZFRlbXBsYXRlVW5pcXVlS2V5
LCBUZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VNZXRob2RDYWxsYmFj
aywgdjhVbmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVj
dDo6R2V0UmF3VGVtcGxhdGUoaW5mby5HZXRJc29sYXRlKCkpKSk7CiAgICAgICAgIHJldHVybiBz
aGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVySXNvbGF0ZURhdGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhQZXJJc29sYXRlRGF0YS5jcHAKaW5kZXggMDEwMGNlNmZhZjYyODVk
NjRjZTVlMmYyMmU2YmMzYTgzNzEyYzdkNS4uOTg2Y2EyM2MxMTAxZjRmYjAzZjE2NzAwNTEyMjIx
ODIyYWE1ZmE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJJ
c29sYXRlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJJc29s
YXRlRGF0YS5jcHAKQEAgLTQ0LDcgKzQ0LDggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgU2VxdWVuY2VN
ZW1vcnlJbnN0cnVtZW50YXRpb25UcmFpdHM8V2ViQ29yZTo6V3JhcHBlclR5cGVJbmZvKj4KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogVjhQZXJJc29sYXRlRGF0YTo6VjhQZXJJc29sYXRlRGF0YSh2
ODo6SXNvbGF0ZSogaXNvbGF0ZSkKLSAgICA6IG1fc3RyaW5nQ2FjaGUoYWRvcHRQdHIobmV3IFN0
cmluZ0NhY2hlKCkpKQorICAgIDogbV9pc29sYXRlKGlzb2xhdGUpCisgICAgLCBtX3N0cmluZ0Nh
Y2hlKGFkb3B0UHRyKG5ldyBTdHJpbmdDYWNoZSgpKSkKICAgICAsIG1faW50ZWdlckNhY2hlKGFk
b3B0UHRyKG5ldyBJbnRlZ2VyQ2FjaGUoKSkpCiAgICAgLCBtX2RvbURhdGFTdG9yZSgwKQogICAg
ICwgbV9oaWRkZW5Qcm9wZXJ0eU5hbWUoYWRvcHRQdHIobmV3IFY4SGlkZGVuUHJvcGVydHlOYW1l
KCkpKQpAQCAtMTIxLDYgKzEyMiwxNyBAQCB2b2lkIFY4UGVySXNvbGF0ZURhdGE6OnJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbgogICAgIGlu
Zm8uaWdub3JlTWVtYmVyKG1fYXV4aWxpYXJ5Q29udGV4dCk7CiB9CiAKK3Y4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFBlcklzb2xhdGVEYXRhOjpwcml2YXRlVGVtcGxhdGUo
V3JhcHBlcldvcmxkVHlwZSwgdm9pZCogcHJpdmF0ZVBvaW50ZXIsIHY4OjpJbnZvY2F0aW9uQ2Fs
bGJhY2sgY2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkYXRhLCB2ODo6SGFuZGxlPHY4
OjpTaWduYXR1cmU+IHNpZ25hdHVyZSwgaW50IGxlbmd0aCkKK3sKKyAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlOworICAgIFY4UGVySXNvbGF0
ZURhdGE6OlRlbXBsYXRlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3RlbXBsYXRlcy5maW5kKHBy
aXZhdGVQb2ludGVyKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fdGVtcGxhdGVzLmVuZCgpKQorICAg
ICAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gbmV3UHJpdmF0ZVRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+OjpOZXcobV9pc29sYXRlLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KGNh
bGxiYWNrLCBkYXRhLCBzaWduYXR1cmUsIGxlbmd0aCkpOworICAgIG1fdGVtcGxhdGVzLmFkZChw
cml2YXRlUG9pbnRlciwgbmV3UHJpdmF0ZVRlbXBsYXRlKTsKKyAgICByZXR1cm4gbmV3UHJpdmF0
ZVRlbXBsYXRlOworfQorCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIHZvaWQgVjhQZXJJc29sYXRl
RGF0YTo6dmlzaXRFeHRlcm5hbFN0cmluZ3MoRXh0ZXJuYWxTdHJpbmdWaXNpdG9yKiB2aXNpdG9y
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJJc29sYXRl
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJJc29sYXRlRGF0YS5oCmlu
ZGV4IDMzY2Q4NDk5NDc5Nzg4OGM4MzhkMTE0MGY5OGVjNjBlZDZhYjM2MDguLjBlN2E3ZjllNTgy
MjlhYWI3M2M3MmVhZmZlOWExOTgwMzEzNDQ2MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4UGVySXNvbGF0ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFBlcklzb2xhdGVEYXRhLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgVjhQ
ZXJJc29sYXRlRGF0YV9oCiAKICNpbmNsdWRlICJTY29wZWRQZXJzaXN0ZW50LmgiCisjaW5jbHVk
ZSAiV3JhcHBlclR5cGVJbmZvLmgiCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02NCw3ICs2NSw3IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgc3RhdGljIHZvaWQgZGlzcG9zZSh2ODo6SXNvbGF0ZSopOwogCi0gICAg
dHlwZWRlZiBIYXNoTWFwPFdyYXBwZXJUeXBlSW5mbyosIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiA+IFRlbXBsYXRlTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDx2b2lkKiwg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ID4gVGVtcGxhdGVNYXA7CiAKICAg
ICBUZW1wbGF0ZU1hcCYgcmF3VGVtcGxhdGVNYXAoKSB7IHJldHVybiBtX3Jhd1RlbXBsYXRlczsg
fQogICAgIFRlbXBsYXRlTWFwJiB0ZW1wbGF0ZU1hcCgpIHsgcmV0dXJuIG1fdGVtcGxhdGVzOyB9
CkBAIC0xMjcsMTEgKzEyOCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclNob3VsZENvbGxl
Y3RHYXJiYWdlU29vbigpIHsgbV9zaG91bGRDb2xsZWN0R2FyYmFnZVNvb24gPSBmYWxzZTsgfQog
ICAgIGJvb2wgc2hvdWxkQ29sbGVjdEdhcmJhZ2VTb29uKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRDb2xsZWN0R2FyYmFnZVNvb247IH0KIAorICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBwcml2YXRlVGVtcGxhdGUoV3JhcHBlcldvcmxkVHlwZSwgdm9pZCogcHJpdmF0
ZVBvaW50ZXIsIHY4OjpJbnZvY2F0aW9uQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBk
YXRhLCB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+LCBpbnQgbGVuZ3RoID0gMCk7CisKIHByaXZh
dGU6CiAgICAgZXhwbGljaXQgVjhQZXJJc29sYXRlRGF0YSh2ODo6SXNvbGF0ZSopOwogICAgIH5W
OFBlcklzb2xhdGVEYXRhKCk7CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25z
dHJ1Y3Rvck9mVG9TdHJpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogCisgICAgdjg6Oklzb2xh
dGUqIG1faXNvbGF0ZTsKICAgICBUZW1wbGF0ZU1hcCBtX3Jhd1RlbXBsYXRlczsKICAgICBUZW1w
bGF0ZU1hcCBtX3RlbXBsYXRlczsKICAgICBTY29wZWRQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBtX3RvU3RyaW5nVGVtcGxhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAKaW5kZXggNmI2ZmU2ZjYxNWRl
NzM2ZGZkYWY0NzVhMTQyMDczZjNlN2UzZmEzNi4uODk3ODEzOGZmZGI0M2QzZmE5MjljZjNmZTVi
NDk0MDU0ZDEyNDFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcApAQCAtMTM5LDggKzEzOSwxMiBAQCB2b2lkIFY4
TG9jYXRpb246OnNlYXJjaEF0dHJTZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2OAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TG9jYXRpb246OnJlbG9h
ZEF0dHJHZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdl
dElzb2xhdGUoKTsKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IHByaXZhdGVUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
Pjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMb2NhdGlvbjo6cmVs
b2FkTWV0aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2Nh
dGlvbjo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBob2xkZXIgPSBpbmZvLlRoaXMoKS0+RmluZEluc3RhbmNlSW5Qcm90b3R5cGVDaGFpbihW
OExvY2F0aW9uOjpHZXRUZW1wbGF0ZShpc29sYXRlLCB3b3JsZFR5cGUoaXNvbGF0ZSkpKTsKKyAg
ICAvLyBUaGlzIGlzIG9ubHkgZm9yIGdldHRpbmcgYSB1bmlxdWUgcG9pbnRlciB3aGljaCB3ZSBj
YW4gcGFzcyB0byBwcml2YXRlVGVtcGxhdGUuCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHByaXZh
dGVUZW1wbGF0ZVVuaXF1ZUtleSA9ICJyZWxvYWRQcml2YXRlVGVtcGxhdGUiOworICAgIFdyYXBw
ZXJXb3JsZFR5cGUgY3VycmVudFdvcmxkVHlwZSA9IHdvcmxkVHlwZShpc29sYXRlKTsKKyAgICB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlID0gVjhQ
ZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cHJpdmF0ZVRlbXBsYXRlKGN1cnJlbnRXb3Js
ZFR5cGUsICZwcml2YXRlVGVtcGxhdGVVbmlxdWVLZXksIFY4TG9jYXRpb246OnJlbG9hZE1ldGhv
ZEN1c3RvbSwgdjhVbmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246Okdl
dFJhd1RlbXBsYXRlKGlzb2xhdGUpKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhv
bGRlciA9IGluZm8uVGhpcygpLT5GaW5kSW5zdGFuY2VJblByb3RvdHlwZUNoYWluKFY4TG9jYXRp
b246OkdldFRlbXBsYXRlKGlzb2xhdGUsIGN1cnJlbnRXb3JsZFR5cGUpKTsKICAgICBpZiAoaG9s
ZGVyLklzRW1wdHkoKSkgewogICAgICAgICAvLyBjYW4gb25seSByZWFjaCBoZXJlIGJ5ICdvYmpl
Y3QuX19wcm90b19fLmZ1bmMnLCBhbmQgaXQgc2hvdWxkIHBhc3NlZAogICAgICAgICAvLyBkb21h
aW4gc2VjdXJpdHkgY2hlY2sgYWxyZWFkeQpAQCAtMTQ4LDcgKzE1Miw4IEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOExvY2F0aW9uOjpyZWxvYWRBdHRyR2V0dGVyQ3VzdG9tKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuCiAgICAgfQogICAgIExvY2F0aW9uKiBpbXAgPSBWOExvY2F0aW9uOjp0b05h
dGl2ZShob2xkZXIpOwogICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvRnJhbWUoQmluZGluZ1N0YXRlOjppbnN0YW5jZSgpLCBpbXAtPmZyYW1lKCksIERvTm90UmVw
b3J0U2VjdXJpdHlFcnJvcikpIHsKLSAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhM
b2NhdGlvbjo6cmVsb2FkTWV0aG9kQ3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJl
OjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKSk7CisgICAgICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzaGFyZWRUZW1wbGF0ZVVuaXF1ZUtleSA9ICJyZWxvYWRTaGFyZWRU
ZW1wbGF0ZSI7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBz
aGFyZWRUZW1wbGF0ZSA9IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaW5mby5HZXRJc29sYXRlKCkp
LT5wcml2YXRlVGVtcGxhdGUoY3VycmVudFdvcmxkVHlwZSwgJnNoYXJlZFRlbXBsYXRlVW5pcXVl
S2V5LCBWOExvY2F0aW9uOjpyZWxvYWRNZXRob2RDdXN0b20sIHY4VW5kZWZpbmVkKCksIHY4OjpT
aWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSkpOwogICAg
ICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAgICAgfQogICAgIHJl
dHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CkBAIC0xNTcsOCArMTYyLDEyIEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOExvY2F0aW9uOjpyZWxvYWRBdHRyR2V0dGVyQ3VzdG9t
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhMb2NhdGlv
bjo6cmVwbGFjZUF0dHJHZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUg
PSBpbmZvLkdldElzb2xhdGUoKTsKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IHByaXZhdGVUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMb2Nh
dGlvbjo6cmVwbGFjZU1ldGhvZEN1c3RvbSwgdjhVbmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6
TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKGlzb2xhdGUpKSkpOwotICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5UaGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90
eXBlQ2hhaW4oVjhMb2NhdGlvbjo6R2V0VGVtcGxhdGUoaXNvbGF0ZSwgd29ybGRUeXBlKGlzb2xh
dGUpKSk7CisgICAgLy8gVGhpcyBpcyBvbmx5IGZvciBnZXR0aW5nIGEgdW5pcXVlIHBvaW50ZXIg
d2hpY2ggd2UgY2FuIHBhc3MgdG8gcHJpdmF0ZVRlbXBsYXRlTWFwLgorICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBwcml2YXRlVGVtcGxhdGVVbmlxdWVLZXkgPSAicmVwbGFjZVByaXZhdGVUZW1wbGF0
ZSI7CisgICAgV3JhcHBlcldvcmxkVHlwZSBjdXJyZW50V29ybGRUeXBlID0gd29ybGRUeXBlKGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gcHJpdmF0ZVRlbXBsYXRlID0gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+cHJp
dmF0ZVRlbXBsYXRlKGN1cnJlbnRXb3JsZFR5cGUsICZwcml2YXRlVGVtcGxhdGVVbmlxdWVLZXks
IFY4TG9jYXRpb246OnJlcGxhY2VNZXRob2RDdXN0b20sIHY4VW5kZWZpbmVkKCksIHY4OjpTaWdu
YXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSkpOworCisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLlRoaXMoKS0+RmluZEluc3RhbmNl
SW5Qcm90b3R5cGVDaGFpbihWOExvY2F0aW9uOjpHZXRUZW1wbGF0ZShpc29sYXRlLCBjdXJyZW50
V29ybGRUeXBlKSk7CiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHsKICAgICAgICAgLy8gY2Fu
IG9ubHkgcmVhY2ggaGVyZSBieSAnb2JqZWN0Ll9fcHJvdG9fXy5mdW5jJywgYW5kIGl0IHNob3Vs
ZCBwYXNzZWQKICAgICAgICAgLy8gZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVhZHkKQEAgLTE2
Niw3ICsxNzUsOCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhMb2NhdGlvbjo6cmVwbGFjZUF0
dHJHZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+CiAgICAgfQogICAgIExvY2F0aW9u
KiBpbXAgPSBWOExvY2F0aW9uOjp0b05hdGl2ZShob2xkZXIpOwogICAgIGlmICghQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoQmluZGluZ1N0YXRlOjppbnN0YW5jZSgp
LCBpbXAtPmZyYW1lKCksIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpIHsKLSAgICAgICAgc3Rh
dGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KGlzb2xhdGUsIHY4OjpG
dW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMb2NhdGlvbjo6cmVwbGFjZU1ldGhvZEN1c3RvbSwgdjhV
bmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRl
KGlzb2xhdGUpKSkpOworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogc2hhcmVkVGVtcGxhdGVV
bmlxdWVLZXkgPSAicmVwbGFjZVNoYXJlZFRlbXBsYXRlIjsKKyAgICAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gVjhQZXJJc29sYXRlRGF0
YTo6ZnJvbShpbmZvLkdldElzb2xhdGUoKSktPnByaXZhdGVUZW1wbGF0ZShjdXJyZW50V29ybGRU
eXBlLCAmc2hhcmVkVGVtcGxhdGVVbmlxdWVLZXksIFY4TG9jYXRpb246OnJlcGxhY2VNZXRob2RD
dXN0b20sIHY4VW5kZWZpbmVkKCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRS
YXdUZW1wbGF0ZShpc29sYXRlKSkpOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdl
dEZ1bmN0aW9uKCk7CiAgICAgfQogICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0
aW9uKCk7CkBAIC0xNzUsOSArMTg1LDEyIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOExvY2F0
aW9uOjpyZXBsYWNlQXR0ckdldHRlckN1c3RvbSh2ODo6TG9jYWw8djg6OlN0cmluZz4KIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOExvY2F0aW9uOjphc3NpZ25BdHRyR2V0dGVyQ3VzdG9tKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewog
ICAgIHY4OjpJc29sYXRlKiBpc29sYXRlID0gaW5mby5HZXRJc29sYXRlKCk7Ci0gICAgc3RhdGlj
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlVGVtcGxhdGUgPQot
ICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhpc29sYXRl
LCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4TG9jYXRpb246OmFzc2lnbk1ldGhvZEN1c3Rv
bSwgdjhVbmRlZmluZWQoKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1Rl
bXBsYXRlKGlzb2xhdGUpKSkpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0g
aW5mby5UaGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhMb2NhdGlvbjo6R2V0
VGVtcGxhdGUoaXNvbGF0ZSwgd29ybGRUeXBlKGlzb2xhdGUpKSk7CisgICAgLy8gVGhpcyBpcyBv
bmx5IGZvciBnZXR0aW5nIGEgdW5pcXVlIHBvaW50ZXIgd2hpY2ggd2UgY2FuIHBhc3MgdG8gcHJp
dmF0ZVRlbXBsYXRlTWFwLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcml2YXRlVGVtcGxhdGVV
bmlxdWVLZXkgPSAiYXNzaWduUHJpdmF0ZVRlbXBsYXRlIjsKKyAgICBXcmFwcGVyV29ybGRUeXBl
IGN1cnJlbnRXb3JsZFR5cGUgPSB3b3JsZFR5cGUoaW5mby5HZXRJc29sYXRlKCkpOworICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlVGVtcGxhdGUgPSBWOFBl
cklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5wcml2YXRlVGVtcGxhdGUoY3VycmVudFdvcmxk
VHlwZSwgJnByaXZhdGVUZW1wbGF0ZVVuaXF1ZUtleSwgVjhMb2NhdGlvbjo6YXNzaWduTWV0aG9k
Q3VzdG9tLCB2OFVuZGVmaW5lZCgpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6R2V0
UmF3VGVtcGxhdGUoaXNvbGF0ZSkpKTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9s
ZGVyID0gaW5mby5UaGlzKCktPkZpbmRJbnN0YW5jZUluUHJvdG90eXBlQ2hhaW4oVjhMb2NhdGlv
bjo6R2V0VGVtcGxhdGUoaXNvbGF0ZSwgY3VycmVudFdvcmxkVHlwZSkpOwogICAgIGlmIChob2xk
ZXIuSXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUgYnkgJ29iamVj
dC5fX3Byb3RvX18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCiAgICAgICAgIC8vIGRvbWFp
biBzZWN1cml0eSBjaGVjayBhbHJlYWR5CkBAIC0xODUsNyArMTk4LDggQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4TG9jYXRpb246OmFzc2lnbkF0dHJHZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG4KICAgICB9CiAgICAgTG9jYXRpb24qIGltcCA9IFY4TG9jYXRpb246OnRvTmF0
aXZlKGhvbGRlcik7CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNz
VG9GcmFtZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCksIGltcC0+ZnJhbWUoKSwgRG9Ob3RSZXBv
cnRTZWN1cml0eUVycm9yKSkgewotICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+OjpOZXcoaXNvbGF0ZSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhWOExv
Y2F0aW9uOjphc3NpZ25NZXRob2RDdXN0b20sIHY4VW5kZWZpbmVkKCksIHY4OjpTaWduYXR1cmU6
Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZShpc29sYXRlKSkpKTsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHNoYXJlZFRlbXBsYXRlVW5pcXVlS2V5ID0gImFzc2lnblNoYXJlZFRl
bXBsYXRlIjsKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNo
YXJlZFRlbXBsYXRlID0gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpbmZvLkdldElzb2xhdGUoKSkt
PnByaXZhdGVUZW1wbGF0ZShjdXJyZW50V29ybGRUeXBlLCAmc2hhcmVkVGVtcGxhdGVVbmlxdWVL
ZXksIFY4TG9jYXRpb246OmFzc2lnbk1ldGhvZEN1c3RvbSwgdjhVbmRlZmluZWQoKSwgdjg6OlNp
Z25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKGlzb2xhdGUpKSk7CiAgICAg
ICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAgICAgcmV0
dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>