<?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>103484</bug_id>
          
          <creation_ts>2012-11-27 23:05:13 -0800</creation_ts>
          <short_desc>IndexedDB: Implement IndexedDB bindings for JSC</short_desc>
          <delta_ts>2012-12-05 07:38:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>103554</dependson>
          <blocked>45110</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Michael Pruett">michael</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>darin</cc>
    
    <cc>d-r</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haraken</cc>
    
    <cc>jsbell</cc>
    
    <cc>ojan</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>777557</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-11-27 23:05:13 -0800</bug_when>
    <thetext>Implement IndexedDB bindings for JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778056</commentid>
    <comment_count>1</comment_count>
      <attachid>176519</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-11-28 10:47:11 -0800</bug_when>
    <thetext>Created attachment 176519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778137</commentid>
    <comment_count>2</comment_count>
      <attachid>176519</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-28 11:52:31 -0800</bug_when>
    <thetext>Comment on attachment 176519
Patch

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

&gt; Source/WebCore/ChangeLog:6
&gt; +        Reviewed by NOBODY (OOPS!).

Please include more of an explanation of the changes after the Reviewed line.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Tests: storage/indexeddb/*

Can you indicate roughly how many tests pass/fail with just this patch when INDEXED_DATABASE is enabled locally?

&gt; Source/WebCore/ChangeLog:13
&gt; +        * Modules/indexeddb/IDBVersionChangeRequest.idl:

FYI, IDBVersionChangeRequest should be going away shortly (now that setVersion is gone, deleteDatabase can switch over to IDBOpenDBRequest). But that shouldn&apos;t block landing this.

&gt; Source/WebCore/ChangeLog:23
&gt; +        * bindings/js/IDBBindingUtilities.cpp:

You could mention here that these all match the v8 implementations.

&gt; Source/WebCore/bindings/js/JSIDBOpenDBRequestCustom.cpp:40
&gt; +void JSIDBOpenDBRequest::visitChildren(JSCell* cell, JSC::SlotVisitor&amp; visitor)

I don&apos;t know the JSC binding code well but after a brief glance it looks like this is doing the right thing. Unfortunate that this boilerplate is needed; we should probably put a bug in to add WebKitIDL attributes to autogenerate the different visitChildren variations (there only seem to be a few different patterns).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778488</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-11-28 16:40:31 -0800</bug_when>
    <thetext>(In reply to comment #2)
Joshua, thanks for your feedback. I&apos;ll update the patch with an explanation of the changes.

&gt; Can you indicate roughly how many tests pass/fail with just this patch when INDEXED_DATABASE is enabled locally?

With only this patch and another fixing bug 103554, WebKitGTK+ passes 112 of the 196 layout tests in storage/indexeddb. I have patches which fix additional failures, but those patches are independent of the change proposed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778490</commentid>
    <comment_count>4</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-28 16:44:44 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; With only this patch and another fixing bug 103554, WebKitGTK+ passes 112 of the 196 layout tests in storage/indexeddb. 

I think that would be worth including in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779450</commentid>
    <comment_count>5</comment_count>
      <attachid>176820</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-11-29 14:38:26 -0800</bug_when>
    <thetext>Created attachment 176820
Patch

I&apos;ve updated the patch to incorporate the suggestions I&apos;ve received thus far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781108</commentid>
    <comment_count>6</comment_count>
      <attachid>176820</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-12-02 21:17:17 -0800</bug_when>
    <thetext>Comment on attachment 176820
Patch

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

The approach looks reasonable. I hope JSC experts also take a look.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:130
&gt; +        if (currentValue.isString() &amp;&amp; keyPathElements[i] == &quot;length&quot;)
&gt; +            return jsNumber(currentValue.toString(exec)-&gt;length());
&gt; +        if (!currentValue.isObject())
&gt; +            return jsUndefined();

This behavior looks different from V8&apos;s one.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:144
&gt; +

Don&apos;t you need to set up a new scope here?

  APIEntryShim entryShim(exec);

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:147
&gt; +    jsValue = getNthValueOnKeyPath(exec, jsValue, keyPathElements,
&gt; +        keyPathElements.size());

Nit: you don&apos;t need to wrap the line.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:148
&gt; +    if (jsValue.isUndefined())

This should be jsValue.isEmpty()?

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:204
&gt; +    ExecState* exec = requestState-&gt;exec();
&gt; +    APIEntryShim entryShim(exec);

You can use DOMRequestState::Scope.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:208
&gt; +    if (!jsValue.isObject())
&gt; +        return false;

Remove this.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:211
&gt; +    JSValue parent = ensureNthValueOnKeyPath(exec, asObject(jsValue),
&gt; +        keyPathElements, keyPathElements.size() - 1);

asObject(jsValue) =&gt; jsValue.

Nit: You don&apos;t need to wrap the line.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:212
&gt; +    if (parent.isUndefined())

This should be parent.isEmpty()?

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:216
&gt; +    if (!set(exec, parent, keyPathElements.last(),
&gt; +        toJS(exec, jsCast&lt;JSDOMGlobalObject*&gt;(exec-&gt;lexicalGlobalObject()), key.get())))

Nit: Don&apos;t wrap the line.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:228
&gt; +    ExecState* exec = requestState-&gt;exec();
&gt; +    APIEntryShim entryShim(exec);

You can use DOMRequestState::Scope.

BTW, V8 binding isn&apos;t creating a scope of DOMRequestState::Scope, which looks wrong.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:260
&gt; +    JSC::ExecState* exec = requestState-&gt;exec();
&gt; +    APIEntryShim entryShim(exec);

You can use DOMRequestState::Scope.

BTW, V8 binding isn&apos;t creating a scope of DOMRequestState::Scope, which looks wrong.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:262
&gt; +    return canInjectNthValueOnKeyPath(exec, scriptValue.jsValue(),
&gt; +        keyPathElements, keyPathElements.size() - 1);

Nit: don&apos;t wrap the line.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:268
&gt; +    ExecState* exec = requestState-&gt;exec();
&gt; +    APIEntryShim entryShim(exec);

You can use DOMRequestState::Scope.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:278
&gt; +    ExecState* exec = requestState-&gt;exec();
&gt; +    APIEntryShim entryShim(exec);

You can use DOMRequestState::Scope.

BTW, V8 binding isn&apos;t creating a scope of DOMRequestState::Scope, which looks wrong.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:280
&gt; +    return ScriptValue(exec-&gt;globalData(),
&gt; +        toJS(exec, jsCast&lt;JSDOMGlobalObject*&gt;(exec-&gt;lexicalGlobalObject()), key.get()));

Nit: don&apos;t wrap the line.

&gt; Source/WebCore/bindings/js/JSIDBAnyCustom.cpp:-88
&gt; -    case IDBAny::SerializedScriptValueType:
&gt; -        return idbAny-&gt;serializedScriptValue()-&gt;deserialize(exec, globalObject);

Why can you remove this?

&gt; Source/WebCore/bindings/js/JSIDBAnyCustom.cpp:88
&gt; +    case IDBAny::StringType:
&gt; +        return jsStringWithCache(exec, idbAny-&gt;string());

Just to confirm: Is there any reason why you moved this code from above to here?

&gt; Source/WebCore/bindings/js/JSIDBOpenDBRequestCustom.cpp:48
&gt; +void JSIDBOpenDBRequest::visitChildren(JSCell* cell, JSC::SlotVisitor&amp; visitor)
&gt; +{
&gt; +    JSIDBOpenDBRequest* jsRequest = jsCast&lt;JSIDBOpenDBRequest*&gt;(cell);
&gt; +    ASSERT_GC_OBJECT_INHERITS(jsRequest, &amp;s_info);
&gt; +    COMPILE_ASSERT(StructureFlags &amp; OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
&gt; +    ASSERT(jsRequest-&gt;structure()-&gt;typeInfo().overridesVisitChildren());
&gt; +    Base::visitChildren(jsRequest, visitor);
&gt; +    static_cast&lt;IDBOpenDBRequest*&gt;(jsRequest-&gt;impl())-&gt;visitJSEventListeners(visitor);
&gt; +}

Why do you need this? Event listeners are already cared by JS bindings, aren&apos;t they?

&gt; Source/WebCore/bindings/js/JSIDBVersionChangeRequestCustom.cpp:47
&gt; +void JSIDBVersionChangeRequest::visitChildren(JSCell* cell, JSC::SlotVisitor&amp; visitor)
&gt;  {
&gt; -    // FIXME: Implement this.
&gt; +    JSIDBVersionChangeRequest* jsRequest = jsCast&lt;JSIDBVersionChangeRequest*&gt;(cell);
&gt; +    ASSERT_GC_OBJECT_INHERITS(jsRequest, &amp;s_info);
&gt; +    COMPILE_ASSERT(StructureFlags &amp; OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
&gt; +    ASSERT(jsRequest-&gt;structure()-&gt;typeInfo().overridesVisitChildren());
&gt; +    Base::visitChildren(jsRequest, visitor);
&gt; +    static_cast&lt;IDBVersionChangeRequest*&gt;(jsRequest-&gt;impl())-&gt;visitJSEventListeners(visitor);
&gt;  }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781523</commentid>
    <comment_count>7</comment_count>
      <attachid>176820</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-03 09:16:05 -0800</bug_when>
    <thetext>Comment on attachment 176820
Patch

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

&gt;&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:228
&gt;&gt; +    APIEntryShim entryShim(exec);
&gt; 
&gt; You can use DOMRequestState::Scope.
&gt; 
&gt; BTW, V8 binding isn&apos;t creating a scope of DOMRequestState::Scope, which looks wrong.

All of the call sites to this function are within a script scope already, so dcarney didn&apos;t add it here. I agree it&apos;s odd for what looks like a general purpose utility function.

&gt;&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:260
&gt;&gt; +    APIEntryShim entryShim(exec);
&gt; 
&gt; You can use DOMRequestState::Scope.
&gt; 
&gt; BTW, V8 binding isn&apos;t creating a scope of DOMRequestState::Scope, which looks wrong.

Ditto.

&gt;&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:278
&gt;&gt; +    APIEntryShim entryShim(exec);
&gt; 
&gt; You can use DOMRequestState::Scope.
&gt; 
&gt; BTW, V8 binding isn&apos;t creating a scope of DOMRequestState::Scope, which looks wrong.

And this is only called from places that have already set up a DOMRequestState::Scope.

&gt;&gt; Source/WebCore/bindings/js/JSIDBAnyCustom.cpp:-88
&gt;&gt; -        return idbAny-&gt;serializedScriptValue()-&gt;deserialize(exec, globalObject);
&gt; 
&gt; Why can you remove this?

SerializedScriptValues were removed from IDBAny in favor of just ScriptValues, to avoid unnecessary de/serializations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783189</commentid>
    <comment_count>8</comment_count>
      <attachid>177628</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-04 17:56:31 -0800</bug_when>
    <thetext>Created attachment 177628
Patch

With this latest patch, I&apos;ve removed APIEntryShim scopes from IDBBindingUtilities.cpp and removed customized bindings for IDBOpenDBRequest and IDBVersionChangeRequest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783210</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-04 18:14:48 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:130
&gt; &gt; +        if (currentValue.isString() &amp;&amp; keyPathElements[i] == &quot;length&quot;)
&gt; &gt; +            return jsNumber(currentValue.toString(exec)-&gt;length());
&gt; &gt; +        if (!currentValue.isObject())
&gt; &gt; +            return jsUndefined();
&gt; 
&gt; This behavior looks different from V8&apos;s one.

Thanks, I neglected to remove this unnecessary code when I cleaned up this method.

&gt; &gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:148
&gt; &gt; +    if (jsValue.isUndefined())
&gt; 
&gt; This should be jsValue.isEmpty()?

I&apos;ve used jsUndefined() as the error return value in ensureNthValueOnKeyPath() and getNthValueOnKeyPath(), so I believe the appropriate test is isUndefined() rather than isEmpty().

&gt; &gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:228
&gt; &gt; +    ExecState* exec = requestState-&gt;exec();
&gt; &gt; +    APIEntryShim entryShim(exec);
&gt; 
&gt; You can use DOMRequestState::Scope.
&gt; 
&gt; BTW, V8 binding isn&apos;t creating a scope of DOMRequestState::Scope, which looks wrong.

I&apos;ve removed all APIEntryShim scopes from IDBBindingUtilities.cpp. The V8 implementation of IDBBindingUtilities.cpp assumes that the proper DOMRequestState scope has already been established in the core IDB code, and the same now holds true for the JSC implementation.

&gt; &gt; Source/WebCore/bindings/js/JSIDBAnyCustom.cpp:88
&gt; &gt; +    case IDBAny::StringType:
&gt; &gt; +        return jsStringWithCache(exec, idbAny-&gt;string());
&gt; 
&gt; Just to confirm: Is there any reason why you moved this code from above to here?

Sorry, I&apos;ve undone this unnecessary change.

&gt; &gt; Source/WebCore/bindings/js/JSIDBOpenDBRequestCustom.cpp:48
&gt; &gt; +void JSIDBOpenDBRequest::visitChildren(JSCell* cell, JSC::SlotVisitor&amp; visitor)
&gt; &gt; +{
&gt; &gt; +    JSIDBOpenDBRequest* jsRequest = jsCast&lt;JSIDBOpenDBRequest*&gt;(cell);
&gt; &gt; +    ASSERT_GC_OBJECT_INHERITS(jsRequest, &amp;s_info);
&gt; &gt; +    COMPILE_ASSERT(StructureFlags &amp; OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
&gt; &gt; +    ASSERT(jsRequest-&gt;structure()-&gt;typeInfo().overridesVisitChildren());
&gt; &gt; +    Base::visitChildren(jsRequest, visitor);
&gt; &gt; +    static_cast&lt;IDBOpenDBRequest*&gt;(jsRequest-&gt;impl())-&gt;visitJSEventListeners(visitor);
&gt; &gt; +}
&gt; 
&gt; Why do you need this? Event listeners are already cared by JS bindings, aren&apos;t they?

With the binding generator change in bug 103908, the visitChildren() methods of IDBOpenDBRequest and IDBVersionChangeRequest are now automatically generated, and these custom visitChildren() methods are unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783295</commentid>
    <comment_count>10</comment_count>
      <attachid>177628</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-04 20:16:05 -0800</bug_when>
    <thetext>Comment on attachment 177628
Patch

Attachment 177628 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15132726</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783312</commentid>
    <comment_count>11</comment_count>
      <attachid>177628</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-12-04 20:26:58 -0800</bug_when>
    <thetext>Comment on attachment 177628
Patch

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

Looks OK. This will behave consistently with V8&apos;s one.

&gt; &gt; &gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:228
&gt; &gt; &gt; +    ExecState* exec = requestState-&gt;exec();
&gt; &gt; &gt; +    APIEntryShim entryShim(exec);
&gt; &gt; 
&gt; &gt; You can use DOMRequestState::Scope.
&gt; &gt; 
&gt; &gt; BTW, V8 binding isn&apos;t creating a scope of DOMRequestState::Scope, which looks wrong.
&gt;
&gt; I&apos;ve removed all APIEntryShim scopes from IDBBindingUtilities.cpp. The V8 implementation of  IDBBindingUtilities.cpp assumes that the proper DOMRequestState scope has already been established  in the core IDB code, and the same now holds true for the JSC implementation.

OK, then why does V8 binding need to create &apos;v8::HandleScope handleScope;&apos; in IDBBindingUtilities.cpp ? (e.g. createIDBKeyFromScriptValueAndKeyPath())

BTW, maybe I&apos;m wrong but do we really need DOMRequestState? What we need is just to keep a ScriptExecutionContext, isn&apos;t it?

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:87
&gt; +            unsigned length = array-&gt;length();

Nit: unsigned =&gt; size_t

The same comment for all unsigneds in this patch.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:247
&gt; +    return canInjectNthValueOnKeyPath(exec, scriptValue.jsValue(),
&gt; +        keyPathElements, keyPathElements.size() - 1);

Nit: Don&apos;t wrap the line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783315</commentid>
    <comment_count>12</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-12-04 20:30:08 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 177628 [details])
&gt; Attachment 177628 [details] did not pass mac-ews (mac):
&gt; Output: http://queues.webkit.org/results/15132726

It looks like you need to remove JSIDBVersionChangeRequestCustom.cpp from Xcode build files. Please grep &quot;JSIDBVersionChangeRequestCustom&quot; under WebCore/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783333</commentid>
    <comment_count>13</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-12-04 20:42:26 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; I&apos;ve removed all APIEntryShim scopes from IDBBindingUtilities.cpp. The V8 implementation of  IDBBindingUtilities.cpp assumes that the proper DOMRequestState scope has already been established  in the core IDB code, and the same now holds true for the JSC implementation.
&gt; 
&gt; BTW, maybe I&apos;m wrong but do we really need DOMRequestState? What we need is just to keep a ScriptExecutionContext, isn&apos;t it?

We discussed offline. We need DOMRequestState. Ignore this comment:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783366</commentid>
    <comment_count>14</comment_count>
      <attachid>177663</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-04 21:20:54 -0800</bug_when>
    <thetext>Created attachment 177663
Patch

I&apos;ve removed JSIDBVersionChangeRequestCustom.cpp from WebCore.xcodeproj and have changed unsigned to size_t for array lengths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783731</commentid>
    <comment_count>15</comment_count>
      <attachid>177663</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-05 07:38:39 -0800</bug_when>
    <thetext>Comment on attachment 177663
Patch

Clearing flags on attachment: 177663

Committed r136686: &lt;http://trac.webkit.org/changeset/136686&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783732</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-05 07:38:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176519</attachid>
            <date>2012-11-28 10:47:11 -0800</date>
            <delta_ts>2012-11-29 14:38:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-jsc.patch</filename>
            <type>text/plain</type>
            <size>27875</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogV2VkLCAyOCBOb3Yg
MjAxMiAwODo1NjowMiAtMDgwMApTdWJqZWN0OiBJbmRleGVkREI6IEltcGxlbWVudCBJbmRleGVk
REIgYmluZGluZ3MgZm9yIEpTQwoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ4ICsrKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNyArCiAuLi4vV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbCB8ICAgIDMgKy0KIC4uLi9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgIHwgICAgMyArLQogU291cmNl
L1dlYkNvcmUvVXNlSlNDLmNtYWtlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVJlcXVlc3RTdGF0ZS5oICAgICAgIHwgICA4NCAr
KysrKysrCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cCB8ICAyNDUgKysrKysrKysrKysrKysrKysrKy0KIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuaCAgIHwgICAgOSArCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkFueUN1c3RvbS5jcHAgICAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCAgICAgIHwgICAgNSArLQogLi4uL2JpbmRpbmdz
L2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAgICAgICAgfCAgIDUyICsrKysrCiAuLi4v
anMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAgICAgICAgICB8ICAgMTcgKy0K
IDEzIGZpbGVzIGNoYW5nZWQsIDQ2OCBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01SZXF1ZXN0U3Rh
dGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
T3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDNhNWQyMTcu
LjllMGNiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xOTUsOCArMTk1LDEwIEBAIFNFVChX
ZWJDb3JlX0lETF9GSUxFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5pZGwKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0
LmlkbAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVXBn
cmFkZU5lZWRlZEV2ZW50LmlkbAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFu
Z2VFdmVudC5pZGwKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5pZGwKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNl
LmlkbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDNiNGRjY2MuLjUzZmMwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1MSBAQAorMjAxMi0xMS0yNyAgTWljaGFlbCBQcnVldHQgIDxtaWNoYWVsQDY4ay5vcmc+CisK
KyAgICAgICAgSW5kZXhlZERCOiBJbXBsZW1lbnQgSW5kZXhlZERCIGJpbmRpbmdzIGZvciBKU0MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBz
dG9yYWdlL2luZGV4ZWRkYi8qCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9w
ZW5EQlJlcXVlc3QuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBVc2VKU0MuY21ha2U6CisgICAgICAgICogYmlu
ZGluZ3MvanMvRE9NUmVxdWVzdFN0YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChET01SZXF1ZXN0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUmVxdWVzdFN0
YXRlOjpET01SZXF1ZXN0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUmVxdWVzdFN0YXRl
OjpjbGVhcik6CisgICAgICAgIChTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpET01SZXF1ZXN0
U3RhdGU6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpET01SZXF1ZXN0U3RhdGU6
OmV4ZWMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FuU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVJREJLZXlGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TnRoVmFsdWVP
bktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVl
QW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRl
c2VyaWFsaXplSURCVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aWRiS2V5VG9TY3JpcHRWYWx1
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJLZXlD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNJREJPcGVuREJSZXF1ZXN0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCT3BlbkRCUmVxdWVzdDo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Ojp2aXNpdENo
aWxkcmVuKToKKwogMjAxMi0xMS0yOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFt2OF0gNCUgcmVncmVzc2lvbiBpbiBkb21fdHJhdmVyc2UgdGVzdHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGRjY2JmN2IuLmE3YmY2NmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDYzLDEyICs0NjMsMTYgQEAgd2ViY29yZV9idWlsdF9z
b3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCS2V5UmFuZ2UuaCBcCiAJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQk9iamVjdFN0b3JlLmNwcCBcCiAJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU0lEQk9iamVjdFN0b3JlLmggXAorCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNJREJPcGVuREJSZXF1ZXN0LmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lE
Qk9wZW5EQlJlcXVlc3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlJlcXVlc3Qu
Y3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCUmVxdWVzdC5oIFwKIAlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTSURCVHJhbnNhY3Rpb24uY3BwIFwKIAlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTSURCVHJhbnNhY3Rpb24uaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lE
QlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJW
ZXJzaW9uQ2hhbmdlRXZlbnQuaCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlVwZ3Jh
ZGVOZWVkZWRFdmVudC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJVcGdyYWRl
TmVlZGVkRXZlbnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFnZURhdGEuY3BwIFwK
QEAgLTEyMjcsNiArMTIzMSw3IEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgXAogCSQoV2ViQ29yZSkvTW9k
dWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCBcCisJJChXZWJDb3JlKS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsIFwKIAkkKFdlYkNvcmUp
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCBcCiAJJChXZWJD
b3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlLmlkbCBc
CiAJJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmlkbCBcCkBAIC0y
MjM5LDYgKzIyNDQsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9HQ0NvbnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuaCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMu
aCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmgg
XApAQCAtMjMzOSw2ICsyMzQ1LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uaCBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQktleUN1c3RvbS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
T3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCmluZGV4IGYwMGU4ZTQuLmQzZDcz
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5E
QlJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9w
ZW5EQlJlcXVlc3QuaWRsCkBAIC0yNyw3ICsyNyw4IEBACiAgICAgQ29uZGl0aW9uYWw9SU5ERVhF
RF9EQVRBQkFTRSwKICAgICBBY3RpdmVET01PYmplY3QsCiAgICAgRXZlbnRUYXJnZXQsCi0gICAg
SlNOb1N0YXRpY1RhYmxlcworICAgIEpTTm9TdGF0aWNUYWJsZXMsCisgICAgSlNHZW5lcmF0ZVRv
SlNPYmplY3QKIF0gaW50ZXJmYWNlIElEQk9wZW5EQlJlcXVlc3QgOiBJREJSZXF1ZXN0IHsKICAg
ICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7CiAgICAgYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb251cGdyYWRlbmVlZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCmluZGV4IDli
NmUxZTMuLmQ3ZTExYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwKQEAgLTI3LDcgKzI3LDgg
QEAKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFjdGl2ZURPTU9iamVj
dCwKICAgICBFdmVudFRhcmdldCwKLSAgICBKU05vU3RhdGljVGFibGVzCisgICAgSlNOb1N0YXRp
Y1RhYmxlcywKKyAgICBKU0dlbmVyYXRlVG9KU09iamVjdAogXSBpbnRlcmZhY2UgSURCVmVyc2lv
bkNoYW5nZVJlcXVlc3QgOiBJREJSZXF1ZXN0IHsKICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbmJsb2NrZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCmluZGV4IDNkNTI0ZWEuLjMxNmZjNGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Vc2VKU0MuY21ha2UKQEAgLTIwNCw2ICsyMDQsNyBAQCBJRiAoRU5BQkxFX0lOREVYRURfREFU
QUJBU0UpCiAgICAgICAgIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCiAgICAg
ICAgIGJpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9K
U0lEQktleUN1c3RvbS5jcHAKKyAgICAgICAgYmluZGluZ3MvanMvSlNJREJPcGVuREJSZXF1ZXN0
Q3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
Q3VzdG9tLmNwcAogICAgICkKIEVORElGICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9ET01SZXF1ZXN0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTVJlcXVlc3RTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBk
ZmQ1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01S
ZXF1ZXN0U3RhdGUuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBET01SZXF1ZXN0
U3RhdGVfaAorI2RlZmluZSBET01SZXF1ZXN0U3RhdGVfaAorCisjaW5jbHVkZSAiRE9NV3JhcHBl
cldvcmxkLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5o
IgorI2lmIEVOQUJMRShXT1JLRVJTKQorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNlbmRp
ZgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJU2hpbXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBET01SZXF1
ZXN0U3RhdGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IERPTVJlcXVlc3RTdGF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICA6IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICAsIG1f
ZXhlYygwKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2Fz
dDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgICAgICBtX2V4
ZWMgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBkb2N1bWVu
dC0+cGFnZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFdvcmtlckNvbnRleHQq
IHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKKyAgICAgICAgICAgIG1fZXhlYyA9IHNjcmlwdFN0YXRlRnJvbVdvcmtl
ckNvbnRleHQod29ya2VyQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNs
ZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7CisgICAg
ICAgIG1fZXhlYyA9IDA7CisgICAgfQorCisgICAgY2xhc3MgU2NvcGUgeworICAgIHB1YmxpYzoK
KyAgICAgICAgZXhwbGljaXQgU2NvcGUoRE9NUmVxdWVzdFN0YXRlJiBzdGF0ZSkKKyAgICAgICAg
ICAgIDogbV9lbnRyeVNoaW0oc3RhdGUuZXhlYygpKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICBwcml2YXRlOgorICAgICAgICBKU0M6OkFQSUVudHJ5U2hpbSBtX2VudHJ5U2hpbTsKKyAgICB9
OworCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
ZXhlYzsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0OworICAgIEpTQzo6RXhlY1N0YXRlKiBtX2V4ZWM7Cit9Owor
Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAKaW5kZXggYjU1ZTc2Yi4uZjJkZTFhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhr
Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMjIgKzI5LDI1NiBA
QAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGls
aXRpZXMuaCIKIAorI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgogI2luY2x1ZGUgIklEQktl
eS5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKyNpbmNsdWRlICJKU0lEQktleS5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJU2hpbXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0Rh
dGVJbnN0YW5jZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBib29sIGdldChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCBK
U1ZhbHVlJiByZXN1bHQpCit7CisgICAgaWYgKG9iamVjdC5pc1N0cmluZygpICYmIGtleVBhdGhF
bGVtZW50ID09ICJsZW5ndGgiKSB7CisgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKG9iamVjdC50
b1N0cmluZyhleGVjKS0+bGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgaWYgKCFvYmplY3QuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIElk
ZW50aWZpZXIgaWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBrZXlQYXRoRWxlbWVudC51
dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIWFzT2JqZWN0KG9iamVjdCktPmhhc1Byb3BlcnR5KGV4
ZWMsIGlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gYXNP
YmplY3Qob2JqZWN0KS0+Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgYm9vbCBjYW5TZXQoSlNWYWx1ZSBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5
UGF0aEVsZW1lbnQpCit7CisgICAgcmV0dXJuIG9iamVjdC5pc09iamVjdCgpOworfQorCitzdGF0
aWMgYm9vbCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aEVsZW1lbnQsIEpTVmFsdWUganNWYWx1ZSkKIHsKLSAgICBpZiAodmFsdWUuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKLSAgICBpZiAo
dmFsdWUuaXNJbnQzMigpKQorICAgIGlmICghY2FuU2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVj
LT5nbG9iYWxEYXRhKCksIGtleVBhdGhFbGVtZW50LnV0ZjgoKS5kYXRhKCkpOworICAgIGFzT2Jq
ZWN0KG9iamVjdCktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIsIGpz
VmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heGlt
dW1EZXB0aCA9IDIwMDA7CisKK3N0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5
RnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPEpTQXJyYXkq
PiYgc3RhY2spCit7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkgJiYgIWlzbmFuKHZhbHVlLnRv
TnVtYmVyKGV4ZWMpKSkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHZhbHVl
LnRvTnVtYmVyKGV4ZWMpKTsKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0
dXJuIElEQktleTo6Y3JlYXRlU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlcy4KKyAgICBpZiAodmFsdWUuaW5oZXJp
dHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSAmJiAhaXNuYW4odmFsdWVUb0RhdGUoZXhlYywgdmFs
dWUpKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0ZSh2YWx1ZVRvRGF0ZShleGVj
LCB2YWx1ZSkpOworICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CisgICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0
KSB8fCBvYmplY3QtPmluaGVyaXRzKCZKU0FycmF5OjpzX2luZm8pKSB7CisgICAgICAgICAgICBK
U0FycmF5KiBhcnJheSA9IGFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgaWYgKHN0YWNrLmNvbnRhaW5z
KGFycmF5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChzdGFj
ay5zaXplKCkgPj0gbWF4aW11bURlcHRoKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgc3RhY2suYXBwZW5kKGFycmF5KTsKKworICAgICAgICAgICAgSURCS2V5OjpLZXlB
cnJheSBzdWJrZXlzOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0gYXJyYXktPmdldEluZGV4
KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IHN1YmtleSA9IGNyZWF0
ZUlEQktleUZyb21WYWx1ZShleGVjLCBpdGVtLCBzdGFjayk7CisgICAgICAgICAgICAgICAgaWYg
KCFzdWJrZXkpCisgICAgICAgICAgICAgICAgICAgIHN1YmtleXMuYXBwZW5kKElEQktleTo6Y3Jl
YXRlSW52YWxpZCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHN1YmtleXMuYXBwZW5kKHN1YmtleSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0
YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5
KHN1YmtleXMpOworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiAwOwogfQogCitQYXNzUmVm
UHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWZWN0b3I8SlNBcnJheSo+IHN0YWNrOworICAgIFJlZlB0cjxJREJL
ZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCB2YWx1ZSwgc3RhY2spOworICAg
IGlmIChrZXkpCisgICAgICAgIHJldHVybiBrZXk7CisgICAgcmV0dXJuIElEQktleTo6Y3JlYXRl
SW52YWxpZCgpOworfQorCitzdGF0aWMgSlNWYWx1ZSBnZXROdGhWYWx1ZU9uS2V5UGF0aChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5
UGF0aEVsZW1lbnRzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1
ZShyb290VmFsdWUpOworICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZXg7IGkrKykgeworICAgICAgICBp
ZiAoY3VycmVudFZhbHVlLmlzU3RyaW5nKCkgJiYga2V5UGF0aEVsZW1lbnRzW2ldID09ICJsZW5n
dGgiKQorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGN1cnJlbnRWYWx1ZS50b1N0cmluZyhl
eGVjKS0+bGVuZ3RoKCkpOworICAgICAgICBpZiAoIWN1cnJlbnRWYWx1ZS5pc09iamVjdCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIEpTVmFsdWUgcGFyZW50
VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAgaWYgKCFnZXQoZXhlYywgcGFyZW50VmFsdWUs
IGtleVBhdGhFbGVtZW50c1tpXSwgY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gY3VycmVudFZhbHVlOworfQorCitzdGF0
aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBh
dGgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CisgICAg
SURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGgs
IGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRo
UGFyc2VFcnJvck5vbmUpOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUuanNWYWx1ZSgp
OworICAgIGpzVmFsdWUgPSBnZXROdGhWYWx1ZU9uS2V5UGF0aChleGVjLCBqc1ZhbHVlLCBrZXlQ
YXRoRWxlbWVudHMsCisgICAgICAgIGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGlmIChq
c1ZhbHVlLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVh
dGVJREJLZXlGcm9tVmFsdWUoZXhlYywganNWYWx1ZSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlIGVu
c3VyZU50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSByb290VmFsdWUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHVuc2lnbmVkIGluZGV4KQor
eworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlKHJvb3RWYWx1ZSk7CisKKyAgICBBU1NFUlQoaW5k
ZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGluZGV4OyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSBwYXJlbnRWYWx1ZShjdXJyZW50VmFs
dWUpOworICAgICAgICBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50ID0ga2V5UGF0aEVsZW1l
bnRzW2ldOworICAgICAgICBpZiAoIWdldChleGVjLCBwYXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1l
bnQsIGN1cnJlbnRWYWx1ZSkpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAgICAgICAgIGlmICghc2V0KGV4ZWMsIHBhcmVu
dFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZShvYmplY3QpKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IEpTVmFs
dWUob2JqZWN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjdXJyZW50VmFsdWU7
Cit9CisKK3N0YXRpYyBib29sIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxl
bWVudHMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIGlmICghcm9vdFZhbHVlLmlzT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlKHJvb3RW
YWx1ZSk7CisKKyAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgSlNWYWx1
ZSBwYXJlbnRWYWx1ZShjdXJyZW50VmFsdWUpOworICAgICAgICBjb25zdCBTdHJpbmcmIGtleVBh
dGhFbGVtZW50ID0ga2V5UGF0aEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoIWdldChleGVjLCBw
YXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQsIGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gY2FuU2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCk7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1
ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgU2NyaXB0VmFs
dWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgi
aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBl
KCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQ
YXRoRWxlbWVudHM7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFy
c2VLZXlQYXRoKGtleVBhdGguc3RyaW5nKCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAg
IEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgaWYgKGtl
eVBhdGhFbGVtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOworICAgIEFQSUVudHJ5U2hpbSBl
bnRyeVNoaW0oZXhlYyk7CisKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZS5qc1ZhbHVlKCk7
CisgICAgaWYgKCFqc1ZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEpTVmFsdWUgcGFyZW50ID0gZW5zdXJlTnRoVmFsdWVPbktleVBhdGgoZXhlYywgYXNPYmpl
Y3QoanNWYWx1ZSksCisgICAgICAgIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNp
emUoKSAtIDEpOworICAgIGlmIChwYXJlbnQuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFzZXQoZXhlYywgcGFyZW50LCBrZXlQYXRoRWxlbWVudHMubGFz
dCgpLAorICAgICAgICB0b0pTKGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleS5nZXQoKSkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlE
QktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3Rh
dGUsIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkK
K3sKKyAgICBJREJfVFJBQ0UoImNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgi
KTsKKyAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkpOworCisgICAgRXhlY1N0YXRlKiBleGVj
ID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7CisgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVj
KTsKKworICAgIGlmIChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpBcnJheVR5cGUpIHsK
KyAgICAgICAgSURCS2V5OjpLZXlBcnJheSByZXN1bHQ7CisgICAgICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBhcnJheSA9IGtleVBhdGguYXJyYXkoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGFycmF5LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5
PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVl
LCBhcnJheVtpXSk7CisgICAgICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShyZXN1bHQpOworICAgIH0KKworICAgIEFTU0VS
VChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAgICByZXR1cm4g
Y3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwga2V5UGF0
aC5zdHJpbmcoKSk7Cit9CisKK2Jvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKERP
TVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYgc2NyaXB0VmFs
dWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgSURCX1RSQUNFKCJjYW5Jbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKKworICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9
PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxl
bWVudHM7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFyc2VLZXlQ
YXRoKGtleVBhdGguc3RyaW5nKCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VS
VChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgaWYgKCFrZXlQYXRo
RWxlbWVudHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOworICAgIEFQSUVudHJ5U2hpbSBlbnRy
eVNoaW0oZXhlYyk7CisgICAgcmV0dXJuIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKGV4ZWMs
IHNjcmlwdFZhbHVlLmpzVmFsdWUoKSwKKyAgICAgICAga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRo
RWxlbWVudHMuc2l6ZSgpIC0gMSk7Cit9CisKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFs
dWUoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBwcnBWYWx1ZSkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSByZXF1ZXN0U3Rh
dGUtPmV4ZWMoKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOworICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IHBycFZhbHVlOworICAg
IGlmIChzZXJpYWxpemVkVmFsdWUpCisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZTo6ZGVzZXJp
YWxpemUoZXhlYywgc2VyaWFsaXplZFZhbHVlLmdldCgpLCBOb25UaHJvd2luZyk7CisgICAgcmV0
dXJuIFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpOworfQorCitTY3Jp
cHRWYWx1ZSBpZGJLZXlUb1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRl
LCBQYXNzUmVmUHRyPElEQktleT4ga2V5KQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJlcXVl
c3RTdGF0ZS0+ZXhlYygpOworICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CisgICAg
cmV0dXJuIFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwKKyAgICAgICAgdG9KUyhleGVj
LCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LCBrZXkuZ2V0KCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKaW5kZXggOGUwYzljNS4uOTkwMWFjNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaApAQCAtMjks
MTUgKzI5LDI0IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJE
aWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIlNjcmlwdFZh
bHVlLmgiIAorCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBET01SZXF1ZXN0U3RhdGU7CiBjbGFzcyBJREJLZXk7CiAKIFBhc3NSZWZQdHI8
SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUpOwogCitib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUq
LCBQYXNzUmVmUHRyPElEQktleT4sIFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwor
UGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
RE9NUmVxdWVzdFN0YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7
Citib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBj
b25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1NjcmlwdFZhbHVlIGRlc2Vy
aWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+KTsKK1NjcmlwdFZhbHVlIGlkYktleVRvU2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0
YXRlKiwgUGFzc1JlZlB0cjxJREJLZXk+KTsKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QkFueUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3Rv
bS5jcHAKaW5kZXggNzcxMTNjNy4uZTBmZmZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcApAQCAtNjQsOCArNjQsNiBAQCBKU1ZhbHVlIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJREJBbnkq
IGlkYkFueSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBJREJBbnk6
Ok51bGxUeXBlOgogICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgY2FzZSBJREJBbnk6OlN0
cmluZ1R5cGU6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpZGJBbnkt
PnN0cmluZygpKTsKICAgICBjYXNlIElEQkFueTo6RE9NU3RyaW5nTGlzdFR5cGU6CiAgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5kb21TdHJpbmdMaXN0KCkp
OwogICAgIGNhc2UgSURCQW55OjpJREJDdXJzb3JUeXBlOgpAQCAtODQsOCArODIsMTIgQEAgSlNW
YWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSURCQW55KiBpZGJBbnkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgaWRiQW55LT5pZGJPYmplY3RTdG9yZSgpKTsKICAgICBjYXNlIElEQkFueTo6SURCVHJhbnNh
Y3Rpb25UeXBlOgogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFu
eS0+aWRiVHJhbnNhY3Rpb24oKSk7Ci0gICAgY2FzZSBJREJBbnk6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZVR5cGU6Ci0gICAgICAgIHJldHVybiBpZGJBbnktPnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgp
LT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIGNhc2UgSURCQW55OjpTY3Jp
cHRWYWx1ZVR5cGU6CisgICAgICAgIHJldHVybiBpZGJBbnktPnNjcmlwdFZhbHVlKCkuanNWYWx1
ZSgpOworICAgIGNhc2UgSURCQW55OjpTdHJpbmdUeXBlOgorICAgICAgICByZXR1cm4ganNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgaWRiQW55LT5zdHJpbmcoKSk7CisgICAgY2FzZSBJREJBbnk6Oklu
dGVnZXJUeXBlOgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaWRiQW55LT5pbnRlZ2VyKCkpOwog
ICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCmluZGV4IGE2NDA2M2QuLmFmNDEwNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAKQEAgLTUwLDEx
ICs1MCwxMCBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBJREJLZXkqIGtleSkKICAgICAgICAgewogICAgICAgICAgICAgY29u
c3QgSURCS2V5OjpLZXlBcnJheSYgaW5BcnJheSA9IGtleS0+YXJyYXkoKTsKICAgICAgICAgICAg
IHNpemVfdCBzaXplID0gaW5BcnJheS5zaXplKCk7Ci0gICAgICAgICAgICBKU0FycmF5KiBvdXRB
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0LCBzaXplKTsKLSAg
ICAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICAgICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCAwLCBnbG9iYWxPYmplY3QsIHNpemUpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBJREJLZXkqIGFycmF5S2V5ID0gaW5B
cnJheS5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgICAgICBvdXRBcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4KGdsb2JhbERhdGEsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBhcnJheUtleSkpOwor
ICAgICAgICAgICAgICAgIG91dEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgYXJyYXlLZXkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKG91dEFycmF5KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPcGVuREJSZXF1ZXN0Q3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjNTdkZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0
dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkpT
SURCT3BlbkRCUmVxdWVzdC5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEpTSURCT3Bl
bkRCUmVxdWVzdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgSlNJREJPcGVuREJSZXF1ZXN0KiBqc1JlcXVlc3QgPSBqc0Nhc3Q8
SlNJREJPcGVuREJSZXF1ZXN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyhqc1JlcXVlc3QsICZzX2luZm8pOworICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdz
ICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRT
ZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKGpzUmVxdWVzdC0+c3RydWN0dXJlKCktPnR5cGVJbmZv
KCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGpz
UmVxdWVzdCwgdmlzaXRvcik7CisgICAgc3RhdGljX2Nhc3Q8SURCT3BlbkRCUmVxdWVzdCo+KGpz
UmVxdWVzdC0+aW1wbCgpKS0+dmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOworfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1
c3RvbS5jcHAKaW5kZXggZjU1OWY0MS4uY2MzOGU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3Rv
bS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyLCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQ
cnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgpAQCAtMjQsMTkgKzI1LDI3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCIKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgor
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpCit2b2lkIEpTSURCVmVyc2lv
bkNoYW5nZVJlcXVlc3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICBKU0lE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0KiBqc1JlcXVlc3QgPSBqc0Nhc3Q8SlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoanNSZXF1
ZXN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0Zs
YWcpOworICAgIEFTU0VSVChqc1JlcXVlc3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihqc1JlcXVlc3Qs
IHZpc2l0b3IpOworICAgIHN0YXRpY19jYXN0PElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Kj4oanNS
ZXF1ZXN0LT5pbXBsKCkpLT52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKIH0K
IAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0tIAoxLjcuOS41
Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176820</attachid>
            <date>2012-11-29 14:38:26 -0800</date>
            <delta_ts>2012-12-04 17:56:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-jsc.patch</filename>
            <type>text/plain</type>
            <size>28298</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogVGh1LCAyOSBOb3Yg
MjAxMiAxNDozNTowMSAtMDgwMApTdWJqZWN0OiBJbmRleGVkREI6IEltcGxlbWVudCBJbmRleGVk
REIgYmluZGluZ3MgZm9yIEpTQwoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUzICsrKysrCiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8ICAgIDcgKwogLi4uL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwgfCAgICAzICstCiAuLi4vTW9kdWxl
cy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsICB8ICAgIDMgKy0KIFNvdXJj
ZS9XZWJDb3JlL1VzZUpTQy5jbWFrZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01SZXF1ZXN0U3RhdGUuaCAgICAgICB8ICAgODYg
KysrKysrKwogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5j
cHAgfCAgMjQ2ICsrKysrKysrKysrKysrKysrKystCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmggICB8ICAgIDggKwogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJBbnlDdXN0b20uY3BwICAgICAgfCAgIDEwICstCiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAgICAgICB8ICAgIDUgKy0KIC4uLi9iaW5kaW5n
cy9qcy9KU0lEQk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwICAgICAgIHwgICA1MiArKysrKwogLi4u
L2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwICAgICAgICAgfCAgIDE3ICst
CiAxMyBmaWxlcyBjaGFuZ2VkLCA0NzUgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NUmVxdWVzdFN0
YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
Qk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiNDBiNGFk
Li5kYTg5YjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTk1LDggKzE5NSwxMCBAQCBTRVQo
V2ViQ29yZV9JRExfRklMRVMKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsCiAgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCiAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaWRsCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVz
dC5pZGwKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAogICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlVw
Z3JhZGVOZWVkZWRFdmVudC5pZGwKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hh
bmdlRXZlbnQuaWRsCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QuaWRsCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFz
ZS5pZGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBkYzIzOTZhLi4yMWU5NmU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTYgQEAKKzIwMTItMTEtMjcgIE1pY2hhZWwgUHJ1ZXR0ICA8bWljaGFlbEA2OGsub3JnPgor
CisgICAgICAgIEluZGV4ZWREQjogSW1wbGVtZW50IEluZGV4ZWREQiBiaW5kaW5ncyBmb3IgSlND
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0ODQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbmRleGVk
REIgaXMgY3VycmVudGx5IGltcGxlbWVudGVkIG9ubHkgZm9yIFY4LiBUaGlzIGNoYW5nZSBhZGRz
CisgICAgICAgIHRoZSBiaW5kaW5ncyBuZWNlc3NhcnkgZm9yIEluZGV4ZWREQiB0byB3b3JrIHdp
dGggSlNDLiBXaXRoIHRoaXMKKyAgICAgICAgcGF0Y2gsIEluZGV4ZWREQiBmb3IgSlNDIHBhc3Nl
cyAxMTIgb3V0IG9mIHRoZSAxOTYgbGF5b3V0IHRlc3RzIGluCisgICAgICAgIHN0b3JhZ2UvaW5k
ZXhlZGRiLiBJbmRleGVkREIgaXMgc3RpbGwgbm90IGVuYWJsZWQgZm9yIGFueSBKU0MgcG9ydC4K
KworICAgICAgICBUZXN0czogc3RvcmFnZS9pbmRleGVkZGIvKgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6CisgICAgICAgICogVXNlSlNDLmNt
YWtlOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVJlcXVlc3RTdGF0ZS5oOiBBZGRlZCB0byBt
YXRjaCBiaW5kaW5ncy92OC9ET01SZXF1ZXN0U3RhdGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRE9NUmVxdWVzdFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVJlcXVlc3RT
dGF0ZTo6RE9NUmVxdWVzdFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVJlcXVlc3RTdGF0
ZTo6Y2xlYXIpOgorICAgICAgICAoU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUmVxdWVz
dFN0YXRlOjpTY29wZTo6U2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUmVxdWVzdFN0YXRl
OjpleGVjKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDog
QWRkIHV0aWxpdHkgZnVuY3Rpb25zIG1hdGNoaW5nIHRob3NlIGluIGJpbmRpbmdzL3Y4L0lEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Z2V0KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0TnRoVmFsdWVPbktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
SURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjplbnN1
cmVOdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5JbmplY3ROdGhWYWx1
ZU9uS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2NyaXB0VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6aWRiS2V5VG9TY3JpcHRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5oOiBBZGQgdXRpbGl0eSBmdW5jdGlvbnMgbWF0Y2hpbmcgdGhvc2UgaW4gYmlu
ZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJPcGVuREJSZXF1
ZXN0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTSURCT3BlbkRCUmVxdWVzdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Ojp2aXNpdENoaWxkcmVuKToKKwogMjAxMi0x
MS0yOSAgVGlhbmNoZW5nIEppYW5nICA8dGlqaWFuZ0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFj
a0JlcnJ5XSBVcGRhdGUgQkIxMCBmb3JtIHRoZW1lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggOGZiNjM3OC4uNjVkZGUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC00NjMsMTIgKzQ2MywxNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJLZXlSYW5nZS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTSURCT2JqZWN0U3RvcmUuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURC
T2JqZWN0U3RvcmUuaCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQk9wZW5EQlJlcXVl
c3QuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCT3BlbkRCUmVxdWVzdC5oIFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCUmVxdWVzdC5jcHAgXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNJREJSZXF1ZXN0LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJ
REJUcmFuc2FjdGlvbi5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJUcmFuc2Fj
dGlvbi5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5o
IFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVXBncmFkZU5lZWRlZEV2ZW50LmNwcCBc
CisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5oIFwKIAlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwIFwKIAlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCBcCiAJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ltYWdlRGF0YS5jcHAgXApAQCAtMTIyNyw2ICsxMjMxLDcg
QEAgZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5pZGwgXAogCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVXBn
cmFkZU5lZWRlZEV2ZW50LmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlRXZlbnQuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgXAogCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIv
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhl
ZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UuaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaWRsIFwKQEAgLTIyMzksNiArMjI0NCw3IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBl
cldvcmxkLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCBcCkBAIC0yMzM5LDYgKzIzNDUs
NyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SGlzdG9yeUN1c3RvbS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1
c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPcGVuREJSZXF1ZXN0Q3VzdG9t
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25z
dHJ1Y3Rvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1
Y3Rvci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9wZW5EQlJlcXVlc3QuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T3BlbkRCUmVxdWVzdC5pZGwKaW5kZXggZjAwZThlNC4uZDNkNzM1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwKQEAg
LTI3LDcgKzI3LDggQEAKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFj
dGl2ZURPTU9iamVjdCwKICAgICBFdmVudFRhcmdldCwKLSAgICBKU05vU3RhdGljVGFibGVzCisg
ICAgSlNOb1N0YXRpY1RhYmxlcywKKyAgICBKU0dlbmVyYXRlVG9KU09iamVjdAogXSBpbnRlcmZh
Y2UgSURCT3BlbkRCUmVxdWVzdCA6IElEQlJlcXVlc3QgewogICAgIGF0dHJpYnV0ZSBFdmVudExp
c3RlbmVyIG9uYmxvY2tlZDsKICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnVwZ3JhZGVu
ZWVkZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwKaW5kZXggOWI2ZTFlMy4uZDdlMTFiOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0LmlkbApAQCAtMjcsNyArMjcsOCBAQAogICAgIENvbmRpdGlvbmFs
PUlOREVYRURfREFUQUJBU0UsCiAgICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIEV2ZW50VGFyZ2V0
LAotICAgIEpTTm9TdGF0aWNUYWJsZXMKKyAgICBKU05vU3RhdGljVGFibGVzLAorICAgIEpTR2Vu
ZXJhdGVUb0pTT2JqZWN0CiBdIGludGVyZmFjZSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElE
QlJlcXVlc3QgewogICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYmxvY2tlZDsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9V
c2VKU0MuY21ha2UKaW5kZXggM2Q1MjRlYS4uMzE2ZmM0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvVXNlSlNDLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQpAQCAt
MjA0LDYgKzIwNCw3IEBAIElGIChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKICAgICAgICAgYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNJ
REJBbnlDdXN0b20uY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAor
ICAgICAgICBiaW5kaW5ncy9qcy9KU0lEQk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwCiAgICAgICAg
IGJpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwCiAgICAgKQog
RU5ESUYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVJlcXVl
c3RTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NUmVxdWVzdFN0YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhZjFhMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVJlcXVlc3RTdGF0ZS5oCkBAIC0w
LDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1p
Y2hhZWxANjhrLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBET01SZXF1
ZXN0U3RhdGVfaAorI2RlZmluZSBET01SZXF1ZXN0U3RhdGVfaAorCisjaW5jbHVkZSAiRE9NV3Jh
cHBlcldvcmxkLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0
ZS5oIgorI2lmIEVOQUJMRShXT1JLRVJTKQorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNl
bmRpZgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJU2hpbXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBET01S
ZXF1ZXN0U3RhdGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IERPTVJlcXVlc3RTdGF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICA6IG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICAs
IG1fZXhlYygwKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgICAgICBt
X2V4ZWMgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBkb2N1
bWVudC0+cGFnZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KTsKKyAgICAgICAgICAgIG1fZXhlYyA9IHNjcmlwdFN0YXRlRnJvbVdv
cmtlckNvbnRleHQod29ya2VyQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7Cisg
ICAgICAgIG1fZXhlYyA9IDA7CisgICAgfQorCisgICAgY2xhc3MgU2NvcGUgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgZXhwbGljaXQgU2NvcGUoRE9NUmVxdWVzdFN0YXRlJiBzdGF0ZSkKKyAgICAg
ICAgICAgIDogbV9lbnRyeVNoaW0oc3RhdGUuZXhlYygpKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICBwcml2YXRlOgorICAgICAgICBKU0M6OkFQSUVudHJ5U2hpbSBtX2VudHJ5U2hpbTsKKyAg
ICB9OworCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZXhlYzsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OworICAgIEpTQzo6RXhlY1N0YXRlKiBtX2V4ZWM7Cit9
OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHAKaW5kZXggYjU1ZTc2Yi4uNjUwYTA4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxA
NjhrLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMjIgKzI5LDI1
NyBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogI2luY2x1ZGUgIklEQkJpbmRpbmdV
dGlsaXRpZXMuaCIKIAorI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgogI2luY2x1ZGUgIklE
QktleS5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgi
CisjaW5jbHVkZSAiSlNJREJLZXkuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSVNo
aW1zLmg+CisjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPElEQktleT4gY3Jl
YXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCitzdGF0aWMgYm9vbCBnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZSYgcmVzdWx0KQoreworICAgIGlmIChv
YmplY3QuaXNTdHJpbmcoKSAmJiBrZXlQYXRoRWxlbWVudCA9PSAibGVuZ3RoIikgeworICAgICAg
ICByZXN1bHQgPSBqc051bWJlcihvYmplY3QudG9TdHJpbmcoZXhlYyktPmxlbmd0aCgpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICghb2JqZWN0LmlzT2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJmV4ZWMtPmds
b2JhbERhdGEoKSwga2V5UGF0aEVsZW1lbnQudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKCFhc09i
amVjdChvYmplY3QpLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IGFzT2JqZWN0KG9iamVjdCktPmdldChleGVjLCBpZGVu
dGlmaWVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY2FuU2V0KEpTVmFs
dWUgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50KQoreworICAgIHJldHVybiBv
YmplY3QuaXNPYmplY3QoKTsKK30KKworc3RhdGljIGJvb2wgc2V0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCBKU1ZhbHVlIGpz
VmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gSURCS2V5
OjpjcmVhdGVJbnZhbGlkKCk7Ci0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICBpZiAoIWNh
blNldChvYmplY3QsIGtleVBhdGhFbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IElkZW50aWZpZXIgaWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBrZXlQYXRoRWxlbWVu
dC51dGY4KCkuZGF0YSgpKTsKKyAgICBhc09iamVjdChvYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLCBqc1ZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtRGVwdGggPSAyMDAwOworCitzdGF0aWMgUGFz
c1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIFZlY3RvcjxKU0FycmF5Kj4mIHN0YWNrKQoreworICAgIGlmICh2YWx1ZS5p
c051bWJlcigpICYmICFpc25hbih2YWx1ZS50b051bWJlcihleGVjKSkpCiAgICAgICAgIHJldHVy
biBJREJLZXk6OmNyZWF0ZU51bWJlcih2YWx1ZS50b051bWJlcihleGVjKSk7CiAgICAgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZVN0cmluZyh2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
ZGF0ZXMuCisgICAgaWYgKHZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNfaW5mbykgJiYg
IWlzbmFuKHZhbHVlVG9EYXRlKGV4ZWMsIHZhbHVlKSkpCisgICAgICAgIHJldHVybiBJREJLZXk6
OmNyZWF0ZURhdGUodmFsdWVUb0RhdGUoZXhlYywgdmFsdWUpKTsKKyAgICBpZiAodmFsdWUuaXNP
YmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwor
ICAgICAgICBpZiAoaXNKU0FycmF5KG9iamVjdCkgfHwgb2JqZWN0LT5pbmhlcml0cygmSlNBcnJh
eTo6c19pbmZvKSkgeworICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KG9iamVj
dCk7CisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAg
ICAgICAgICAgIGlmIChzdGFjay5jb250YWlucyhhcnJheSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICBpZiAoc3RhY2suc2l6ZSgpID49IG1heGltdW1EZXB0aCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHN0YWNrLmFwcGVuZChhcnJheSk7
CisKKyAgICAgICAgICAgIElEQktleTo6S2V5QXJyYXkgc3Via2V5czsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpT
VmFsdWUgaXRlbSA9IGFycmF5LT5nZXRJbmRleChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBS
ZWZQdHI8SURCS2V5PiBzdWJrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgaXRlbSwg
c3RhY2spOworICAgICAgICAgICAgICAgIGlmICghc3Via2V5KQorICAgICAgICAgICAgICAgICAg
ICBzdWJrZXlzLmFwcGVuZChJREJLZXk6OmNyZWF0ZUludmFsaWQoKSk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdWJrZXlzLmFwcGVuZChzdWJrZXkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAg
ICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShzdWJrZXlzKTsKKyAgICAgICAgfQorICAgIH0K
ICAgICByZXR1cm4gMDsKIH0KIAorUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21W
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVmVjdG9yPEpTQXJy
YXkqPiBzdGFjazsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFs
dWUoZXhlYywgdmFsdWUsIHN0YWNrKTsKKyAgICBpZiAoa2V5KQorICAgICAgICByZXR1cm4ga2V5
OworICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKK30KKworc3RhdGljIEpTVmFs
dWUgZ2V0TnRoVmFsdWVPbktleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgdW5zaWduZWQgaW5kZXgp
Cit7CisgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKyAgICBBU1NFUlQoaW5k
ZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGluZGV4OyBpKyspIHsKKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5pc1N0cmluZygpICYm
IGtleVBhdGhFbGVtZW50c1tpXSA9PSAibGVuZ3RoIikKKyAgICAgICAgICAgIHJldHVybiBqc051
bWJlcihjdXJyZW50VmFsdWUudG9TdHJpbmcoZXhlYyktPmxlbmd0aCgpKTsKKyAgICAgICAgaWYg
KCFjdXJyZW50VmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgICAgICBKU1ZhbHVlIHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAg
IGlmICghZ2V0KGV4ZWMsIHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudHNbaV0sIGN1cnJlbnRW
YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0
dXJuIGN1cnJlbnRWYWx1ZTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU2Ny
aXB0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgVmVjdG9yPFN0
cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwor
ICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAg
ICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIEpTVmFs
dWUganNWYWx1ZSA9IHZhbHVlLmpzVmFsdWUoKTsKKyAgICBqc1ZhbHVlID0gZ2V0TnRoVmFsdWVP
bktleVBhdGgoZXhlYywganNWYWx1ZSwga2V5UGF0aEVsZW1lbnRzLAorICAgICAgICBrZXlQYXRo
RWxlbWVudHMuc2l6ZSgpKTsKKyAgICBpZiAoanNWYWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIGpzVmFs
dWUpOworfQorCitzdGF0aWMgSlNWYWx1ZSBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0
aEVsZW1lbnRzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShy
b290VmFsdWUpOworCisgICAgQVNTRVJUKGluZGV4IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7CisgICAgICAgIEpT
VmFsdWUgcGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoRWxlbWVudCA9IGtleVBhdGhFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFnZXQoZXhl
YywgcGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBjdXJyZW50VmFsdWUpKSB7CisgICAgICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAg
ICAgICAgICBpZiAoIXNldChleGVjLCBwYXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQsIEpTVmFs
dWUob2JqZWN0KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgICAgICBjdXJyZW50VmFsdWUgPSBKU1ZhbHVlKG9iamVjdCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gY3VycmVudFZhbHVlOworfQorCitzdGF0aWMgYm9vbCBjYW5JbmplY3RO
dGhWYWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcm9vdFZhbHVlLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAg
ICBpZiAoIXJvb3RWYWx1ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOworCisgICAgQVNTRVJUKGluZGV4IDw9
IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
bmRleDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgcGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsK
KyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCA9IGtleVBhdGhFbGVtZW50c1tp
XTsKKyAgICAgICAgaWYgKCFnZXQoZXhlYywgcGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBj
dXJyZW50VmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGNhblNldChwYXJlbnRWYWx1ZSwga2V5
UGF0aEVsZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBpbmplY3RJ
REJLZXlJbnRvU2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYg
a2V5UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoImluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIp
OworCisgICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUp
OworCisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQ
YXJzZUVycm9yIGVycm9yOworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLnN0cmluZygpLCBr
ZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBh
cnNlRXJyb3JOb25lKTsKKworICAgIGlmIChrZXlQYXRoRWxlbWVudHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSByZXF1ZXN0U3RhdGUt
PmV4ZWMoKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOworCisgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gdmFsdWUuanNWYWx1ZSgpOworICAgIGlmICghanNWYWx1ZS5pc09iamVjdCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU1ZhbHVlIHBhcmVudCA9IGVuc3VyZU50
aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGFzT2JqZWN0KGpzVmFsdWUpLAorICAgICAgICBrZXlQYXRo
RWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkgLSAxKTsKKyAgICBpZiAocGFyZW50Lmlz
VW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghc2V0KGV4ZWMs
IHBhcmVudCwga2V5UGF0aEVsZW1lbnRzLmxhc3QoKSwKKyAgICAgICAgdG9KUyhleGVjLCBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXku
Z2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgSURCX1RSQUNFKCJjcmVhdGVJREJL
ZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoIik7CisgICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVs
bCgpKTsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOworICAg
IEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CisKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkg
PT0gSURCS2V5UGF0aDo6QXJyYXlUeXBlKSB7CisgICAgICAgIElEQktleTo6S2V5QXJyYXkgcmVz
dWx0OworICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFycmF5
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS5zaXplKCk7IGkrKykg
eworICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwgYXJyYXlbaV0pOworICAgICAgICAgICAgaWYg
KCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXko
cmVzdWx0KTsKKyAgICB9CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0
aDo6U3RyaW5nVHlwZSk7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgoZXhlYywgdmFsdWUsIGtleVBhdGguc3RyaW5nKCkpOworfQorCitib29sIGNhbklu
amVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwg
Y29uc3QgU2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
KQoreworICAgIElEQl9UUkFDRSgiY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CisK
KyAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7Cisg
ICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVy
cm9yIGVycm9yOworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLnN0cmluZygpLCBrZXlQYXRo
RWxlbWVudHMsIGVycm9yKTsKKyAgICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJy
b3JOb25lKTsKKworICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSByZXF1ZXN0U3RhdGUtPmV4
ZWMoKTsKKyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOworICAgIHJldHVybiBjYW5J
bmplY3ROdGhWYWx1ZU9uS2V5UGF0aChleGVjLCBzY3JpcHRWYWx1ZS5qc1ZhbHVlKCksCisgICAg
ICAgIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEpOworfQorCitT
Y3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0
YXRlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUpCit7CisgICAg
RXhlY1N0YXRlKiBleGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7CisgICAgQVBJRW50cnlTaGlt
IGVudHJ5U2hpbShleGVjKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkVmFsdWUgPSBwcnBWYWx1ZTsKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlKQorICAgICAg
ICByZXR1cm4gU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKGV4ZWMsIHNlcmlhbGl6ZWRWYWx1ZS5n
ZXQoKSwgTm9uVGhyb3dpbmcpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxE
YXRhKCksIGpzTnVsbCgpKTsKK30KKworU2NyaXB0VmFsdWUgaWRiS2V5VG9TY3JpcHRWYWx1ZShE
T01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSkKK3sK
KyAgICBFeGVjU3RhdGUqIGV4ZWMgPSByZXF1ZXN0U3RhdGUtPmV4ZWMoKTsKKyAgICBBUElFbnRy
eVNoaW0gZW50cnlTaGltKGV4ZWMpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9i
YWxEYXRhKCksCisgICAgICAgIHRvSlMoZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwga2V5LmdldCgpKSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCmluZGV4
IDhlMGM5YzUuLjZlODI4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9J
REJCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTM0LDEwICszNCwxOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIERPTVJlcXVlc3RTdGF0ZTsKIGNsYXNzIElEQktleTsKK2NsYXNzIElE
QktleVBhdGg7CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwogCitib29sIGluamVjdElEQktleUludG9TY3Jp
cHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRyPElEQktleT4sIFNjcmlwdFZhbHVl
JiwgY29uc3QgSURCS2V5UGF0aCYpOworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZy
b21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRE9NUmVxdWVzdFN0YXRlKiwgY29uc3QgU2NyaXB0VmFs
dWUmLCBjb25zdCBJREJLZXlQYXRoJik7Citib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRW
YWx1ZShET01SZXF1ZXN0U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBh
dGgmKTsKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0YXRlKiwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKK1NjcmlwdFZhbHVlIGlkYktleVRv
U2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxJREJLZXk+KTsKKwogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAKaW5kZXggNzcxMTNjNy4uZTBmZmZlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcApAQCAtNjQs
OCArNjQsNiBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBJREJBbnkqIGlkYkFueSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgY2FzZSBJREJBbnk6Ok51bGxUeXBlOgogICAgICAgICByZXR1cm4ganNOdWxs
KCk7Ci0gICAgY2FzZSBJREJBbnk6OlN0cmluZ1R5cGU6Ci0gICAgICAgIHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZShleGVjLCBpZGJBbnktPnN0cmluZygpKTsKICAgICBjYXNlIElEQkFueTo6RE9N
U3RyaW5nTGlzdFR5cGU6CiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
aWRiQW55LT5kb21TdHJpbmdMaXN0KCkpOwogICAgIGNhc2UgSURCQW55OjpJREJDdXJzb3JUeXBl
OgpAQCAtODQsOCArODIsMTIgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSURCQW55KiBpZGJBbnkpCiAgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5pZGJPYmplY3RTdG9yZSgpKTsKICAg
ICBjYXNlIElEQkFueTo6SURCVHJhbnNhY3Rpb25UeXBlOgogICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+aWRiVHJhbnNhY3Rpb24oKSk7Ci0gICAgY2FzZSBJ
REJBbnk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGU6Ci0gICAgICAgIHJldHVybiBpZGJBbnkt
PnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3Qp
OworICAgIGNhc2UgSURCQW55OjpTY3JpcHRWYWx1ZVR5cGU6CisgICAgICAgIHJldHVybiBpZGJB
bnktPnNjcmlwdFZhbHVlKCkuanNWYWx1ZSgpOworICAgIGNhc2UgSURCQW55OjpTdHJpbmdUeXBl
OgorICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaWRiQW55LT5zdHJpbmco
KSk7CisgICAgY2FzZSBJREJBbnk6OkludGVnZXJUeXBlOgorICAgICAgICByZXR1cm4ganNOdW1i
ZXIoaWRiQW55LT5pbnRlZ2VyKCkpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCmluZGV4
IGE2NDA2M2QuLmFmNDEwNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCS2V5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QktleUN1c3RvbS5jcHAKQEAgLTUwLDExICs1MCwxMCBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJREJLZXkqIGtleSkKICAg
ICAgICAgewogICAgICAgICAgICAgY29uc3QgSURCS2V5OjpLZXlBcnJheSYgaW5BcnJheSA9IGtl
eS0+YXJyYXkoKTsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gaW5BcnJheS5zaXplKCk7Ci0g
ICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzaXplKTsKLSAgICAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QsIHNpemUpOwogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBJREJLZXkqIGFycmF5S2V5ID0gaW5BcnJheS5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgICAg
ICBvdXRBcnJheS0+aW5pdGlhbGl6ZUluZGV4KGdsb2JhbERhdGEsIGksIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBhcnJheUtleSkpOworICAgICAgICAgICAgICAgIG91dEFycmF5LT5wdXREaXJl
Y3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJyYXlLZXkpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKG91dEFycmF5KTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPcGVuREJS
ZXF1ZXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRC
UmVxdWVzdEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhj
NTdkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
T3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2luY2x1ZGUgIkpTSURCT3BlbkRCUmVxdWVzdC5oIgorCisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIEpTSURCT3BlbkRCUmVxdWVzdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNJREJPcGVuREJSZXF1
ZXN0KiBqc1JlcXVlc3QgPSBqc0Nhc3Q8SlNJREJPcGVuREJSZXF1ZXN0Kj4oY2VsbCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhqc1JlcXVlc3QsICZzX2luZm8pOworICAgIENPTVBJ
TEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKGpzUmVxdWVz
dC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKGpzUmVxdWVzdCwgdmlzaXRvcik7CisgICAgc3RhdGljX2Nh
c3Q8SURCT3BlbkRCUmVxdWVzdCo+KGpzUmVxdWVzdC0+aW1wbCgpKS0+dmlzaXRKU0V2ZW50TGlz
dGVuZXJzKHZpc2l0b3IpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lv
bkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAKaW5kZXggZjU1OWY0MS4uY2MzOGU2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgpAQCAtMjQsMTkgKzI1LDI3IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QuaCIKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiSlNJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpCit2b2lkIEpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KKyAgICBKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KiBqc1JlcXVlc3Qg
PSBqc0Nhc3Q8SlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCo+KGNlbGwpOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoanNSZXF1ZXN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VS
VChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVChqc1JlcXVlc3QtPnN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbihqc1JlcXVlc3QsIHZpc2l0b3IpOworICAgIHN0YXRpY19jYXN0PElEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0Kj4oanNSZXF1ZXN0LT5pbXBsKCkpLT52aXNpdEpTRXZlbnRMaXN0
ZW5lcnModmlzaXRvcik7CiB9CiAKIH0KIAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0tIAoxLjcuOS41Cgo=
</data>
<flag name="review"
          id="192716"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177628</attachid>
            <date>2012-12-04 17:56:31 -0800</date>
            <delta_ts>2012-12-04 21:20:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-jsc.patch</filename>
            <type>text/plain</type>
            <size>25468</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogVHVlLCA0IERlYyAy
MDEyIDE2OjM5OjEwIC0wODAwClN1YmplY3Q6IEluZGV4ZWREQjogSW1wbGVtZW50IEluZGV4ZWRE
QiBiaW5kaW5ncyBmb3IgSlNDCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0ICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDkgKysrKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNyArLQogLi4uL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwgfCAgICAzICstCiAuLi4vTW9kdWxl
cy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsICB8ICAgIDMgKy0KIFNvdXJj
ZS9XZWJDb3JlL1VzZUpTQy5jbWFrZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAtCiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01SZXF1ZXN0U3RhdGUuaCAgICAgICB8ICAgODYg
KysrKysrKysKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMu
Y3BwIHwgIDIyOCArKysrKysrKysrKysrKysrKysrLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSURCQmluZGluZ1V0aWxpdGllcy5oICAgfCAgICA4ICsKIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCAgICAgIHwgICAxMCArLQogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwICAgICAgfCAgICA1ICstCiAuLi4vanMvSlNJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAgICAgICAgICB8ICAgNDIgLS0tLQogMTIg
ZmlsZXMgY2hhbmdlZCwgMzg2IGluc2VydGlvbnMoKyksIDU4IGRlbGV0aW9ucygtKQogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVJlcXVlc3RTdGF0ZS5o
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDk1MGEz
NjAuLmJkZWYxN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xOTUsOCArMTk1LDEwIEBAIFNF
VChXZWJDb3JlX0lETF9GSUxFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwKICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5pZGwKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1
ZXN0LmlkbAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
VXBncmFkZU5lZWRlZEV2ZW50LmlkbAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5pZGwKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5pZGwKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFi
YXNlLmlkbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQwMGIyNjEuLmU5YTM3ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxMi0xMi0wNCAgTWljaGFlbCBQcnVldHQgIDxtaWNoYWVsQDY4ay5vcmc+
CisKKyAgICAgICAgSW5kZXhlZERCOiBJbXBsZW1lbnQgSW5kZXhlZERCIGJpbmRpbmdzIGZvciBK
U0MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ4
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluZGV4
ZWREQiBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgb25seSBmb3IgVjguIFRoaXMgY2hhbmdlIGFk
ZHMKKyAgICAgICAgdGhlIGJpbmRpbmdzIG5lY2Vzc2FyeSBmb3IgSW5kZXhlZERCIHRvIHdvcmsg
d2l0aCBKU0MuIFdpdGggdGhpcworICAgICAgICBwYXRjaCwgSW5kZXhlZERCIGZvciBKU0MgcGFz
c2VzIDExMiBvdXQgb2YgdGhlIDE5NiBsYXlvdXQgdGVzdHMgaW4KKyAgICAgICAgc3RvcmFnZS9p
bmRleGVkZGIuIEluZGV4ZWREQiBpcyBzdGlsbCBub3QgZW5hYmxlZCBmb3IgYW55IEpTQyBwb3J0
LgorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL2luZGV4ZWRkYi8qCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBVc2VKU0Mu
Y21ha2U6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NUmVxdWVzdFN0YXRlLmg6IEFkZGVkIHRv
IG1hdGNoIGJpbmRpbmdzL3Y4L0RPTVJlcXVlc3RTdGF0ZS5oLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChET01SZXF1ZXN0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUmVxdWVz
dFN0YXRlOjpET01SZXF1ZXN0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUmVxdWVzdFN0
YXRlOjpjbGVhcik6CisgICAgICAgIChTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpET01SZXF1
ZXN0U3RhdGU6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpET01SZXF1ZXN0U3Rh
dGU6OmV4ZWMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3Bw
OiBBZGQgdXRpbGl0eSBmdW5jdGlvbnMgbWF0Y2hpbmcgdGhvc2UgaW4gYmluZGluZ3MvdjgvSURC
QmluZGluZ1V0aWxpdGllcy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpnZXQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjYW5TZXQpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpnZXROdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmVu
c3VyZU50aFZhbHVlT25LZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkluamVjdE50aFZh
bHVlT25LZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmluamVjdElEQktleUludG9TY3JpcHRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjppZGJLZXlUb1NjcmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmg6IEFkZCB1dGlsaXR5IGZ1bmN0aW9ucyBtYXRjaGluZyB0aG9zZSBpbiBi
aW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmguCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcDogUmVtb3ZlZC4KKwogMjAxMi0xMi0wNCAgQW50b2luZSBR
dWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFRleHRUcmFjaydzIC5raW5kIHBy
b3BlcnR5IHNob3VsZCByZXR1cm4gbG93ZXItY2FzZSB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IDVhZjdlZjUuLmM2Nzc2NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQpAQCAtNDY1LDEyICs0NjUsMTYgQEAgd2ViY29yZV9idWlsdF9zb3VyY2VzICs9IFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCS2V5UmFuZ2UuaCBcCiAJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU0lEQk9iamVjdFN0b3JlLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0lEQk9iamVjdFN0b3JlLmggXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJPcGVu
REJSZXF1ZXN0LmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQk9wZW5EQlJlcXVl
c3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlJlcXVlc3QuY3BwIFwKIAlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTSURCUmVxdWVzdC5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTSURCVHJhbnNhY3Rpb24uY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURC
VHJhbnNhY3Rpb24uaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNpb25DaGFu
Z2VFdmVudC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJWZXJzaW9uQ2hhbmdl
RXZlbnQuaCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlVwZ3JhZGVOZWVkZWRFdmVu
dC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJVcGdyYWRlTmVlZGVkRXZlbnQu
aCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNw
cCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmgg
XAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFnZURhdGEuY3BwIFwKQEAgLTEyMjksNiAr
MTIzMyw3IEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgXAogCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1bGVz
L2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlLmlkbCBcCiAJJChXZWJDb3Jl
KS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmlkbCBcCkBAIC0yMjQyLDYgKzIyNDcs
NyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TVdyYXBwZXJXb3JsZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xs
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBcCiAJU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggXApAQCAtMjM0Miw3
ICsyMzQ4LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJBbnlDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1
c3RvbS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3RDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdl
Q29uc3RydWN0b3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29u
c3RydWN0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0
b20uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9wZW5EQlJlcXVlc3QuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T3BlbkRCUmVxdWVzdC5pZGwKaW5kZXggZjAwZThlNC4uZDNkNzM1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwKQEAg
LTI3LDcgKzI3LDggQEAKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFj
dGl2ZURPTU9iamVjdCwKICAgICBFdmVudFRhcmdldCwKLSAgICBKU05vU3RhdGljVGFibGVzCisg
ICAgSlNOb1N0YXRpY1RhYmxlcywKKyAgICBKU0dlbmVyYXRlVG9KU09iamVjdAogXSBpbnRlcmZh
Y2UgSURCT3BlbkRCUmVxdWVzdCA6IElEQlJlcXVlc3QgewogICAgIGF0dHJpYnV0ZSBFdmVudExp
c3RlbmVyIG9uYmxvY2tlZDsKICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnVwZ3JhZGVu
ZWVkZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwKaW5kZXggOWI2ZTFlMy4uZDdlMTFiOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0LmlkbApAQCAtMjcsNyArMjcsOCBAQAogICAgIENvbmRpdGlvbmFs
PUlOREVYRURfREFUQUJBU0UsCiAgICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIEV2ZW50VGFyZ2V0
LAotICAgIEpTTm9TdGF0aWNUYWJsZXMKKyAgICBKU05vU3RhdGljVGFibGVzLAorICAgIEpTR2Vu
ZXJhdGVUb0pTT2JqZWN0CiBdIGludGVyZmFjZSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElE
QlJlcXVlc3QgewogICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYmxvY2tlZDsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9V
c2VKU0MuY21ha2UKaW5kZXggM2Q1MjRlYS4uYTBmYWVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvVXNlSlNDLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQpAQCAt
MjA0LDcgKzIwNCw2IEBAIElGIChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKICAgICAgICAgYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNJ
REJBbnlDdXN0b20uY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAot
ICAgICAgICBiaW5kaW5ncy9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcAog
ICAgICkKIEVORElGICgpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTVJlcXVlc3RTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NUmVxdWVz
dFN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhZjFhMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVJlcXVlc3RTdGF0
ZS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQ
cnVldHQgPG1pY2hhZWxANjhrLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBET01SZXF1ZXN0U3RhdGVfaAorI2RlZmluZSBET01SZXF1ZXN0U3RhdGVfaAorCisjaW5jbHVk
ZSAiRE9NV3JhcHBlcldvcmxkLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJT
Y3JpcHRTdGF0ZS5oIgorI2lmIEVOQUJMRShXT1JLRVJTKQorI2luY2x1ZGUgIldvcmtlckNvbnRl
eHQuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJU2hpbXMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitj
bGFzcyBET01SZXF1ZXN0U3RhdGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IERPTVJlcXVlc3RT
dGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAg
ICAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQor
ICAgICAgICAsIG1fZXhlYygwKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAg
ICAgICAgICBtX2V4ZWMgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpLCBkb2N1bWVudC0+cGFnZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICAgICAgICAgIG1fZXhlYyA9IHNjcmlwdFN0
YXRlRnJvbVdvcmtlckNvbnRleHQod29ya2VyQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCA9IDA7CisgICAgICAgIG1fZXhlYyA9IDA7CisgICAgfQorCisgICAgY2xhc3MgU2NvcGUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgU2NvcGUoRE9NUmVxdWVzdFN0YXRlJiBzdGF0
ZSkKKyAgICAgICAgICAgIDogbV9lbnRyeVNoaW0oc3RhdGUuZXhlYygpKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICBKU0M6OkFQSUVudHJ5U2hpbSBtX2VudHJ5
U2hpbTsKKyAgICB9OworCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fZXhlYzsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OworICAgIEpTQzo6RXhlY1N0YXRlKiBt
X2V4ZWM7Cit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKaW5kZXggYjU1ZTc2Yi4uNWQ4ZDVhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQg
PG1pY2hhZWxANjhrLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
MjIgKzI5LDIzOSBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogI2luY2x1ZGUgIklE
QkJpbmRpbmdVdGlsaXRpZXMuaCIKIAorI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgogI2lu
Y2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJU
cmFjaW5nLmgiCisjaW5jbHVkZSAiSlNJREJLZXkuaCIKKworI2luY2x1ZGUgPHJ1bnRpbWUvRGF0
ZUluc3RhbmNlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIGJvb2wgZ2V0KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQsIEpT
VmFsdWUmIHJlc3VsdCkKK3sKKyAgICBpZiAob2JqZWN0LmlzU3RyaW5nKCkgJiYga2V5UGF0aEVs
ZW1lbnQgPT0gImxlbmd0aCIpIHsKKyAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIob2JqZWN0LnRv
U3RyaW5nKGV4ZWMpLT5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBpZiAoIW9iamVjdC5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSWRl
bnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIGtleVBhdGhFbGVtZW50LnV0
ZjgoKS5kYXRhKCkpOworICAgIGlmICghYXNPYmplY3Qob2JqZWN0KS0+aGFzUHJvcGVydHkoZXhl
YywgaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBhc09i
amVjdChvYmplY3QpLT5nZXQoZXhlYywgaWRlbnRpZmllcik7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBib29sIGNhblNldChKU1ZhbHVlIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoRWxlbWVudCkKK3sKKyAgICByZXR1cm4gb2JqZWN0LmlzT2JqZWN0KCk7Cit9CisKK3N0YXRp
YyBib29sIHNldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUmIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZSBqc1ZhbHVlKQogewotICAgIGlmICh2YWx1ZS5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwotICAgIGlmICh2
YWx1ZS5pc0ludDMyKCkpCisgICAgaWYgKCFjYW5TZXQob2JqZWN0LCBrZXlQYXRoRWxlbWVudCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwga2V5UGF0aEVsZW1lbnQudXRmOCgpLmRhdGEoKSk7CisgICAgYXNPYmpl
Y3Qob2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnRpZmllciwganNW
YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11
bURlcHRoID0gMjAwMDsKKworc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlG
cm9tVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8SlNBcnJheSo+
JiBzdGFjaykKK3sKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSAmJiAhaXNuYW4odmFsdWUudG9O
dW1iZXIoZXhlYykpKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIodmFsdWUu
dG9OdW1iZXIoZXhlYykpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKQogICAgICAgICByZXR1
cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGVzLgorICAgIGlmICh2YWx1ZS5pbmhlcml0
cygmRGF0ZUluc3RhbmNlOjpzX2luZm8pICYmICFpc25hbih2YWx1ZVRvRGF0ZShleGVjLCB2YWx1
ZSkpKQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKHZhbHVlVG9EYXRlKGV4ZWMs
IHZhbHVlKSk7CisgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3Qp
IHx8IG9iamVjdC0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpIHsKKyAgICAgICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gYXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBpZiAoc3RhY2suY29udGFpbnMo
YXJyYXkpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKHN0YWNr
LnNpemUoKSA+PSBtYXhpbXVtRGVwdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICBzdGFjay5hcHBlbmQoYXJyYXkpOworCisgICAgICAgICAgICBJREJLZXk6OktleUFy
cmF5IHN1YmtleXM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXgo
ZXhlYywgaSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4gc3Via2V5ID0gY3JlYXRl
SURCS2V5RnJvbVZhbHVlKGV4ZWMsIGl0ZW0sIHN0YWNrKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXN1YmtleSkKKyAgICAgICAgICAgICAgICAgICAgc3Via2V5cy5hcHBlbmQoSURCS2V5OjpjcmVh
dGVJbnZhbGlkKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
c3Via2V5cy5hcHBlbmQoc3Via2V5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3Rh
Y2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXko
c3Via2V5cyk7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKK1Bhc3NSZWZQ
dHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIFZlY3RvcjxKU0FycmF5Kj4gc3RhY2s7CisgICAgUmVmUHRyPElEQktl
eT4ga2V5ID0gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIHZhbHVlLCBzdGFjayk7CisgICAg
aWYgKGtleSkKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJ
bnZhbGlkKCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlIGdldE50aFZhbHVlT25LZXlQYXRoKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQ
YXRoRWxlbWVudHMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIEpTVmFsdWUgY3VycmVudFZhbHVl
KHJvb3RWYWx1ZSk7CisgICAgQVNTRVJUKGluZGV4IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7CisgICAgICAgIEpT
VmFsdWUgcGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAgaWYgKCFnZXQoZXhlYywg
cGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50c1tpXSwgY3VycmVudFZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gY3VycmVudFZhbHVl
OworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRW
YWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxl
bWVudHM7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFyc2VLZXlQ
YXRoKGtleVBhdGgsIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVChlcnJvciA9
PSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFs
dWUuanNWYWx1ZSgpOworICAgIGpzVmFsdWUgPSBnZXROdGhWYWx1ZU9uS2V5UGF0aChleGVjLCBq
c1ZhbHVlLCBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGlm
IChqc1ZhbHVlLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBj
cmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywganNWYWx1ZSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSByb290VmFs
dWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHVuc2lnbmVkIGluZGV4
KQoreworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlKHJvb3RWYWx1ZSk7CisKKyAgICBBU1NFUlQo
aW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGluZGV4OyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSBwYXJlbnRWYWx1ZShjdXJyZW50
VmFsdWUpOworICAgICAgICBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50ID0ga2V5UGF0aEVs
ZW1lbnRzW2ldOworICAgICAgICBpZiAoIWdldChleGVjLCBwYXJlbnRWYWx1ZSwga2V5UGF0aEVs
ZW1lbnQsIGN1cnJlbnRWYWx1ZSkpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAgICAgICAgIGlmICghc2V0KGV4ZWMsIHBh
cmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZShvYmplY3QpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IEpT
VmFsdWUob2JqZWN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjdXJyZW50VmFs
dWU7Cit9CisKK3N0YXRpYyBib29sIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRo
RWxlbWVudHMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIGlmICghcm9vdFZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlKHJv
b3RWYWx1ZSk7CisKKyAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgSlNW
YWx1ZSBwYXJlbnRWYWx1ZShjdXJyZW50VmFsdWUpOworICAgICAgICBjb25zdCBTdHJpbmcmIGtl
eVBhdGhFbGVtZW50ID0ga2V5UGF0aEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoIWdldChleGVj
LCBwYXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQsIGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gY2FuU2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01S
ZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgU2NyaXB0
VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFD
RSgiaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CisKKyAgICBBU1NFUlQoa2V5UGF0aC50
eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBr
ZXlQYXRoRWxlbWVudHM7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURC
UGFyc2VLZXlQYXRoKGtleVBhdGguc3RyaW5nKCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOwor
ICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgaWYg
KGtleVBhdGhFbGVtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOworCisgICAgSlNWYWx1ZSBw
YXJlbnQgPSBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aChleGVjLCB2YWx1ZS5qc1ZhbHVlKCksIGtl
eVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEpOworICAgIGlmIChwYXJl
bnQuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzZXQo
ZXhlYywgcGFyZW50LCBrZXlQYXRoRWxlbWVudHMubGFzdCgpLCB0b0pTKGV4ZWMsIGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleS5nZXQo
KSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFz
c1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRE9N
UmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoImNyZWF0ZUlEQktleUZy
b21TY3JpcHRWYWx1ZUFuZEtleVBhdGgiKTsKKyAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkp
OworCisgICAgRXhlY1N0YXRlKiBleGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7CisKKyAgICBp
ZiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlUeXBlKSB7CisgICAgICAgIElE
QktleTo6S2V5QXJyYXkgcmVzdWx0OworICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJy
YXkgPSBrZXlQYXRoLmFycmF5KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cnJheS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gY3Jl
YXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwgYXJyYXlbaV0p
OworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElE
QktleTo6Y3JlYXRlQXJyYXkocmVzdWx0KTsKKyAgICB9CisKKyAgICBBU1NFUlQoa2V5UGF0aC50
eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIGtleVBhdGguc3RyaW5nKCkp
OworfQorCitib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3Rh
dGUqIHJlcXVlc3RTdGF0ZSwgY29uc3QgU2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgiY2FuSW5qZWN0SURCS2V5SW50
b1NjcmlwdFZhbHVlIik7CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0
aDo6U3RyaW5nVHlwZSk7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAg
IElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRo
LnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBBU1NFUlQoZXJyb3IgPT0g
SURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSByZXF1ZXN0U3RhdGUtPmV4ZWMoKTsKKyAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFsdWVPbktl
eVBhdGgoZXhlYywgc2NyaXB0VmFsdWUuanNWYWx1ZSgpLAorICAgICAgICBrZXlQYXRoRWxlbWVu
dHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkgLSAxKTsKK30KKworU2NyaXB0VmFsdWUgZGVzZXJp
YWxpemVJREJWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWRWYWx1ZSA9IHBycFZhbHVlOworICAgIGlmIChzZXJpYWxpemVkVmFsdWUpCisg
ICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoZXhlYywgc2VyaWFsaXplZFZh
bHVlLmdldCgpLCBOb25UaHJvd2luZyk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKGV4ZWMtPmds
b2JhbERhdGEoKSwganNOdWxsKCkpOworfQorCitTY3JpcHRWYWx1ZSBpZGJLZXlUb1NjcmlwdFZh
bHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5
KQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOworICAgIHJl
dHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIHRvSlMoZXhlYywganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwga2V5LmdldCgp
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5oCmluZGV4IDhlMGM5YzUuLjZlODI4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTM0LDEwICszNCwxOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERPTVJlcXVlc3RTdGF0ZTsKIGNsYXNz
IElEQktleTsKK2NsYXNzIElEQktleVBhdGg7CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJ
REJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwogCitib29sIGlu
amVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRyPElE
QktleT4sIFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworUGFzc1JlZlB0cjxJREJL
ZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRE9NUmVxdWVzdFN0YXRl
KiwgY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Citib29sIGNhbkluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1
ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUo
RE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKK1Nj
cmlwdFZhbHVlIGlkYktleVRvU2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0
cjxJREJLZXk+KTsKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAKaW5kZXggNzcx
MTNjNy4uNGYxNDU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJBbnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55
Q3VzdG9tLmNwcApAQCAtNjQsOCArNjQsNiBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJREJBbnkqIGlkYkFueSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBJREJBbnk6Ok51bGxUeXBlOgogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgY2FzZSBJREJBbnk6OlN0cmluZ1R5cGU6Ci0gICAg
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpZGJBbnktPnN0cmluZygpKTsKICAg
ICBjYXNlIElEQkFueTo6RE9NU3RyaW5nTGlzdFR5cGU6CiAgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5kb21TdHJpbmdMaXN0KCkpOwogICAgIGNhc2UgSURC
QW55OjpJREJDdXJzb3JUeXBlOgpAQCAtODQsOCArODIsMTIgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNT
dGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSURCQW55KiBpZGJB
bnkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5pZGJP
YmplY3RTdG9yZSgpKTsKICAgICBjYXNlIElEQkFueTo6SURCVHJhbnNhY3Rpb25UeXBlOgogICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+aWRiVHJhbnNhY3Rp
b24oKSk7Ci0gICAgY2FzZSBJREJBbnk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGU6Ci0gICAg
ICAgIHJldHVybiBpZGJBbnktPnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShl
eGVjLCBnbG9iYWxPYmplY3QpOworICAgIGNhc2UgSURCQW55OjpTY3JpcHRWYWx1ZVR5cGU6Cisg
ICAgICAgIHJldHVybiBpZGJBbnktPnNjcmlwdFZhbHVlKCkuanNWYWx1ZSgpOworICAgIGNhc2Ug
SURCQW55OjpJbnRlZ2VyVHlwZToKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGlkYkFueS0+aW50
ZWdlcigpKTsKKyAgICBjYXNlIElEQkFueTo6U3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIGpz
U3RyaW5nV2l0aENhY2hlKGV4ZWMsIGlkYkFueS0+c3RyaW5nKCkpOwogICAgIH0KIAogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJLZXlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJL
ZXlDdXN0b20uY3BwCmluZGV4IGE2NDA2M2QuLmFmNDEwNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAKQEAgLTUwLDExICs1MCwxMCBAQCBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBJREJLZXkqIGtleSkKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgSURCS2V5OjpLZXlB
cnJheSYgaW5BcnJheSA9IGtleS0+YXJyYXkoKTsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0g
aW5BcnJheS5zaXplKCk7Ci0gICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0LCBzaXplKTsKLSAgICAgICAgICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgICAgIEpT
QXJyYXkqIG91dEFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwLCBnbG9iYWxPYmpl
Y3QsIHNpemUpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgICAgICAgICBJREJLZXkqIGFycmF5S2V5ID0gaW5BcnJheS5hdChpKS5nZXQo
KTsKLSAgICAgICAgICAgICAgICBvdXRBcnJheS0+aW5pdGlhbGl6ZUluZGV4KGdsb2JhbERhdGEs
IGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBhcnJheUtleSkpOworICAgICAgICAgICAgICAg
IG91dEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgYXJyYXlLZXkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KG91dEFycmF5KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU1OWY0MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
LSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
LSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotICogREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgiCi0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KLX0KLQotfQotCi0jZW5kaWYKLS0gCjEuNy45LjUKCg==
</data>
<flag name="review"
          id="193855"
          type_id="1"
          status="+"
          setter="haraken"
    />
    <flag name="commit-queue"
          id="193892"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177663</attachid>
            <date>2012-12-04 21:20:54 -0800</date>
            <delta_ts>2012-12-05 07:38:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-jsc.patch</filename>
            <type>text/plain</type>
            <size>29483</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogVHVlLCA0IERlYyAy
MDEyIDIxOjA1OjQ4IC0wODAwClN1YmplY3Q6IEluZGV4ZWREQjogSW1wbGVtZW50IEluZGV4ZWRE
QiBiaW5kaW5ncyBmb3IgSlNDCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0ICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNTAgKysrKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNyArLQogLi4uL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwgfCAgICAzICstCiAuLi4vTW9kdWxl
cy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsICB8ICAgIDMgKy0KIFNvdXJj
ZS9XZWJDb3JlL1VzZUpTQy5jbWFrZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAtCiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICB8ICAgIDQg
LQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NUmVxdWVzdFN0YXRlLmggICAgICAgfCAg
IDg2ICsrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcCB8ICAyMjcgKysrKysrKysrKysrKysrKysrKy0KIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaCAgIHwgICAgOCArCiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAgICAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCAgICAgIHwgICAgNSArLQogLi4uL2pz
L0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwICAgICAgICAgfCAgIDQyIC0tLS0K
IDEzIGZpbGVzIGNoYW5nZWQsIDM4NiBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01SZXF1ZXN0U3Rh
dGUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5
NTBhMzYwLi5iZGVmMTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTk1LDggKzE5NSwxMCBA
QCBTRVQoV2ViQ29yZV9JRExfRklMRVMKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRs
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCiAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRC
UmVxdWVzdC5pZGwKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAogICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbAorICAgIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJz
aW9uQ2hhbmdlRXZlbnQuaWRsCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuaWRsCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWRE
YXRhYmFzZS5pZGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MDBiMjYxLi4wMTc5Yzc5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTItMTItMDQgIE1pY2hhZWwgUHJ1ZXR0ICA8bWljaGFlbEA2OGsu
b3JnPgorCisgICAgICAgIEluZGV4ZWREQjogSW1wbGVtZW50IEluZGV4ZWREQiBiaW5kaW5ncyBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDM0ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bmRleGVkREIgaXMgY3VycmVudGx5IGltcGxlbWVudGVkIG9ubHkgZm9yIFY4LiBUaGlzIGNoYW5n
ZSBhZGRzCisgICAgICAgIHRoZSBiaW5kaW5ncyBuZWNlc3NhcnkgZm9yIEluZGV4ZWREQiB0byB3
b3JrIHdpdGggSlNDLiBXaXRoIHRoaXMKKyAgICAgICAgcGF0Y2gsIEluZGV4ZWREQiBmb3IgSlND
IHBhc3NlcyAxMTIgb3V0IG9mIHRoZSAxOTYgbGF5b3V0IHRlc3RzIGluCisgICAgICAgIHN0b3Jh
Z2UvaW5kZXhlZGRiLiBJbmRleGVkREIgaXMgc3RpbGwgbm90IGVuYWJsZWQgZm9yIGFueSBKU0Mg
cG9ydC4KKworICAgICAgICBUZXN0czogc3RvcmFnZS9pbmRleGVkZGIvKgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6CisgICAgICAgICogVXNl
SlNDLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01SZXF1ZXN0U3RhdGUuaDogQWRkZWQgdG8gbWF0Y2gg
YmluZGluZ3MvdjgvRE9NUmVxdWVzdFN0YXRlLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKERPTVJlcXVlc3RTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01SZXF1ZXN0U3RhdGU6
OkRPTVJlcXVlc3RTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01SZXF1ZXN0U3RhdGU6OmNs
ZWFyKToKKyAgICAgICAgKFNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVJlcXVlc3RTdGF0
ZTo6U2NvcGU6OlNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVJlcXVlc3RTdGF0ZTo6ZXhl
Yyk6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6IEFkZCB1
dGlsaXR5IGZ1bmN0aW9ucyBtYXRjaGluZyB0aG9zZSBpbiBiaW5kaW5ncy92OC9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNhblNldCk6CisgICAgICAgIChXZWJDb3JlOjpzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OmdldE50aFZhbHVlT25LZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlTnRo
VmFsdWVPbktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0TnRoVmFsdWVPbktl
eVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpkZXNlcmlhbGl6ZUlEQlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Omlk
YktleVRvU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuaDogQWRkIHV0aWxpdHkgZnVuY3Rpb25zIG1hdGNoaW5nIHRob3NlIGluIGJpbmRpbmdz
L3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3RDdXN0b20uY3BwOiBSZW1vdmVkLgorCiAyMDEyLTEyLTA0ICBBbnRvaW5lIFF1aW50ICA8
Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgVGV4dFRyYWNrJ3MgLmtpbmQgcHJvcGVydHkg
c2hvdWxkIHJldHVybiBsb3dlci1jYXNlIHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggNWFmN2VmNS4uYzY3NzY1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC00NjUsMTIgKzQ2NSwxNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJLZXlSYW5nZS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTSURCT2JqZWN0U3RvcmUuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURC
T2JqZWN0U3RvcmUuaCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQk9wZW5EQlJlcXVl
c3QuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCT3BlbkRCUmVxdWVzdC5oIFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCUmVxdWVzdC5jcHAgXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNJREJSZXF1ZXN0LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJ
REJUcmFuc2FjdGlvbi5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJUcmFuc2Fj
dGlvbi5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5o
IFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVXBncmFkZU5lZWRlZEV2ZW50LmNwcCBc
CisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5oIFwKIAlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwIFwKIAlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCBcCiAJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ltYWdlRGF0YS5jcHAgXApAQCAtMTIyOSw2ICsxMjMzLDcg
QEAgZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5pZGwgXAogCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVXBn
cmFkZU5lZWRlZEV2ZW50LmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlRXZlbnQuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgXAogCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIv
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhl
ZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UuaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaWRsIFwKQEAgLTIyNDIsNiArMjI0Nyw3IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBl
cldvcmxkLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCBcCkBAIC0yMzQyLDcgKzIzNDgs
NiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SGlzdG9yeUN1c3RvbS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1
c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1
Y3Rvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rv
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRC
UmVxdWVzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJS
ZXF1ZXN0LmlkbAppbmRleCBmMDBlOGU0Li5kM2Q3MzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbApAQCAtMjcsNyAr
MjcsOCBAQAogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgQWN0aXZlRE9N
T2JqZWN0LAogICAgIEV2ZW50VGFyZ2V0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMKKyAgICBKU05v
U3RhdGljVGFibGVzLAorICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0CiBdIGludGVyZmFjZSBJREJP
cGVuREJSZXF1ZXN0IDogSURCUmVxdWVzdCB7CiAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25ibG9ja2VkOwogICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udXBncmFkZW5lZWRlZDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAppbmRleCA5YjZlMWUzLi5kN2UxMWI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3QuaWRsCkBAIC0yNyw3ICsyNyw4IEBACiAgICAgQ29uZGl0aW9uYWw9SU5ERVhF
RF9EQVRBQkFTRSwKICAgICBBY3RpdmVET01PYmplY3QsCiAgICAgRXZlbnRUYXJnZXQsCi0gICAg
SlNOb1N0YXRpY1RhYmxlcworICAgIEpTTm9TdGF0aWNUYWJsZXMsCisgICAgSlNHZW5lcmF0ZVRv
SlNPYmplY3QKIF0gaW50ZXJmYWNlIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IDogSURCUmVxdWVz
dCB7CiAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25ibG9ja2VkOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5j
bWFrZQppbmRleCAzZDUyNGVhLi5hMGZhZWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9V
c2VKU0MuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCkBAIC0yMDQsNyAr
MjA0LDYgQEAgSUYgKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKQogICAgICAgICBiaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU0lEQkFueUN1
c3RvbS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCi0gICAgICAg
IGJpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwCiAgICAgKQog
RU5ESUYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDcwZmUzNzguLjkzNDBlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcyOCw3ICs3MjgsNiBAQAog
CQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RjU0RUFCMTAxRkU5
MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07CiAJCTI1NDJGNERBMTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2Vz
dHVyZUluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNTQyRjREODExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3Iu
Y3BwICovOyB9OwogCQkyNTQyRjREQjExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRp
Y2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1
NDJGNEQ5MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTI2MjQ3REFFMTUwRUYw
QzQwMDI3QjUzQSAvKiBKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MjQ3REFEMTUwRUYwQzQw
MDI3QjUzQSAvKiBKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJ
MjY1NTQxMzkxNDg5ODExQzAwMERGQzVEIC8qIEtleUV2ZW50Q29kZXNJT1MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2NTU0MTM3MTQ4OTgxMUMwMDBE
RkM1RCAvKiBLZXlFdmVudENvZGVzSU9TLmggKi87IH07CiAJCTI2NTU0MTNBMTQ4OTgxMUMwMDBE
RkM1RCAvKiBLZXlFdmVudElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2NTU0MTM4MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudElPUy5tbSAq
LzsgfTsKIAkJMjY1NTQxNTIxNDg5QjIzMzAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjU1NDE0QjE0ODlBQTJC
MDAwREZDNUQgLyogQ3Vyc29ySU9TLmNwcCAqLzsgfTsKQEAgLTc4ODUsNyArNzg4NCw2IEBACiAJ
CTI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNTQyRjREODExNjZDMjVBMDBFODlBODYgLyogVXNl
ckdlc3R1cmVJbmRpY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNTQyRjREOTExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckdlc3R1cmVJbmRpY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjYyNDdEQUQxNTBFRjBDNDAwMjdCNTNBIC8qIEpT
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2NTU0MTM3MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlF
dmVudENvZGVzSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEtleUV2ZW50
Q29kZXNJT1MuaDsgcGF0aCA9IGlvcy9LZXlFdmVudENvZGVzSU9TLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTI2NTU0MTM4MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudElPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEtleUV2ZW50SU9TLm1t
OyBwYXRoID0gaW9zL0tleUV2ZW50SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNjU1NDE0QjE0ODlBQTJCMDAwREZDNUQgLyogQ3Vyc29ySU9TLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEN1cnNvcklPUy5jcHA7IHBhdGggPSBpb3MvQ3Vyc29y
SU9TLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjIyLDcgKzIwNjIwLDYg
QEAKIAkJCQlFMUFEMTM5RDEyOTVEOTYxMDBBQ0E5ODkgLyogSlNIVE1MU3R5bGVFbGVtZW50Q3Vz
dG9tLmNwcCAqLywKIAkJCQlDNTg1QTY1QzExRDRGQUIyMDA0QzNFNEIgLyogSlNJREJBbnlDdXN0
b20uY3BwICovLAogCQkJCUM1ODVBNjVEMTFENEZBQjIwMDRDM0U0QiAvKiBKU0lEQktleUN1c3Rv
bS5jcHAgKi8sCi0JCQkJMjYyNDdEQUQxNTBFRjBDNDAwMjdCNTNBIC8qIEpTSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3RDdXN0b20uY3BwICovLAogCQkJCUE3RDAzMThEMEU5MzU0MDMwMEUyNEFDRCAv
KiBKU0ltYWdlRGF0YUN1c3RvbS5jcHAgKi8sCiAJCQkJN0EwRTc2RDQxMEJGMDUwNzAwQTAyNzZF
IC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCAqLywKIAkJCQlGMzE2Mzk2RDEzMjk0
ODc2MDBBNjQ5Q0IgLyogSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwICovLApAQCAtMjc1OTIs
NyArMjc1ODksNiBAQAogCQkJCUI2NTY2MjcxMTIwQjEyMjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5z
YWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2OTIzOTk1MTUwNUUxQUEwMDlFNTdGQyAv
KiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNjkyMzk5
NzE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkyNjI0N0RBRTE1MEVGMEM0MDAyN0I1M0EgLyogSlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzZDNDlGMzBEN0RCQTA1
MDBGRkE1NTggLyogSlNJbWFnZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
Nzk3OTI4MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0QwMzE4RTBFOTM1NDAzMDBFMjRBQ0QgLyogSlNJbWFnZURhdGFDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01S
ZXF1ZXN0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVJlcXVlc3RTdGF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYWYxYTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01SZXF1ZXN0U3RhdGUuaApA
QCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0
IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRE9N
UmVxdWVzdFN0YXRlX2gKKyNkZWZpbmUgRE9NUmVxdWVzdFN0YXRlX2gKKworI2luY2x1ZGUgIkRP
TVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0
U3RhdGUuaCIKKyNpZiBFTkFCTEUoV09SS0VSUykKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0Lmgi
CisjZW5kaWYKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSVNoaW1zLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3Mg
RE9NUmVxdWVzdFN0YXRlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBET01SZXF1ZXN0U3RhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAg
OiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAg
ICAgLCBtX2V4ZWMoMCkKKyAgICB7CisgICAgICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgICAgICAg
ICAgbV9leGVjID0gc2NyaXB0U3RhdGVGcm9tUGFnZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwg
ZG9jdW1lbnQtPnBhZ2UoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBXb3JrZXJD
b250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgICAgICBtX2V4ZWMgPSBzY3JpcHRTdGF0ZUZy
b21Xb3JrZXJDb250ZXh0KHdvcmtlckNvbnRleHQpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSAw
OworICAgICAgICBtX2V4ZWMgPSAwOworICAgIH0KKworICAgIGNsYXNzIFNjb3BlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIGV4cGxpY2l0IFNjb3BlKERPTVJlcXVlc3RTdGF0ZSYgc3RhdGUpCisg
ICAgICAgICAgICA6IG1fZW50cnlTaGltKHN0YXRlLmV4ZWMoKSkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNDOjpBUElFbnRyeVNoaW0gbV9lbnRyeVNoaW07
CisgICAgfTsKKworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2V4ZWM7CisgICAgfQorCitwcml2YXRlOgorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogbV9leGVj
OworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IGI1NWU3NmIuLmVmODE5ZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNo
YWVsQDY4ay5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDIyICsy
OSwyMzggQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICNpbmNsdWRlICJJREJCaW5k
aW5nVXRpbGl0aWVzLmgiCiAKKyNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKICNpbmNsdWRl
ICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCVHJhY2lu
Zy5oIgorI2luY2x1ZGUgIkpTSURCS2V5LmgiCisKKyNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0
YW5jZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBib29sIGdldChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCBKU1ZhbHVl
JiByZXN1bHQpCit7CisgICAgaWYgKG9iamVjdC5pc1N0cmluZygpICYmIGtleVBhdGhFbGVtZW50
ID09ICJsZW5ndGgiKSB7CisgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKG9iamVjdC50b1N0cmlu
ZyhleGVjKS0+bGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYg
KCFvYmplY3QuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIElkZW50aWZp
ZXIgaWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBrZXlQYXRoRWxlbWVudC51dGY4KCku
ZGF0YSgpKTsKKyAgICBpZiAoIWFzT2JqZWN0KG9iamVjdCktPmhhc1Byb3BlcnR5KGV4ZWMsIGlk
ZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gYXNPYmplY3Qo
b2JqZWN0KS0+Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOworICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgYm9vbCBjYW5TZXQoSlNWYWx1ZSBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVs
ZW1lbnQpCit7CisgICAgcmV0dXJuIG9iamVjdC5pc09iamVjdCgpOworfQorCitzdGF0aWMgYm9v
bCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5
UGF0aEVsZW1lbnQsIEpTVmFsdWUganNWYWx1ZSkKIHsKLSAgICBpZiAodmFsdWUuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKLSAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQorICAgIGlmICghY2FuU2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9i
YWxEYXRhKCksIGtleVBhdGhFbGVtZW50LnV0ZjgoKS5kYXRhKCkpOworICAgIGFzT2JqZWN0KG9i
amVjdCktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIsIGpzVmFsdWUp
OworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heGltdW1EZXB0
aCA9IDIwMDA7CisKK3N0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZh
bHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPEpTQXJyYXkqPiYgc3Rh
Y2spCit7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkgJiYgIWlzbmFuKHZhbHVlLnRvTnVtYmVy
KGV4ZWMpKSkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHZhbHVlLnRvTnVt
YmVyKGV4ZWMpKTsKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIElE
QktleTo6Y3JlYXRlU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlcy4KKyAgICBpZiAodmFsdWUuaW5oZXJpdHMoJkRh
dGVJbnN0YW5jZTo6c19pbmZvKSAmJiAhaXNuYW4odmFsdWVUb0RhdGUoZXhlYywgdmFsdWUpKSkK
KyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0ZSh2YWx1ZVRvRGF0ZShleGVjLCB2YWx1
ZSkpOworICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdCh2YWx1ZSk7CisgICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0KSB8fCBv
YmplY3QtPmluaGVyaXRzKCZKU0FycmF5OjpzX2luZm8pKSB7CisgICAgICAgICAgICBKU0FycmF5
KiBhcnJheSA9IGFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBh
cnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGlmIChzdGFjay5jb250YWlucyhhcnJheSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAoc3RhY2suc2l6ZSgp
ID49IG1heGltdW1EZXB0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IHN0YWNrLmFwcGVuZChhcnJheSk7CisKKyAgICAgICAgICAgIElEQktleTo6S2V5QXJyYXkgc3Vi
a2V5czsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXgoZXhlYywgaSk7
CisgICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4gc3Via2V5ID0gY3JlYXRlSURCS2V5RnJv
bVZhbHVlKGV4ZWMsIGl0ZW0sIHN0YWNrKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1YmtleSkK
KyAgICAgICAgICAgICAgICAgICAgc3Via2V5cy5hcHBlbmQoSURCS2V5OjpjcmVhdGVJbnZhbGlk
KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3Via2V5cy5h
cHBlbmQoc3Via2V5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhY2sucmVtb3Zl
TGFzdCgpOworICAgICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXkoc3Via2V5cyk7
CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKK1Bhc3NSZWZQdHI8SURCS2V5
PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIFZlY3RvcjxKU0FycmF5Kj4gc3RhY2s7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0g
Y3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIHZhbHVlLCBzdGFjayk7CisgICAgaWYgKGtleSkK
KyAgICAgICAgcmV0dXJuIGtleTsKKyAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlIGdldE50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVu
dHMsIHNpemVfdCBpbmRleCkKK3sKKyAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShyb290VmFsdWUp
OworICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSBwYXJlbnRW
YWx1ZShjdXJyZW50VmFsdWUpOworICAgICAgICBpZiAoIWdldChleGVjLCBwYXJlbnRWYWx1ZSwg
a2V5UGF0aEVsZW1lbnRzW2ldLCBjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiBjdXJyZW50VmFsdWU7Cit9CisKK3N0YXRp
YyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0
aChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJ
REJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwg
a2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQ
YXJzZUVycm9yTm9uZSk7CisKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZS5qc1ZhbHVlKCk7
CisgICAganNWYWx1ZSA9IGdldE50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGpzVmFsdWUsIGtleVBh
dGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgaWYgKGpzVmFsdWUuaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZy
b21WYWx1ZShleGVjLCBqc1ZhbHVlKTsKK30KKworc3RhdGljIEpTVmFsdWUgZW5zdXJlTnRoVmFs
dWVPbktleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQoreworICAgIEpTVmFs
dWUgY3VycmVudFZhbHVlKHJvb3RWYWx1ZSk7CisKKyAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0
aEVsZW1lbnRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleDsgaSsr
KSB7CisgICAgICAgIEpTVmFsdWUgcGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCA9IGtleVBhdGhFbGVtZW50c1tpXTsKKyAgICAg
ICAgaWYgKCFnZXQoZXhlYywgcGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBjdXJyZW50VmFs
dWUpKSB7CisgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYyk7CisgICAgICAgICAgICBpZiAoIXNldChleGVjLCBwYXJlbnRWYWx1ZSwga2V5UGF0
aEVsZW1lbnQsIEpTVmFsdWUob2JqZWN0KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBKU1ZhbHVlKG9iamVjdCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY3VycmVudFZhbHVlOworfQorCitzdGF0aWMg
Ym9vbCBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
cm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3Qg
aW5kZXgpCit7CisgICAgaWYgKCFyb290VmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKworICAgIEFT
U0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSBwYXJlbnRWYWx1ZShjdXJy
ZW50VmFsdWUpOworICAgICAgICBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50ID0ga2V5UGF0
aEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoIWdldChleGVjLCBwYXJlbnRWYWx1ZSwga2V5UGF0
aEVsZW1lbnQsIGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gY2FuU2V0KHBhcmVu
dFZhbHVlLCBrZXlQYXRoRWxlbWVudCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RT
dGF0ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgiaW5qZWN0SURCS2V5SW50b1Nj
cmlwdFZhbHVlIik7CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6
U3RyaW5nVHlwZSk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CisgICAg
SURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGgu
c3RyaW5nKCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVChlcnJvciA9PSBJ
REJLZXlQYXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgaWYgKGtleVBhdGhFbGVtZW50cy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJl
cXVlc3RTdGF0ZS0+ZXhlYygpOworCisgICAgSlNWYWx1ZSBwYXJlbnQgPSBlbnN1cmVOdGhWYWx1
ZU9uS2V5UGF0aChleGVjLCB2YWx1ZS5qc1ZhbHVlKCksIGtleVBhdGhFbGVtZW50cywga2V5UGF0
aEVsZW1lbnRzLnNpemUoKSAtIDEpOworICAgIGlmIChwYXJlbnQuaXNVbmRlZmluZWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzZXQoZXhlYywgcGFyZW50LCBrZXlQYXRo
RWxlbWVudHMubGFzdCgpLCB0b0pTKGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleS5nZXQoKSkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0
ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0
U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0
aCkKK3sKKyAgICBJREJfVFJBQ0UoImNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBh
dGgiKTsKKyAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkpOworCisgICAgRXhlY1N0YXRlKiBl
eGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7CisKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0g
SURCS2V5UGF0aDo6QXJyYXlUeXBlKSB7CisgICAgICAgIElEQktleTo6S2V5QXJyYXkgcmVzdWx0
OworICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFycmF5KCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyBpKyspIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1
ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIGFycmF5W2ldKTsKKyAgICAgICAgICAgIGlmICgha2V5
KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChr
ZXkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHJlc3Vs
dCk7CisgICAgfQorCisgICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0
cmluZ1R5cGUpOworICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQ
YXRoKGV4ZWMsIHZhbHVlLCBrZXlQYXRoLnN0cmluZygpKTsKK30KKworYm9vbCBjYW5JbmplY3RJ
REJLZXlJbnRvU2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIGNvbnN0
IFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sK
KyAgICBJREJfVFJBQ0UoImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOworCisgICAg
QVNTRVJUKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUpOworICAgIFZl
Y3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBl
cnJvcjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aC5zdHJpbmcoKSwga2V5UGF0aEVsZW1l
bnRzLCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9u
ZSk7CisKKyAgICBpZiAoIWtleVBhdGhFbGVtZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7
CisgICAgcmV0dXJuIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIHNjcmlwdFZhbHVl
LmpzVmFsdWUoKSwga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpIC0gMSk7
Cit9CisKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0YXRlKiBy
ZXF1ZXN0U3RhdGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSkK
K3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSByZXF1ZXN0U3RhdGUtPmV4ZWMoKTsKKyAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBwcnBWYWx1ZTsKKyAg
ICBpZiAoc2VyaWFsaXplZFZhbHVlKQorICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWU6OmRlc2Vy
aWFsaXplKGV4ZWMsIHNlcmlhbGl6ZWRWYWx1ZS5nZXQoKSwgTm9uVGhyb3dpbmcpOworICAgIHJl
dHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKTsKK30KKworU2Ny
aXB0VmFsdWUgaWRiS2V5VG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0
ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSByZXF1
ZXN0U3RhdGUtPmV4ZWMoKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0b0pTKGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSksIGtleS5nZXQoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAppbmRleCA4ZTBjOWM1Li42ZTgy
ODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5oCkBAIC0zNCwxMCArMzQsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBET01SZXF1ZXN0U3RhdGU7CiBjbGFzcyBJREJLZXk7CitjbGFzcyBJREJLZXlQYXRoOwogCiBQ
YXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlKTsKIAorYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRE9NUmVx
dWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxJREJLZXk+LCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktl
eVBhdGgmKTsKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVB
bmRLZXlQYXRoKERPTVJlcXVlc3RTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiwgY29uc3QgSURC
S2V5UGF0aCYpOworYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRE9NUmVxdWVz
dFN0YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CitTY3JpcHRW
YWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERPTVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPik7CitTY3JpcHRWYWx1ZSBpZGJLZXlUb1NjcmlwdFZhbHVlKERP
TVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQdHI8SURCS2V5Pik7CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJBbnlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJBbnlDdXN0b20uY3BwCmluZGV4IDc3MTEzYzcuLjRmMTQ1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAKQEAgLTY0LDggKzY0LDYgQEAgSlNW
YWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSURCQW55KiBpZGJBbnkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGNh
c2UgSURCQW55OjpOdWxsVHlwZToKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIGNhc2Ug
SURCQW55OjpTdHJpbmdUeXBlOgotICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhl
YywgaWRiQW55LT5zdHJpbmcoKSk7CiAgICAgY2FzZSBJREJBbnk6OkRPTVN0cmluZ0xpc3RUeXBl
OgogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+ZG9tU3Ry
aW5nTGlzdCgpKTsKICAgICBjYXNlIElEQkFueTo6SURCQ3Vyc29yVHlwZToKQEAgLTg0LDggKzgy
LDEyIEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIElEQkFueSogaWRiQW55KQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGlkYkFueS0+aWRiT2JqZWN0U3RvcmUoKSk7CiAgICAgY2FzZSBJREJBbnk6
OklEQlRyYW5zYWN0aW9uVHlwZToKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpZGJBbnktPmlkYlRyYW5zYWN0aW9uKCkpOwotICAgIGNhc2UgSURCQW55OjpTZXJpYWxp
emVkU2NyaXB0VmFsdWVUeXBlOgotICAgICAgICByZXR1cm4gaWRiQW55LT5zZXJpYWxpemVkU2Ny
aXB0VmFsdWUoKS0+ZGVzZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICBjYXNlIElE
QkFueTo6U2NyaXB0VmFsdWVUeXBlOgorICAgICAgICByZXR1cm4gaWRiQW55LT5zY3JpcHRWYWx1
ZSgpLmpzVmFsdWUoKTsKKyAgICBjYXNlIElEQkFueTo6SW50ZWdlclR5cGU6CisgICAgICAgIHJl
dHVybiBqc051bWJlcihpZGJBbnktPmludGVnZXIoKSk7CisgICAgY2FzZSBJREJBbnk6OlN0cmlu
Z1R5cGU6CisgICAgICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpZGJBbnktPnN0
cmluZygpKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAppbmRleCBhNjQwNjNkLi5hZjQx
MDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3Bw
CkBAIC01MCwxMSArNTAsMTAgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSURCS2V5KiBrZXkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGNvbnN0IElEQktleTo6S2V5QXJyYXkmIGluQXJyYXkgPSBrZXktPmFycmF5KCk7CiAg
ICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGluQXJyYXkuc2l6ZSgpOwotICAgICAgICAgICAgSlNB
cnJheSogb3V0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwg
c2l6ZSk7Ci0gICAgICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7CisgICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0LCBzaXplKTsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICAgICAgSURCS2V5KiBhcnJh
eUtleSA9IGluQXJyYXkuYXQoaSkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgb3V0QXJyYXktPmlu
aXRpYWxpemVJbmRleChnbG9iYWxEYXRhLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJy
YXlLZXkpKTsKKyAgICAgICAgICAgICAgICBvdXRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGFycmF5S2V5KSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZShvdXRBcnJheSk7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdEN1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NTlmNDEu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdEN1c3RvbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgSlNJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLX0KLQotI2VuZGlm
Ci0tIAoxLjcuOS41Cgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>