<?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>157006</bug_id>
          
          <creation_ts>2016-04-25 16:53:00 -0700</creation_ts>
          <short_desc>JSC should have an option to allow global const redeclarations</short_desc>
          <delta_ts>2016-04-27 14:51:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=157101</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jonlee</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mitz</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>sukolsak</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1187127</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-25 16:53:00 -0700</bug_when>
    <thetext>We will allow for duplicate declarations when the application running is iBooks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187149</commentid>
    <comment_count>1</comment_count>
      <attachid>277297</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-25 17:54:38 -0700</bug_when>
    <thetext>Created attachment 277297
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187157</commentid>
    <comment_count>2</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-04-25 18:42:36 -0700</bug_when>
    <thetext>rdar://problem/25730915</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187186</commentid>
    <comment_count>3</comment_count>
      <attachid>277297</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-25 19:45:27 -0700</bug_when>
    <thetext>Comment on attachment 277297
patch

r=me

🙈</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187412</commentid>
    <comment_count>4</comment_count>
      <attachid>277297</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-26 09:24:39 -0700</bug_when>
    <thetext>Comment on attachment 277297
patch

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

&gt; Source/WebCore/bindings/js/JSDOMWindowBase.cpp:280
&gt; +#if PLATFORM(MAC)
&gt; +        namespace ApplicationChecker = MacApplication;
&gt; +#elif PLATFORM(IOS)
&gt; +        namespace ApplicationChecker = IOSApplication;
&gt; +#endif
&gt; +#if PLATFORM(MAC) || PLATFORM(IOS)
&gt; +        if (ApplicationChecker::isIBooks() || !Settings::globalConstRedeclarationShouldThrow())
&gt; +            vm-&gt;setGlobalConstRedeclarationShouldThrow(false);
&gt; +#endif

It’s not great to have the policy here. There are three separable concerns:

1) Accurately detecting the application. Handled by the application checkers classes.
2) Accurately implementing the quirks we need. Handled inside the implementation of classes like these.
3) Defining the policy for which apps should trigger which quirks. Longer term, I’d really like to see that in a place separate from (1) and (2) that focuses on the mapping of apps to quirks.

It seems particularly inelegant that the policy is implemented in WebProcessPool::platformInitializeWebProcess for WebKit2, but in JSDOMWindowBase::commonVM for WebKit1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187494</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-26 11:46:58 -0700</bug_when>
    <thetext>I need to fix a debug assertion and also make our rule stricter.
Currently, we allow the following:
```
// Program 1:
let foo = 20;
```
```
// Program 2:
const foo = 40;
```

I&apos;m going to prevent this behavior because it doesn&apos;t break backwards compat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187496</commentid>
    <comment_count>6</comment_count>
      <attachid>277297</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-26 11:52:20 -0700</bug_when>
    <thetext>Comment on attachment 277297
patch

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

&gt;&gt; Source/WebCore/bindings/js/JSDOMWindowBase.cpp:280
&gt;&gt; +#endif
&gt; 
&gt; It’s not great to have the policy here. There are three separable concerns:
&gt; 
&gt; 1) Accurately detecting the application. Handled by the application checkers classes.
&gt; 2) Accurately implementing the quirks we need. Handled inside the implementation of classes like these.
&gt; 3) Defining the policy for which apps should trigger which quirks. Longer term, I’d really like to see that in a place separate from (1) and (2) that focuses on the mapping of apps to quirks.
&gt; 
&gt; It seems particularly inelegant that the policy is implemented in WebProcessPool::platformInitializeWebProcess for WebKit2, but in JSDOMWindowBase::commonVM for WebKit1.

I see. So you think the more elegant solution would be to only check a particular Setting in this branch and not the &lt;AppChecker&gt;::isIBooks()?
And then decide on a better place to set the value of that Setting depending on the application? Maybe we can just make Settings::globalConstRedeclarationShouldThrow() check the application as needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187514</commentid>
    <comment_count>7</comment_count>
      <attachid>277406</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-26 13:21:16 -0700</bug_when>
    <thetext>Created attachment 277406
patch

Fix debug assertion failures in JSC and improve the strictness of the JSC rule.

(Still haven&apos;t addressed Darin&apos;s comments)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187557</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-26 15:52:09 -0700</bug_when>
    <thetext>After discussing this with Geoff, I think *Application::isIBooks
will now work without me doing anything in WK2. I think me doing
this was a vestige of an earlier patch that I did for a similar
compatibility hack. I think I&apos;m going to make the Settings::globalConstRedeclarationShouldThrow a getter that
just checks if the application is iBooks. It won&apos;t refer to any fields.
That way, ::commonVM can just ask Settings. And Settings just asks the application
which application it is. commonVM() no longer needs to ask which application is running.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187563</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-26 15:59:08 -0700</bug_when>
    <thetext>To clarify:
It looks like Chris recently added the capability
of sharing the bundle ID of the UI process. That way
when we check for iBooks in WK1 or WK2, we will get the right answer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187591</commentid>
    <comment_count>10</comment_count>
      <attachid>277426</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-26 17:22:45 -0700</bug_when>
    <thetext>Created attachment 277426
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187592</commentid>
    <comment_count>11</comment_count>
      <attachid>277426</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-26 17:24:57 -0700</bug_when>
    <thetext>Comment on attachment 277426
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187675</commentid>
    <comment_count>12</comment_count>
      <attachid>277426</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-27 00:11:41 -0700</bug_when>
    <thetext>Comment on attachment 277426
patch

Clearing flags on attachment: 277426

Committed r200121: &lt;http://trac.webkit.org/changeset/200121&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187676</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-27 00:11:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187749</commentid>
    <comment_count>14</comment_count>
      <attachid>277426</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-27 08:30:27 -0700</bug_when>
    <thetext>Comment on attachment 277426
patch

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

&gt; Source/WebCore/page/Settings.h:196
&gt; +    static bool globalConstRedeclarationShouldThrow()
&gt; +    { 
&gt; +#if PLATFORM(MAC)
&gt; +        return !MacApplication::isIBooks();
&gt; +#elif PLATFORM(IOS)
&gt; +        return !IOSApplication::isIBooks();
&gt; +#else
&gt; +        return true;
&gt; +#endif
&gt; +    }

We definitely want to have functions like this that set policy for quirks. I’m not sure, long term, though, if we really want this to be literally in the Settings class. I would love to hear from others about their view of the best place for this sort of thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187750</commentid>
    <comment_count>15</comment_count>
      <attachid>277426</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-27 08:31:23 -0700</bug_when>
    <thetext>Comment on attachment 277426
patch

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

&gt; Source/WebCore/page/Settings.h:33
&gt; +#include &quot;RuntimeApplicationChecks.h&quot;

Particularly unfortunate to add a new include to a header that’s included so widely. Not sure it’s critical for the globalConstRedeclarationShouldThrow function to be inlined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187759</commentid>
    <comment_count>16</comment_count>
    <who name="">mitz</who>
    <bug_when>2016-04-27 08:39:27 -0700</bug_when>
    <thetext>Beyond what Darin said, the approach of special-casing all past, present and future versions of a WebKit client is not a good approach to take. The purpose of quirks like this should be to prevent already-deployed software from breaking. New software should not be forced into the special behavior. Instead, new API should be introduced for controlling the behavior, and the only special-casing should be around the default value of the new option. It is often sufficient (and safer) to determine the default value based on the version of WebKit at the time the client linked against the library, rather than on the identity of the client.

I suggest that you rework the fix along those lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187828</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-27 11:12:05 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Beyond what Darin said, the approach of special-casing all past, present and
&gt; future versions of a WebKit client is not a good approach to take. The
&gt; purpose of quirks like this should be to prevent already-deployed software
&gt; from breaking. New software should not be forced into the special behavior.
&gt; Instead, new API should be introduced for controlling the behavior, and the
&gt; only special-casing should be around the default value of the new option. It
&gt; is often sufficient (and safer) to determine the default value based on the
&gt; version of WebKit at the time the client linked against the library, rather
&gt; than on the identity of the client.
&gt; 
&gt; I suggest that you rework the fix along those lines.

Good point. That’s an important refinement for someone to make.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187879</commentid>
    <comment_count>18</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-27 11:43:33 -0700</bug_when>
    <thetext>&gt; Beyond what Darin said, the approach of special-casing all past, present and
&gt; future versions of a WebKit client is not a good approach to take.

We think we need to special case book reading forever because the problematic content comes from the book (in this case, published in 2012), rather than the app, and there is no software update mechanism for books.

&gt; Instead, new API should be introduced for controlling the behavior, and the
&gt; only special-casing should be around the default value of the new option.

I do agree -- and I think Saam does, too -- that this setting should be controllable through API. Non-iBooks book readers might have book content that wants this setting too.

I think we should add a WebKit preference similar to -[WebPreferencesPrivate _useSiteSpecificSpoofing]. Perhaps &quot;useEPubQuirks&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187885</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-27 11:50:16 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; Beyond what Darin said, the approach of special-casing all past, present and
&gt; &gt; future versions of a WebKit client is not a good approach to take.
&gt; 
&gt; We think we need to special case book reading forever because the
&gt; problematic content comes from the book (in this case, published in 2012),
&gt; rather than the app, and there is no software update mechanism for books.

I had the same thought at first.

Then I realized that Dan’s comment is not about when a *quirk* is no longer needed. It’s about special casing *clients* forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187896</commentid>
    <comment_count>20</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-04-27 11:59:18 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; &gt; Beyond what Darin said, the approach of special-casing all past, present and
&gt; &gt; &gt; future versions of a WebKit client is not a good approach to take.
&gt; &gt; 
&gt; &gt; We think we need to special case book reading forever because the
&gt; &gt; problematic content comes from the book (in this case, published in 2012),
&gt; &gt; rather than the app, and there is no software update mechanism for books.
&gt; 
&gt; I had the same thought at first.
&gt; 
&gt; Then I realized that Dan’s comment is not about when a *quirk* is no longer
&gt; needed. It’s about special casing *clients* forever.

I recall Microsoft implementing behavioral quirks keyed off specific versions of clients. It sounded very much like they had something along the lines of
struct quirks {
bool needsQuirk1 : 1;
bool needsQuirk2 : 1;
etc_t etc; // :D
};

Map&lt;hash, quirks&gt; quirkyDoodads = {
appHash1: {needsQuirk1: true},
appHash2: {needsQuirk2: true},
appHash3: {needsQuirk1: true, needsQuirk2: true}, 
}

or some such.

But maybe that&apos;s over engineering here? (MS had to deal with apps depending on truly bizarro behaviors, so would switch out heap allocators, struct sizes, some times even no-op free())

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187923</commentid>
    <comment_count>21</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-27 12:58:01 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 277426 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=277426&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/Settings.h:33
&gt; &gt; +#include &quot;RuntimeApplicationChecks.h&quot;
&gt; 
&gt; Particularly unfortunate to add a new include to a header that’s included so
&gt; widely. Not sure it’s critical for the globalConstRedeclarationShouldThrow
&gt; function to be inlined.

I agree. I&apos;ll make a change to move it out of the header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187950</commentid>
    <comment_count>22</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-04-27 14:09:15 -0700</bug_when>
    <thetext>Filed 157101 to track work for adding the pref.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187966</commentid>
    <comment_count>23</comment_count>
      <attachid>277538</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-27 14:51:51 -0700</bug_when>
    <thetext>Created attachment 277538
follow up to move implementation to cpp file</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277297</attachid>
            <date>2016-04-25 17:54:38 -0700</date>
            <delta_ts>2016-04-26 13:21:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>18333</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAwMDYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE2LTA0LTI1ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBhbiBvcHRpb24gdG8gYWxsb3cgZ2xvYmFsIGNvbnN0IHJlZGVjbGFy
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTcwMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGltcGxlbWVudHMgYW4gb3B0aW9uIHRoYXQgZGljdGF0ZXMgd2hldGhlcgorICAg
ICAgICBjb25zdCByZWRlY2xhcmF0aW9ucyBhdCB0aGUgcHJvZ3JhbSBsZXZlbCB3aWxsIHRocm93
LgorICAgICAgICBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byB0cnVlIGJ1dCBhbGxvd3MgdXNlcnMg
b2YgSlNDCisgICAgICAgIHRvIHNldCBpdCB0byBmYWxzZS4gVGhpcyBvcHRpb24gaXMgcGVyIFZN
LiBUaGlzIGlzIG5lZWRlZAorICAgICAgICBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0
aCBvdXIgb2xkIGNvbnN0IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICoganNjLmNwcDoKKyAg
ICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVuY3Rpb25T
aGFkb3dDaGlja2VuRnVuY3Rpb25zT25TdGFjayk6CisgICAgICAgIChmdW5jdGlvblNldEdsb2Jh
bENvbnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93KToKKyAgICAgICAgKGZ1bmN0aW9uUmVh
ZGxpbmUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OlByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyk6CisgICAgICAg
ICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6c2V0R2xvYmFsQ29uc3RSZWRlY2xh
cmF0aW9uU2hvdWxkVGhyb3cpOgorICAgICAgICAoSlNDOjpWTTo6Z2xvYmFsQ29uc3RSZWRlY2xh
cmF0aW9uU2hvdWxkVGhyb3cpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3Qt
cmVkZWNsYXJhdGlvbi1zZXR0aW5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZ2xv
YmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy0yLmpzOiBBZGRlZC4KKyAgICAgICAgKGFz
c2VydCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9u
LXNldHRpbmctMy5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoY2F0Y2gp
OgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0
aW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICogdGVzdHMvc3RyZXNz
L2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvZmlyc3QuanM6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL3Nl
Y29uZC5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRl
Y2xhcmF0aW9uLXNldHRpbmcvc3RyaWN0LmpzOiBBZGRlZC4KKwogMjAxNi0wNC0yNSAgTWljaGFl
bCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCB1c2luZyBAdHJ5
R2V0QnlJZCBpbiBERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDAwMzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM0
LDYgKzYzNCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICNl
bmRpZgogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNoYWRv
d0NoaWNrZW5GdW5jdGlvbnNPblN0YWNrKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91
bGROb3RUaHJvdyhFeGVjU3RhdGUqKTsKIAogc3RydWN0IFNjcmlwdCB7CiAgICAgYm9vbCBpc0Zp
bGU7CkBAIC03NzgsNiArNzc5LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2
bSwgImNsZWFyU2FtcGxpbmdGbGFncyIsIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzLCAxKTsK
ICNlbmRpZgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNoYWRvd0NoaWNrZW5GdW5jdGlvbnNP
blN0YWNrIiwgZnVuY3Rpb25TaGFkb3dDaGlja2VuRnVuY3Rpb25zT25TdGFjaywgMCk7CisgICAg
ICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90
VGhyb3ciLCBmdW5jdGlvblNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93
LCAwKTsKICAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiUm9vdCIsIGZ1bmN0
aW9uQ3JlYXRlUm9vdCwgMCk7CiAgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwg
IkVsZW1lbnQiLCBmdW5jdGlvbkNyZWF0ZUVsZW1lbnQsIDEpOwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgImdldEVsZW1lbnQiLCBmdW5jdGlvbkdldEVsZW1lbnQsIDEpOwpAQCAtMTQ5NCw2ICsx
NDk2LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TaGEKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCkuc2hhZG93Q2hpY2tlbigpLmZ1bmN0aW9u
c09uU3RhY2soZXhlYykpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uU2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3coRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIGV4ZWMtPnZtKCkuc2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxk
VGhyb3coZmFsc2UpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkbGluZShFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVmVjdG9yPGNoYXIsIDI1Nj4gbGluZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyMDAw
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjA2LDYgKzYwNiw4IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJs
ZTo6aW5pdGlhbGl6ZUcKICAgICAgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPmhhc1Byb3BlcnR5
KGV4ZWMsIGVudHJ5LmtleS5nZXQoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN5
bnRheEVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIkNhbid0IGNyZWF0ZSBkdXBsaWNhdGUgdmFyaWFi
bGUgdGhhdCBzaGFkb3dzIGEgZ2xvYmFsIHByb3BlcnR5OiAnIiwgU3RyaW5nKGVudHJ5LmtleS5n
ZXQoKSksICInIikpOwogCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZW50cnkudmFsdWUuaXND
b25zdCgpICYmICF2bS5nbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdygpICYmICFp
c1N0cmljdE1vZGUoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBp
ZiAoZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LT5oYXNQcm9wZXJ0eShleGVjLCBlbnRyeS5rZXku
Z2V0KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBt
YWtlU3RyaW5nKCJDYW4ndCBjcmVhdGUgZHVwbGljYXRlIHZhcmlhYmxlOiAnIiwgU3RyaW5nKGVu
dHJ5LmtleS5nZXQoKSksICInIikpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgJKHJldmlzaW9uIDIwMDAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw2ICs2MDIsOCBAQCBwdWJsaWM6CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0
KiwgUGFzc1JlZlB0cjxNaWNyb3Rhc2s+KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRy
YWluTWljcm90YXNrcygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coYm9vbCBnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25U
aHJvdykgeyBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93ID0gZ2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uVGhyb3c7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZ2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbENvbnN0
UmVkZWNsYXJhdGlvblNob3VsZFRocm93OyB9CiAKICAgICBpbmxpbmUgYm9vbCBzaG91bGRUcmln
Z2VyVGVybWluYXRpb24oRXhlY1N0YXRlKik7CiAKQEAgLTY2Miw2ICs2NjQsNyBAQCBwcml2YXRl
OgogICAgIEV4Y2VwdGlvbiogbV9sYXN0RXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIGJvb2wg
bV9mYWlsTmV4dE5ld0NvZGVCbG9jayB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2luRGVmaW5lT3du
UHJvcGVydHk7CisgICAgYm9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93
IHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7
IGZhbHNlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAg
ICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5n
LTIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9n
bG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nLTIuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0
aW9uLXNldHRpbmctMi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACitmdW5jdGlv
biBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQg
YXNzZXJ0aW9uLiIpOworfQorCitzZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGROb3RU
aHJvdygpOyAvLyBBbGxvdyBkdXBsaWNhdGUgY29uc3QgZGVjbGFyYXRpb25zIGF0IHRoZSBnbG9i
YWwgbGV2ZWwuCisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBsb2FkKCIu
L2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvZmlyc3QuanMiKTsKKyAgICBhc3Nl
cnQoZm9vID09PSAyMCk7CisgICAgbG9hZCgiLi9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1z
ZXR0aW5nL3NlY29uZC5qcyIpOworICAgIGFzc2VydChmb28gPT09IDQwKTsKK30KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRp
b24tc2V0dGluZy0zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy0zLmpzCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3Qt
cmVkZWNsYXJhdGlvbi1zZXR0aW5nLTMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBA
QAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQmFkIGFzc2VydGlvbi4iKTsKK30KKworc2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9u
U2hvdWxkTm90VGhyb3coKTsgLy8gQWxsb3cgZHVwbGljYXRlIGNvbnN0IGRlY2xhcmF0aW9ucyBh
dCB0aGUgZ2xvYmFsIGxldmVsLgorCitsb2FkKCIuL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9u
LXNldHRpbmcvZmlyc3QuanMiKTsKK2Fzc2VydChmb28gPT09IDIwKTsKK2xldCB0aHJldyA9IGZh
bHNlOwordHJ5IHsKKyAgICBsb2FkKCIuL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRp
bmcvc3RyaWN0LmpzIik7IC8vIFdlIGlnbm9yZSB0aGUgc2V0dGluZyBhbmQgYWx3YXlzIHRocm93
IGFuIGVycm9yIHdoZW4gaW4gc3RyaWN0IG1vZGUhCit9IGNhdGNoKGUpIHsKKyAgICB0aHJldyA9
IHRydWU7Cit9CisKK2Fzc2VydCh0aHJldyk7Cithc3NlcnQoZm9vID09PSAyMCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0
aW9uLXNldHRpbmctNC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmctNC5qcwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0
LXJlZGVjbGFyYXRpb24tc2V0dGluZy00LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgg
QEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkJhZCBhc3NlcnRpb24uIik7Cit9CisKK3NldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlv
blNob3VsZE5vdFRocm93KCk7IC8vIEFsbG93IGR1cGxpY2F0ZSBjb25zdCBkZWNsYXJhdGlvbnMg
YXQgdGhlIGdsb2JhbCBsZXZlbC4KKworbG9hZCgiLi9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlv
bi1zZXR0aW5nL2ZpcnN0LmpzIik7Cithc3NlcnQoZm9vID09PSAyMCk7CitsZXQgdGhyZXcgPSBm
YWxzZTsKK3RyeSB7CisgICAgbG9hZCgiLi9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0
aW5nL2xldC5qcyIpOyAvLyBSZWRlY2xhcmF0aW9uIGEgJ2xldCcgdmFyaWFibGUgc2hvdWxkIHRo
cm93IGJlY2F1c2UgdGhpcyBkb2Vzbid0IGJyZWFrIGJhY2t3YXJkcyBjb21wYXQuCit9IGNhdGNo
KGUpIHsKKyAgICB0aHJldyA9IHRydWU7Cit9CisKK2Fzc2VydCh0aHJldyk7Cithc3NlcnQoZm9v
ID09PSAyMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2Jh
bC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0
aW5nLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTEgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24uIik7Cit9CisKK3NldEdsb2JhbENvbnN0
UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93KCk7IC8vIEFsbG93IGR1cGxpY2F0ZSBjb25zdCBk
ZWNsYXJhdGlvbnMgYXQgdGhlIGdsb2JhbCBsZXZlbC4KKworbG9hZCgiLi9nbG9iYWwtY29uc3Qt
cmVkZWNsYXJhdGlvbi1zZXR0aW5nL2ZpcnN0LmpzIik7Cithc3NlcnQoZm9vID09PSAyMCk7Cits
b2FkKCIuL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvc2Vjb25kLmpzIik7Cith
c3NlcnQoZm9vID09PSA0MCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvZmlyc3QuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVk
ZWNsYXJhdGlvbi1zZXR0aW5nL2ZpcnN0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5n
L2ZpcnN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK2NvbnN0IGZvbyA9IDIwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVk
ZWNsYXJhdGlvbi1zZXR0aW5nL2xldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvbGV0
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9n
bG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL2xldC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxIEBACitsZXQgZm9vID0gNTA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvc2Vjb25kLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFs
LWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy9zZWNvbmQuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0
aW9uLXNldHRpbmcvc2Vjb25kLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK2NvbnN0
IGZvbyA9IDQwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9i
YWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL3N0cmljdC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0
aW9uLXNldHRpbmcvc3RyaWN0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL3N0cmlj
dC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0
IGZvbyA9IDQ1OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAwMDM3KQorKysgU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTYtMDQt
MjUgIFNhYW0gYmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSlNDIHNob3Vs
ZCBoYXZlIGFuIG9wdGlvbiB0byBhbGxvdyBnbG9iYWwgY29uc3QgcmVkZWNsYXJhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzAwNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
bWFrZXMgdGhlIEpTIFZNIG5vdCB0aHJvdyBnbG9iYWwgY29uc3QgcmVkZWNsYXJhdGlvbgorICAg
ICAgICBlcnJvcnMgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgaUJvb2tzLgorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0pOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAg
ICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzaG91
bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6
Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cpOgorICAgICAgICAoV2ViQ29yZTo6
U2V0dGluZ3M6OnNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNldHRpbmdzOjpiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg6CisKIDIwMTYt
MDQtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViIElE
TF0gU3BlY2lmeSBkZWZhdWx0IHZhbHVlcyBmb3IgcGFyYW1ldGVycyBvZiB0eXBlICd1bnNpZ25l
ZCBzaG9ydCcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmNwcAkocmV2aXNpb24gMjAwMDM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSwxNiBA
QCBWTSYgSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpCiAgICAgICAgIHZtLT5oZWFwLm1hY2hp
bmVUaHJlYWRzKCkuYWRkQ3VycmVudFRocmVhZCgpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShN
QUMpCisgICAgICAgIG5hbWVzcGFjZSBBcHBsaWNhdGlvbkNoZWNrZXIgPSBNYWNBcHBsaWNhdGlv
bjsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICAgICAgbmFtZXNwYWNlIEFwcGxpY2F0aW9uQ2hl
Y2tlciA9IElPU0FwcGxpY2F0aW9uOworI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFU
Rk9STShJT1MpCisgICAgICAgIGlmIChBcHBsaWNhdGlvbkNoZWNrZXI6OmlzSUJvb2tzKCkgfHwg
IVNldHRpbmdzOjpnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdygpKQorICAgICAg
ICAgICAgdm0tPnNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KGZhbHNlKTsK
KyNlbmRpZgorCiAgICAgICAgIGluaXROb3JtYWxXb3JsZENsaWVudERhdGEodm0pOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDIwMDAzNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5
Nyw3IEBAIGJvb2wgU2V0dGluZ3M6OmdNb2NrQ2FwdHVyZURldmljZXNFbmFibGUKIGJvb2wgU2V0
dGluZ3M6OmdTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyA9IHRydWU7CiAjZW5kaWYKICAg
ICAKK2Jvb2wgU2V0dGluZ3M6OmdHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyA9
IHRydWU7CiBib29sIFNldHRpbmdzOjpnU2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1
dGVTZXR0ZXJzID0gZmFsc2U7CiBib29sIFNldHRpbmdzOjpnTG93UG93ZXJWaWRlb0F1ZGlvQnVm
ZmVyU2l6ZUVuYWJsZWQgPSBmYWxzZTsKIGJvb2wgU2V0dGluZ3M6OmdSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZEVuYWJsZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJ
KHJldmlzaW9uIDIwMDAzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBz
aG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycygpIHsgcmV0dXJuIGdTaG91bGRVc2VIaWdoUmVz
b2x1dGlvblRpbWVyczsgfQogI2VuZGlmCiAKKyAgICBzdGF0aWMgYm9vbCBnbG9iYWxDb25zdFJl
ZGVjbGFyYXRpb25TaG91bGRUaHJvdygpIHsgcmV0dXJuIGdHbG9iYWxDb25zdFJlZGVjbGFyYXRp
b25TaG91bGRUaHJvdzsgfQorICAgIHN0YXRpYyB2b2lkIHNldEdsb2JhbENvbnN0UmVkZWNsYXJh
dGlvblNob3VsZFRocm93KGJvb2wgZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cp
IHsgZ0dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93ID0gZ2xvYmFsQ29uc3RSZWRl
Y2xhcmF0aW9uU2hvdWxkVGhyb3c7IH0KKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFj
a2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoYm9vbCk7CiAgICAgYm9vbCBiYWNrZ3JvdW5k
U2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZFNob3Vs
ZEV4dGVuZEJleW9uZFBhZ2U7IH0KIApAQCAtMzYzLDYgKzM2Niw3IEBAIHByaXZhdGU6CiAjaWYg
UExBVEZPUk0oV0lOKQogICAgIHN0YXRpYyBib29sIGdTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRp
bWVyczsKICNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdHbG9iYWxDb25z
dFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdzsKICAgICBzdGF0aWMgYm9vbCBnU2hvdWxkUmVzcGVj
dFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzOwogI2lmIFBMQVRGT1JNKElPUykKICAgICBz
dGF0aWMgYm9vbCBnTmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oCShy
ZXZpc2lvbiAyMDAwMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGlj
YXRpb25DaGVja3MuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBXRUJDT1JFX0VY
UE9SVCBib29sIGlzRGFpamlzZW5EaWN0aW9uYXJ5CiBib29sIGlzTkFTQUhEKCk7CiBXRUJDT1JF
X0VYUE9SVCBib29sIGlzVGhlRWNvbm9taXN0T25JcGhvbmUoKTsKIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaXNXZWJQcm9jZXNzKCk7Ci1ib29sIGlzSUJvb2tzKCk7CitXRUJDT1JFX0VYUE9SVCBib29s
IGlzSUJvb2tzKCk7CiAKIH0gLy8gSU9TQXBwbGljYXRpb24KIApJbmRleDogU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2
aXNpb24gMjAwMDM3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTYtMDQtMjUgIFNhYW0gYmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIGFuIG9wdGlvbiB0byBhbGxvdyBnbG9i
YWwgY29uc3QgcmVkZWNsYXJhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NzAwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTYtMDQtMjUgIERhbiBCZXJuc3Rl
aW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSBjb3VwbGUgb2YgbWlzdGFrZXMg
ZnJvbSByMTk5NzAwLgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjAwMDM3KQorKysgU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgdm9pZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjplbmNvZAogICAgIGVuY29kZXIgPDwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQ7CiAgICAgZW5jb2RlciA8PCBmb250V2hpdGVsaXN0OwogICAgIGVuY29kZXIgPDwgaWNvbkRh
dGFiYXNlRW5hYmxlZDsKKyAgICBlbmNvZGVyIDw8IGdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNo
b3VsZFRocm93OwogICAgIGVuY29kZXIgPDwgdGVybWluYXRpb25UaW1lb3V0OwogICAgIGVuY29k
ZXIgPDwgbGFuZ3VhZ2VzOwogICAgIGVuY29kZXIgPDwgdGV4dENoZWNrZXJTdGF0ZTsKQEAgLTIy
OSw2ICsyMzAsOCBAQCBib29sIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMu
aWNvbkRhdGFiYXNlRW5hYmxlZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhy
b3cpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJh
bWV0ZXJzLnRlcm1pbmF0aW9uVGltZW91dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubGFuZ3VhZ2VzKSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAko
cmV2aXNpb24gMjAwMDM3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw3IEBAIHN0cnVj
dCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8U3RyaW5nPiBmb250
V2hpdGVsaXN0OwogCiAgICAgYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkOworICAgIGJvb2wgZ2xv
YmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cgeyB0cnVlIH07CiAKICAgICBkb3VibGUg
dGVybWluYXRpb25UaW1lb3V0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMjAwMDM3KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE3Myw2ICsxNzMsMTIgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplVwogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTWVtb3J5UHJl
c3N1cmVSZWxpZWZMb2dnaW5nID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6QCJMb2dNZW1vcnlKZXRz
YW1EZXRhaWxzIl07CiAgICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJl
SGFuZGxlciA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1
cmVIYW5kbGVyRGVmYXVsdHNLZXldOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHBhcmFtZXRl
cnMuZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cgPSAhTWFjQXBwbGljYXRpb246
OmlzSUJvb2tzKCk7CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgcGFyYW1ldGVycy5nbG9iYWxD
b25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyA9ICFJT1NBcHBsaWNhdGlvbjo6aXNJQm9va3Mo
KTsKKyNlbmRpZgorCiAjaWYgSEFWRShIT1NURURfQ09SRV9BTklNQVRJT04pCiAjaWYgIVBMQVRG
T1JNKElPUykKICAgICBwYXJhbWV0ZXJzLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQb3J0ID0gTWFj
aFNlbmRSaWdodDo6Y3JlYXRlKFtDQVJlbW90ZUxheWVyU2VydmVyIHNoYXJlZFNlcnZlcl0uc2Vy
dmVyUG9ydCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJ
KHJldmlzaW9uIDIwMDAzNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNiw2ICszMzYsOCBAQCB2b2lkIFdlYlByb2Nlc3M6
OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlCiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBwYXJhbWV0
ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNBbHdheXNSZXZhbGlkYXRlZCkKICAgICAgICAgcmVn
aXN0ZXJVUkxTY2hlbWVBc0Fsd2F5c1JldmFsaWRhdGVkKHNjaGVtZSk7CiAKKyAgICBXZWJDb3Jl
OjpTZXR0aW5nczo6c2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cocGFyYW1l
dGVycy5nbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyk7CisKICNpZiBFTkFCTEUo
Q0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ2FjaGVQYXJ0aXRpb25lZCkKICAgICAgICAgcmVnaXN0ZXJV
UkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoc2NoZW1lKTsK
</data>
<flag name="review"
          id="301522"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277406</attachid>
            <date>2016-04-26 13:21:16 -0700</date>
            <delta_ts>2016-04-26 17:22:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>19658</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDAwMzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM0LDYgKzYzNCw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICNlbmRpZgogCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNoYWRvd0NoaWNrZW5GdW5jdGlv
bnNPblN0YWNrKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25TZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGROb3RUaHJvdyhFeGVj
U3RhdGUqKTsKIAogc3RydWN0IFNjcmlwdCB7CiAgICAgYm9vbCBpc0ZpbGU7CkBAIC03NzgsNiAr
Nzc5LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNsZWFyU2FtcGxp
bmdGbGFncyIsIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzLCAxKTsKICNlbmRpZgogICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgInNoYWRvd0NoaWNrZW5GdW5jdGlvbnNPblN0YWNrIiwgZnVuY3Rp
b25TaGFkb3dDaGlja2VuRnVuY3Rpb25zT25TdGFjaywgMCk7CisgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAic2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3ciLCBmdW5jdGlv
blNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93LCAwKTsKICAgICAgICAg
YWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiUm9vdCIsIGZ1bmN0aW9uQ3JlYXRlUm9vdCwg
MCk7CiAgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkVsZW1lbnQiLCBmdW5j
dGlvbkNyZWF0ZUVsZW1lbnQsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImdldEVsZW1l
bnQiLCBmdW5jdGlvbkdldEVsZW1lbnQsIDEpOwpAQCAtMTQ5NCw2ICsxNDk2LDEyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TaGEKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGV4ZWMtPnZtKCkuc2hhZG93Q2hpY2tlbigpLmZ1bmN0aW9uc09uU3RhY2soZXhlYykp
OwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0R2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIGV4
ZWMtPnZtKCkuc2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coZmFsc2UpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVmVjdG9yPGNoYXIsIDI1Nj4gbGluZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyMDAwMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjA2LDggKzYwNiwxNSBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVH
CiAgICAgICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBlbnRyeS5r
ZXkuZ2V0KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihleGVj
LCBtYWtlU3RyaW5nKCJDYW4ndCBjcmVhdGUgZHVwbGljYXRlIHZhcmlhYmxlIHRoYXQgc2hhZG93
cyBhIGdsb2JhbCBwcm9wZXJ0eTogJyIsIFN0cmluZyhlbnRyeS5rZXkuZ2V0KCkpLCAiJyIpKTsK
IAotICAgICAgICAgICAgaWYgKGdsb2JhbExleGljYWxFbnZpcm9ubWVudC0+aGFzUHJvcGVydHko
ZXhlYywgZW50cnkua2V5LmdldCgpKSkKKyAgICAgICAgICAgIGlmIChnbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQtPmhhc1Byb3BlcnR5KGV4ZWMsIGVudHJ5LmtleS5nZXQoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoZW50cnkudmFsdWUuaXNDb25zdCgpICYmICF2bS5nbG9iYWxD
b25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdygpICYmICFpc1N0cmljdE1vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyAiY29uc3QiIGR1cGxpY2F0ZSBkZWNs
YXJhdGlvbnMgdW5kZXIgdGhpcyBzZXR0aW5nLgorICAgICAgICAgICAgICAgICAgICAvLyBGb3Ig
ZXhhbXBsZSwgd2UgZG9uJ3QgImxldCIgdmFyaWFibGVzIHRvIGJlIG92ZXJyaWRkZW4gYnkgImNv
bnN0IiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQtPmlzQ29uc3RWYXJpYWJsZShlbnRyeS5rZXkuZ2V0KCkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDYW4ndCBjcmVhdGUg
ZHVwbGljYXRlIHZhcmlhYmxlOiAnIiwgU3RyaW5nKGVudHJ5LmtleS5nZXQoKSksICInIikpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgYW55IG5ldyAi
dmFyInMgd2lsbCBzaGFkb3cgYW55IHByZXZpb3VzICJsZXQiLyJjb25zdCIvImNsYXNzIiBuYW1l
cy4KQEAgLTY0Niw2ICs2NTMsMTAgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0
aWFsaXplRwogICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBnbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDog
bGV4aWNhbERlY2xhcmF0aW9ucykgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGVudHJ5LnZh
bHVlLmlzQ29uc3QoKSAmJiAhdm0uZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3co
KSAmJiAhaXNTdHJpY3RNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN5bWJvbFRhYmxl
LT5jb250YWlucyhsb2NrZXIsIGVudHJ5LmtleS5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0
ID0gc3ltYm9sVGFibGUtPnRha2VOZXh0U2NvcGVPZmZzZXQobG9ja2VyKTsKICAgICAgICAgICAg
IFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkoVmFyT2Zmc2V0KG9mZnNldCksIGVudHJ5LnZhbHVl
LmlzQ29uc3QoKSA/IFJlYWRPbmx5IDogMCk7CiAgICAgICAgICAgICBuZXdFbnRyeS5wcmVwYXJl
VG9XYXRjaCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjAwMDM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw0ICs0OSwxMSBAQCBib29sIEpTR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50OjpwdXQoSlNDCiAgICAgcmV0dXJuIHB1dFJlc3VsdDsKIH0KIAor
Ym9vbCBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudDo6aXNDb25zdFZhcmlhYmxlKFVuaXF1ZWRT
dHJpbmdJbXBsKiBpbXBsKQoreworICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xU
YWJsZSgpLT5nZXQoaW1wbCk7CisgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CisgICAgcmV0
dXJuIGVudHJ5LmlzUmVhZE9ubHkoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4
aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDIwMDAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXN5bWJvbFRhYmxlKCktPnNpemUoKTsg
fQorICAgIGJvb2wgaXNDb25zdFZhcmlhYmxlKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgCiAg
ICAgREVDTEFSRV9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJl
dmlzaW9uIDIwMDAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwMiw2ICs2MDIsOCBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxN
aWNyb3Rhc2s+KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRyYWluTWljcm90YXNrcygp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9u
U2hvdWxkVGhyb3coYm9vbCBnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25UaHJvdykgeyBtX2dsb2Jh
bENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93ID0gZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9u
VGhyb3c7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9u
U2hvdWxkVGhyb3coKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNo
b3VsZFRocm93OyB9CiAKICAgICBpbmxpbmUgYm9vbCBzaG91bGRUcmlnZ2VyVGVybWluYXRpb24o
RXhlY1N0YXRlKik7CiAKQEAgLTY2Miw2ICs2NjQsNyBAQCBwcml2YXRlOgogICAgIEV4Y2VwdGlv
biogbV9sYXN0RXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9mYWlsTmV4dE5ld0Nv
ZGVCbG9jayB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CisgICAg
Ym9vbCBtX2dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93IHsgdHJ1ZSB9OwogICAg
IGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7IGZhbHNlIH07CiAgICAg
c3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgTGVnYWN5UHJvZmls
ZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nLTIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVk
ZWNsYXJhdGlvbi1zZXR0aW5nLTIuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmctMi5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACitmdW5jdGlvbiBhc3NlcnQoYikgewor
ICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uLiIpOwor
fQorCitzZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGROb3RUaHJvdygpOyAvLyBBbGxv
dyBkdXBsaWNhdGUgY29uc3QgZGVjbGFyYXRpb25zIGF0IHRoZSBnbG9iYWwgbGV2ZWwuCisKK2Zv
ciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBsb2FkKCIuL2dsb2JhbC1jb25zdC1y
ZWRlY2xhcmF0aW9uLXNldHRpbmcvZmlyc3QuanMiKTsKKyAgICBhc3NlcnQoZm9vID09PSAyMCk7
CisgICAgbG9hZCgiLi9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL3NlY29uZC5q
cyIpOworICAgIGFzc2VydChmb28gPT09IDQwKTsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy0zLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFs
LWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy0zLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1z
ZXR0aW5nLTMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAorZnVuY3Rpb24gYXNz
ZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2Vy
dGlvbi4iKTsKK30KKworc2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3co
KTsgLy8gQWxsb3cgZHVwbGljYXRlIGNvbnN0IGRlY2xhcmF0aW9ucyBhdCB0aGUgZ2xvYmFsIGxl
dmVsLgorCitsb2FkKCIuL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvZmlyc3Qu
anMiKTsKK2Fzc2VydChmb28gPT09IDIwKTsKK2xldCB0aHJldyA9IGZhbHNlOwordHJ5IHsKKyAg
ICBsb2FkKCIuL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvc3RyaWN0LmpzIik7
IC8vIFdlIGlnbm9yZSB0aGUgc2V0dGluZyBhbmQgYWx3YXlzIHRocm93IGFuIGVycm9yIHdoZW4g
aW4gc3RyaWN0IG1vZGUhCit9IGNhdGNoKGUpIHsKKyAgICB0aHJldyA9IHRydWU7Cit9CisKK2Fz
c2VydCh0aHJldyk7Cithc3NlcnQoZm9vID09PSAyMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmctNC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2Jh
bC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmctNC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24t
c2V0dGluZy00LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTggQEAKK2Z1bmN0aW9uIGFz
c2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3Nl
cnRpb24uIik7Cit9CisKK3NldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93
KCk7IC8vIEFsbG93IGR1cGxpY2F0ZSBjb25zdCBkZWNsYXJhdGlvbnMgYXQgdGhlIGdsb2JhbCBs
ZXZlbC4KKworbG9hZCgiLi9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL2ZpcnN0
LmpzIik7Cithc3NlcnQoZm9vID09PSAyMCk7CitsZXQgdGhyZXcgPSBmYWxzZTsKK3RyeSB7Cisg
ICAgbG9hZCgiLi9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL2xldC5qcyIpOyAv
LyBSZWRlY2xhcmF0aW9uIGEgJ2xldCcgdmFyaWFibGUgc2hvdWxkIHRocm93IGJlY2F1c2UgdGhp
cyBkb2Vzbid0IGJyZWFrIGJhY2t3YXJkcyBjb21wYXQuCit9IGNhdGNoKGUpIHsKKyAgICB0aHJl
dyA9IHRydWU7Cit9CisKK2Fzc2VydCh0aHJldyk7Cithc3NlcnQoZm9vID09PSAyMCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xh
cmF0aW9uLXNldHRpbmctNS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmctNS5qcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNv
bnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy01LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTggQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24uIik7Cit9CisKK3NldEdsb2JhbENvbnN0UmVkZWNsYXJh
dGlvblNob3VsZE5vdFRocm93KCk7IC8vIEFsbG93IGR1cGxpY2F0ZSBjb25zdCBkZWNsYXJhdGlv
bnMgYXQgdGhlIGdsb2JhbCBsZXZlbC4KKworbG9hZCgiLi9nbG9iYWwtY29uc3QtcmVkZWNsYXJh
dGlvbi1zZXR0aW5nL2xldC5qcyIpOworYXNzZXJ0KGZvbyA9PT0gNTApOworbGV0IHRocmV3ID0g
ZmFsc2U7Cit0cnkgeworICAgIGxvYWQoIi4vZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0
dGluZy9maXJzdC5qcyIpOyAvLyBSZWRlY2xhcmF0aW9uIG9mIGEgJ2xldCcgdG8gJ2NvbnN0JyBz
aG91bGQgYWx3YXlzIHRocm93IGJlY2F1c2UgaXQgaXNuJ3QgYnJlYWtpbmcgYmFja3dhcmRzIGNv
bXBhdC4KK30gY2F0Y2goZSkgeworICAgIHRocmV3ID0gdHJ1ZTsKK30KKworYXNzZXJ0KHRocmV3
KTsKK2Fzc2VydChmb28gPT09IDUwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRl
Y2xhcmF0aW9uLXNldHRpbmcuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBp
ZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbi4iKTsKK30KKwor
c2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3coKTsgLy8gQWxsb3cgZHVw
bGljYXRlIGNvbnN0IGRlY2xhcmF0aW9ucyBhdCB0aGUgZ2xvYmFsIGxldmVsLgorCitsb2FkKCIu
L2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvZmlyc3QuanMiKTsKK2Fzc2VydChm
b28gPT09IDIwKTsKK2xvYWQoIi4vZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy9z
ZWNvbmQuanMiKTsKK2Fzc2VydChmb28gPT09IDQwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy9maXJz
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ds
b2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvZmlyc3QuanMJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xh
cmF0aW9uLXNldHRpbmcvZmlyc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAorY29u
c3QgZm9vID0gMjA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ds
b2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvbGV0LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRp
b24tc2V0dGluZy9sZXQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvbGV0LmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK2xldCBmb28gPSA1MDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0
dGluZy9zZWNvbmQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL3NlY29uZC5qcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNv
bnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy9zZWNvbmQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSBAQAorY29uc3QgZm9vID0gNDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvc3RyaWN0LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNv
bnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy9zdHJpY3QuanMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9u
LXNldHRpbmcvc3RyaWN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorInVzZSBz
dHJpY3QiOworY29uc3QgZm9vID0gNDU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDAwMzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MyBAQAorMjAxNi0wNC0yNSAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAg
ICAgICBKU0Mgc2hvdWxkIGhhdmUgYW4gb3B0aW9uIHRvIGFsbG93IGdsb2JhbCBjb25zdCByZWRl
Y2xhcmF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU3MDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgSlMgVk0gbm90IHRocm93IGdsb2JhbCBjb25zdCByZWRl
Y2xhcmF0aW9uCisgICAgICAgIGVycm9ycyB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpQm9va3Mu
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSk6CisgICAgICAgICogcGFnZS9TZXR0
aW5ncy5jcHA6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6
U2V0dGluZ3M6OnNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNldHRpbmdzOjpnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxk
VGhyb3cpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRl
bmRCZXlvbmRQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVj
a3MuaDoKKwogMjAxNi0wNC0yNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWIgSURMXSBTcGVjaWZ5IGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzIG9m
IHR5cGUgJ3Vuc2lnbmVkIHNob3J0JwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAyMDAwMzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjksNiArMjY5LDE2IEBAIFZNJiBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkKICAgICAgICAg
dm0tPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgbmFtZXNwYWNlIEFwcGxpY2F0aW9uQ2hlY2tlciA9
IE1hY0FwcGxpY2F0aW9uOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBuYW1lc3BhY2Ug
QXBwbGljYXRpb25DaGVja2VyID0gSU9TQXBwbGljYXRpb247CisjZW5kaWYKKyNpZiBQTEFURk9S
TShNQUMpIHx8IFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYgKEFwcGxpY2F0aW9uQ2hlY2tlcjo6
aXNJQm9va3MoKSB8fCAhU2V0dGluZ3M6Omdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRo
cm93KCkpCisgICAgICAgICAgICB2bS0+c2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxk
VGhyb3coZmFsc2UpOworI2VuZGlmCisKICAgICAgICAgaW5pdE5vcm1hbFdvcmxkQ2xpZW50RGF0
YSh2bSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNpb24g
MjAwMDM3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDYgKzk3LDcgQEAgYm9vbCBTZXR0aW5nczo6Z01vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZQogYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gdHJ1
ZTsKICNlbmRpZgogICAgIAorYm9vbCBTZXR0aW5nczo6Z0dsb2JhbENvbnN0UmVkZWNsYXJhdGlv
blNob3VsZFRocm93ID0gdHJ1ZTsKIGJvb2wgU2V0dGluZ3M6OmdTaG91bGRSZXNwZWN0UHJpb3Jp
dHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMgPSBmYWxzZTsKIGJvb2wgU2V0dGluZ3M6OmdMb3dQb3dl
clZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZCA9IGZhbHNlOwogYm9vbCBTZXR0aW5nczo6Z1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZCA9IGZhbHNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuaAkocmV2aXNpb24gMjAwMDM3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDkgQEAgcHVibGljOgogICAg
IHN0YXRpYyBib29sIHNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKCkgeyByZXR1cm4gZ1No
b3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzOyB9CiAjZW5kaWYKIAorICAgIHN0YXRpYyBib29s
IGdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KCkgeyByZXR1cm4gZ0dsb2JhbENv
bnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93OyB9CisgICAgc3RhdGljIHZvaWQgc2V0R2xvYmFs
Q29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coYm9vbCBnbG9iYWxDb25zdFJlZGVjbGFyYXRp
b25TaG91bGRUaHJvdykgeyBnR2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cgPSBn
bG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdzsgfQorCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZShib29sKTsKICAgICBi
b29sIGJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZTsgfQogCkBAIC0zNjMsNiArMzY2LDcgQEAg
cHJpdmF0ZToKICNpZiBQTEFURk9STShXSU4pCiAgICAgc3RhdGljIGJvb2wgZ1Nob3VsZFVzZUhp
Z2hSZXNvbHV0aW9uVGltZXJzOwogI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJv
b2wgZ0dsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93OwogICAgIHN0YXRpYyBib29s
IGdTaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnM7CiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIHN0YXRpYyBib29sIGdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVk
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzLmgJKHJldmlzaW9uIDIwMDAzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3
IEBAIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNEYWlqaXNlbkRpY3Rpb25hcnkKIGJvb2wgaXNOQVNB
SEQoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNUaGVFY29ub21pc3RPbklwaG9uZSgpOwogV0VC
Q09SRV9FWFBPUlQgYm9vbCBpc1dlYlByb2Nlc3MoKTsKLWJvb2wgaXNJQm9va3MoKTsKK1dFQkNP
UkVfRVhQT1JUIGJvb2wgaXNJQm9va3MoKTsKIAogfSAvLyBJT1NBcHBsaWNhdGlvbgogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMDAwMzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxNi0wNC0yNSAgU2FhbSBiYXJhdGkg
IDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYW4gb3B0aW9u
IHRvIGFsbG93IGdsb2JhbCBjb25zdCByZWRlY2xhcmF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MDA2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVdl
YlByb2Nlc3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAxNi0wNC0y
NSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBhIGNvdXBs
ZSBvZiBtaXN0YWtlcyBmcm9tIHIxOTk3MDAuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAy
MDAwMzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBAQCB2b2lkIFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kCiAgICAgZW5jb2RlciA8PCByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZDsKICAgICBlbmNvZGVyIDw8IGZvbnRXaGl0ZWxpc3Q7CiAgICAgZW5j
b2RlciA8PCBpY29uRGF0YWJhc2VFbmFibGVkOworICAgIGVuY29kZXIgPDwgZ2xvYmFsQ29uc3RS
ZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3c7CiAgICAgZW5jb2RlciA8PCB0ZXJtaW5hdGlvblRpbWVv
dXQ7CiAgICAgZW5jb2RlciA8PCBsYW5ndWFnZXM7CiAgICAgZW5jb2RlciA8PCB0ZXh0Q2hlY2tl
clN0YXRlOwpAQCAtMjI5LDYgKzIzMCw4IEBAIGJvb2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVyczo6ZGVjb2QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocGFyYW1ldGVycy5pY29uRGF0YWJhc2VFbmFibGVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5nbG9iYWxDb25zdFJlZGVjbGFy
YXRpb25TaG91bGRUaHJvdykpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHBhcmFtZXRlcnMudGVybWluYXRpb25UaW1lb3V0KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5sYW5ndWFnZXMpKQpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCShyZXZpc2lvbiAyMDAwMzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiAr
MTE1LDcgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3Rv
cjxTdHJpbmc+IGZvbnRXaGl0ZWxpc3Q7CiAKICAgICBib29sIGljb25EYXRhYmFzZUVuYWJsZWQ7
CisgICAgYm9vbCBnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyB7IHRydWUgfTsK
IAogICAgIGRvdWJsZSB0ZXJtaW5hdGlvblRpbWVvdXQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCShyZXZp
c2lvbiAyMDAwMzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3MywxMiBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVXCiAgICAgcGFyYW1ldGVycy5zaG91bGRF
bmFibGVNZW1vcnlQcmVzc3VyZVJlbGllZkxvZ2dpbmcgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpA
IkxvZ01lbW9yeUpldHNhbURldGFpbHMiXTsKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJl
c3NNZW1vcnlQcmVzc3VyZUhhbmRsZXJEZWZhdWx0c0tleV07CiAKKyNpZiBQTEFURk9STShNQUMp
CisgICAgcGFyYW1ldGVycy5nbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyA9ICFN
YWNBcHBsaWNhdGlvbjo6aXNJQm9va3MoKTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBwYXJh
bWV0ZXJzLmdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93ID0gIUlPU0FwcGxpY2F0
aW9uOjppc0lCb29rcygpOworI2VuZGlmCisKICNpZiBIQVZFKEhPU1RFRF9DT1JFX0FOSU1BVElP
TikKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIHBhcmFtZXRlcnMuYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ1BvcnQgPSBNYWNoU2VuZFJpZ2h0OjpjcmVhdGUoW0NBUmVtb3RlTGF5ZXJTZXJ2ZXIgc2hh
cmVkU2VydmVyXS5zZXJ2ZXJQb3J0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjAwMDM3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiw4IEBAIHZv
aWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2UKICAgICBmb3IgKGF1dG8mIHNj
aGVtZSA6IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0Fsd2F5c1JldmFsaWRhdGVk
KQogICAgICAgICByZWdpc3RlclVSTFNjaGVtZUFzQWx3YXlzUmV2YWxpZGF0ZWQoc2NoZW1lKTsK
IAorICAgIFdlYkNvcmU6OlNldHRpbmdzOjpzZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91
bGRUaHJvdyhwYXJhbWV0ZXJzLmdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KTsK
KwogI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNDYWNoZVBhcnRpdGlvbmVkKQogICAg
ICAgICByZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChzY2hlbWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277426</attachid>
            <date>2016-04-26 17:22:45 -0700</date>
            <delta_ts>2016-04-27 00:11:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>16409</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAwMTEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE2LTA0LTI2ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBhbiBvcHRpb24gdG8gYWxsb3cgZ2xvYmFsIGNvbnN0IHJlZGVjbGFy
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTcwMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGltcGxlbWVudHMgYW4gb3B0aW9uIHRoYXQgZGljdGF0ZXMgd2hldGhlcgorICAg
ICAgICBjb25zdCByZWRlY2xhcmF0aW9ucyBhdCB0aGUgcHJvZ3JhbSBsZXZlbCB3aWxsIHRocm93
LgorICAgICAgICBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byB0cnVlIGJ1dCBhbGxvd3MgdXNlcnMg
b2YgSlNDCisgICAgICAgIHRvIHNldCBpdCB0byBmYWxzZS4gVGhpcyBvcHRpb24gaXMgcGVyIFZN
LiBUaGlzIGlzIG5lZWRlZAorICAgICAgICBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0
aCBvdXIgb2xkIGNvbnN0IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICoganNjLmNwcDoKKyAg
ICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVuY3Rpb25T
aGFkb3dDaGlja2VuRnVuY3Rpb25zT25TdGFjayk6CisgICAgICAgIChmdW5jdGlvblNldEdsb2Jh
bENvbnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93KToKKyAgICAgICAgKGZ1bmN0aW9uUmVh
ZGxpbmUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OlByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyk6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudDo6aXNDb25zdFZhcmlhYmxlKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsTGV4
aWNhbEVudmlyb25tZW50Ojppc0VtcHR5KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAg
ICAgIChKU0M6OlZNOjpzZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyk6Cisg
ICAgICAgIChKU0M6OlZNOjpnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyk6Cisg
ICAgICAgICogdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmc6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlv
bi1zZXR0aW5nLTIuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKiB0ZXN0
cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy0zLmpzOiBBZGRlZC4K
KyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChjYXRjaCk6CisgICAgICAgICogdGVzdHMvc3Ry
ZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmctNC5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAoY2F0Y2gpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9n
bG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nLTUuanM6IEFkZGVkLgorICAgICAgICAo
YXNzZXJ0KToKKyAgICAgICAgKGNhdGNoKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZ2xvYmFs
LWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQp
OgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0
aW5nL2ZpcnN0LmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0
LXJlZGVjbGFyYXRpb24tc2V0dGluZy9sZXQuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0
cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL3NlY29uZC5qczogQWRkZWQu
CisgICAgICAgICogdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRp
bmcvc3RyaWN0LmpzOiBBZGRlZC4KKwogMjAxNi0wNC0yNiAgQmVuamFtaW4gUG91bGFpbiAgPGJw
b3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBHZXRCeVZhbCBvbiBVbmRlY2lkZWQg
dXNlIGl0cyBjaGlsZHJlbiBiZWZvcmUgaXRzIE9TUiBFeGl0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAkocmV2aXNpb24gMjAwMDM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzNCw2ICs2MzQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jCiAjZW5kaWYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25TaGFkb3dDaGlja2VuRnVuY3Rpb25zT25TdGFjayhFeGVjU3RhdGUq
KTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0R2xvYmFs
Q29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3coRXhlY1N0YXRlKik7CiAKIHN0cnVjdCBT
Y3JpcHQgewogICAgIGJvb2wgaXNGaWxlOwpAQCAtNzc4LDYgKzc3OSw3IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjbGVhclNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvbkNs
ZWFyU2FtcGxpbmdGbGFncywgMSk7CiAjZW5kaWYKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJz
aGFkb3dDaGlja2VuRnVuY3Rpb25zT25TdGFjayIsIGZ1bmN0aW9uU2hhZG93Q2hpY2tlbkZ1bmN0
aW9uc09uU3RhY2ssIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNldEdsb2JhbENvbnN0
UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93IiwgZnVuY3Rpb25TZXRHbG9iYWxDb25zdFJlZGVj
bGFyYXRpb25TaG91bGROb3RUaHJvdywgMCk7CiAgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5j
dGlvbih2bSwgIlJvb3QiLCBmdW5jdGlvbkNyZWF0ZVJvb3QsIDApOwogICAgICAgICBhZGRDb25z
dHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJFbGVtZW50IiwgZnVuY3Rpb25DcmVhdGVFbGVtZW50LCAx
KTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJnZXRFbGVtZW50IiwgZnVuY3Rpb25HZXRFbGVt
ZW50LCAxKTsKQEAgLTE0OTQsNiArMTQ5NiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uU2hhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnNo
YWRvd0NoaWNrZW4oKS5mdW5jdGlvbnNPblN0YWNrKGV4ZWMpKTsKIH0KIAorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3Vs
ZE5vdFRocm93KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBleGVjLT52bSgpLnNldEdsb2JhbENv
bnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KGZhbHNlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZlY3RvcjxjaGFyLCAy
NTY+IGxpbmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAkocmV2aXNpb24gMjAwMDM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNiw4ICs2MDYsMTUgQEAgSlNP
YmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplRwogICAgICAgICAgICAgaWYgKGds
b2JhbE9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgZW50cnkua2V5LmdldCgpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgbWFrZVN0cmluZygiQ2FuJ3Qg
Y3JlYXRlIGR1cGxpY2F0ZSB2YXJpYWJsZSB0aGF0IHNoYWRvd3MgYSBnbG9iYWwgcHJvcGVydHk6
ICciLCBTdHJpbmcoZW50cnkua2V5LmdldCgpKSwgIiciKSk7CiAKLSAgICAgICAgICAgIGlmIChn
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQtPmhhc1Byb3BlcnR5KGV4ZWMsIGVudHJ5LmtleS5nZXQo
KSkpCisgICAgICAgICAgICBpZiAoZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LT5oYXNQcm9wZXJ0
eShleGVjLCBlbnRyeS5rZXkuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KGVudHJ5LnZhbHVlLmlzQ29uc3QoKSAmJiAhdm0uZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hv
dWxkVGhyb3coKSAmJiAhaXNTdHJpY3RNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFdlIG9ubHkgYWxsb3cgImNvbnN0IiBkdXBsaWNhdGUgZGVjbGFyYXRpb25zIHVuZGVyIHRoaXMg
c2V0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIHdlIGRvbid0ICJs
ZXQiIHZhcmlhYmxlcyB0byBiZSBvdmVycmlkZGVuIGJ5ICJjb25zdCIgdmFyaWFibGVzLgorICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LT5pc0NvbnN0VmFy
aWFibGUoZW50cnkua2V5LmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlU3ludGF4
RXJyb3IoZXhlYywgbWFrZVN0cmluZygiQ2FuJ3QgY3JlYXRlIGR1cGxpY2F0ZSB2YXJpYWJsZTog
JyIsIFN0cmluZyhlbnRyeS5rZXkuZ2V0KCkpLCAiJyIpKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCiAgICAgICAgIC8vIENoZWNrIGlmIGFueSBuZXcgInZhciJzIHdpbGwgc2hhZG93IGFu
eSBwcmV2aW91cyAibGV0Ii8iY29uc3QiLyJjbGFzcyIgbmFtZXMuCkBAIC02NDYsNiArNjUzLDEw
IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUcKICAgICAgICAgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0gZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xU
YWJsZSgpOwogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+
bV9sb2NrKTsKICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGxleGljYWxEZWNsYXJhdGlvbnMp
IHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShlbnRyeS52YWx1ZS5pc0NvbnN0KCkgJiYgIXZt
Lmdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KCkgJiYgIWlzU3RyaWN0TW9kZSgp
KSkgeworICAgICAgICAgICAgICAgIGlmIChzeW1ib2xUYWJsZS0+Y29udGFpbnMobG9ja2VyLCBl
bnRyeS5rZXkuZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IHN5bWJvbFRhYmxlLT50YWtl
TmV4dFNjb3BlT2Zmc2V0KGxvY2tlcik7CiAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IG5l
d0VudHJ5KFZhck9mZnNldChvZmZzZXQpLCBlbnRyeS52YWx1ZS5pc0NvbnN0KCkgPyBSZWFkT25s
eSA6IDApOwogICAgICAgICAgICAgbmV3RW50cnkucHJlcGFyZVRvV2F0Y2goKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExl
eGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDIwMDAzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksNCArNDksMTEgQEAgYm9vbCBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudDo6
cHV0KEpTQwogICAgIHJldHVybiBwdXRSZXN1bHQ7CiB9CiAKK2Jvb2wgSlNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQ6OmlzQ29uc3RWYXJpYWJsZShVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkKK3sK
KyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS0+Z2V0KGltcGwpOwor
ICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOworICAgIHJldHVybiBlbnRyeS5pc1JlYWRPbmx5
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCShy
ZXZpc2lvbiAyMDAwMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuICFzeW1ib2xUYWJsZSgpLT5zaXplKCk7IH0KKyAgICBib29sIGlzQ29uc3RW
YXJpYWJsZShVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIAogICAgIERFQ0xBUkVfSU5GTzsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDAwMzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDIs
NiArNjAyLDggQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBxdWV1ZU1p
Y3JvdGFzayhKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8TWljcm90YXNrPik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkcmFpbk1pY3JvdGFza3MoKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldEdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KGJvb2wgZ2xv
YmFsQ29uc3RSZWRlY2xhcmF0aW9uVGhyb3cpIHsgbV9nbG9iYWxDb25zdFJlZGVjbGFyYXRpb25T
aG91bGRUaHJvdyA9IGdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblRocm93OyB9CisgICAgQUxXQVlT
X0lOTElORSBib29sIGdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KCkgY29uc3Qg
eyByZXR1cm4gbV9nbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdzsgfQogCiAgICAg
aW5saW5lIGJvb2wgc2hvdWxkVHJpZ2dlclRlcm1pbmF0aW9uKEV4ZWNTdGF0ZSopOwogCkBAIC02
NjIsNiArNjY0LDcgQEAgcHJpdmF0ZToKICAgICBFeGNlcHRpb24qIG1fbGFzdEV4Y2VwdGlvbiB7
IG51bGxwdHIgfTsKICAgICBib29sIG1fZmFpbE5leHROZXdDb2RlQmxvY2sgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5OworICAgIGJvb2wgbV9nbG9iYWxDb25zdFJl
ZGVjbGFyYXRpb25TaG91bGRUaHJvdyB7IHRydWUgfTsKICAgICBib29sIG1fc2hvdWxkQnVpbGRQ
Q1RvQ29kZU9yaWdpbk1hcHBpbmcgeyBmYWxzZSB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2Rl
Q2FjaGU+IG1fY29kZUNhY2hlOwogICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxl
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0
LXJlZGVjbGFyYXRpb24tc2V0dGluZy0yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy0y
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9n
bG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nLTIuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMyBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbi4iKTsKK30KKworc2V0R2xvYmFsQ29uc3RS
ZWRlY2xhcmF0aW9uU2hvdWxkTm90VGhyb3coKTsgLy8gQWxsb3cgZHVwbGljYXRlIGNvbnN0IGRl
Y2xhcmF0aW9ucyBhdCB0aGUgZ2xvYmFsIGxldmVsLgorCitmb3IgKGxldCBpID0gMDsgaSA8IDEw
MDsgaSsrKSB7CisgICAgbG9hZCgiLi9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5n
L2ZpcnN0LmpzIik7CisgICAgYXNzZXJ0KGZvbyA9PT0gMjApOworICAgIGxvYWQoIi4vZ2xvYmFs
LWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy9zZWNvbmQuanMiKTsKKyAgICBhc3NlcnQoZm9v
ID09PSA0MCk7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ds
b2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmctMy5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9u
LXNldHRpbmctMy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy0zLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTggQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFi
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24uIik7Cit9CisKK3NldEds
b2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZE5vdFRocm93KCk7IC8vIEFsbG93IGR1cGxpY2F0
ZSBjb25zdCBkZWNsYXJhdGlvbnMgYXQgdGhlIGdsb2JhbCBsZXZlbC4KKworbG9hZCgiLi9nbG9i
YWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL2ZpcnN0LmpzIik7Cithc3NlcnQoZm9vID09
PSAyMCk7CitsZXQgdGhyZXcgPSBmYWxzZTsKK3RyeSB7CisgICAgbG9hZCgiLi9nbG9iYWwtY29u
c3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL3N0cmljdC5qcyIpOyAvLyBXZSBpZ25vcmUgdGhlIHNl
dHRpbmcgYW5kIGFsd2F5cyB0aHJvdyBhbiBlcnJvciB3aGVuIGluIHN0cmljdCBtb2RlIQorfSBj
YXRjaChlKSB7CisgICAgdGhyZXcgPSB0cnVlOworfQorCithc3NlcnQodGhyZXcpOworYXNzZXJ0
KGZvbyA9PT0gMjApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9n
bG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nLTQuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlv
bi1zZXR0aW5nLTQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmctNC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICgh
YikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uLiIpOworfQorCitzZXRH
bG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGROb3RUaHJvdygpOyAvLyBBbGxvdyBkdXBsaWNh
dGUgY29uc3QgZGVjbGFyYXRpb25zIGF0IHRoZSBnbG9iYWwgbGV2ZWwuCisKK2xvYWQoIi4vZ2xv
YmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy9maXJzdC5qcyIpOworYXNzZXJ0KGZvbyA9
PT0gMjApOworbGV0IHRocmV3ID0gZmFsc2U7Cit0cnkgeworICAgIGxvYWQoIi4vZ2xvYmFsLWNv
bnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy9sZXQuanMiKTsgLy8gUmVkZWNsYXJhdGlvbiBhICds
ZXQnIHZhcmlhYmxlIHNob3VsZCB0aHJvdyBiZWNhdXNlIHRoaXMgZG9lc24ndCBicmVhayBiYWNr
d2FyZHMgY29tcGF0LgorfSBjYXRjaChlKSB7CisgICAgdGhyZXcgPSB0cnVlOworfQorCithc3Nl
cnQodGhyZXcpOworYXNzZXJ0KGZvbyA9PT0gMjApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nLTUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwt
Y29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nLTUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNl
dHRpbmctNS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBhc3Nl
cnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0
aW9uLiIpOworfQorCitzZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGROb3RUaHJvdygp
OyAvLyBBbGxvdyBkdXBsaWNhdGUgY29uc3QgZGVjbGFyYXRpb25zIGF0IHRoZSBnbG9iYWwgbGV2
ZWwuCisKK2xvYWQoIi4vZ2xvYmFsLWNvbnN0LXJlZGVjbGFyYXRpb24tc2V0dGluZy9sZXQuanMi
KTsKK2Fzc2VydChmb28gPT09IDUwKTsKK2xldCB0aHJldyA9IGZhbHNlOwordHJ5IHsKKyAgICBs
b2FkKCIuL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvZmlyc3QuanMiKTsgLy8g
UmVkZWNsYXJhdGlvbiBvZiBhICdsZXQnIHRvICdjb25zdCcgc2hvdWxkIGFsd2F5cyB0aHJvdyBi
ZWNhdXNlIGl0IGlzbid0IGJyZWFraW5nIGJhY2t3YXJkcyBjb21wYXQuCit9IGNhdGNoKGUpIHsK
KyAgICB0aHJldyA9IHRydWU7Cit9CisKK2Fzc2VydCh0aHJldyk7Cithc3NlcnQoZm9vID09PSA1
MCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25z
dC1yZWRlY2xhcmF0aW9uLXNldHRpbmcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nLmpz
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9i
YWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTEgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24uIik7Cit9CisKK3NldEdsb2JhbENvbnN0UmVkZWNs
YXJhdGlvblNob3VsZE5vdFRocm93KCk7IC8vIEFsbG93IGR1cGxpY2F0ZSBjb25zdCBkZWNsYXJh
dGlvbnMgYXQgdGhlIGdsb2JhbCBsZXZlbC4KKworbG9hZCgiLi9nbG9iYWwtY29uc3QtcmVkZWNs
YXJhdGlvbi1zZXR0aW5nL2ZpcnN0LmpzIik7Cithc3NlcnQoZm9vID09PSAyMCk7Citsb2FkKCIu
L2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvc2Vjb25kLmpzIik7Cithc3NlcnQo
Zm9vID09PSA0MCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ds
b2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvZmlyc3QuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJh
dGlvbi1zZXR0aW5nL2ZpcnN0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL2ZpcnN0
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK2NvbnN0IGZvbyA9IDIwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJh
dGlvbi1zZXR0aW5nL2xldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvbGV0LmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwt
Y29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL2xldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxIEBACitsZXQgZm9vID0gNTA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNldHRpbmcvc2Vjb25kLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2xvYmFsLWNvbnN0
LXJlZGVjbGFyYXRpb24tc2V0dGluZy9zZWNvbmQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNl
dHRpbmcvc2Vjb25kLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK2NvbnN0IGZvbyA9
IDQwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nbG9iYWwtY29u
c3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL3N0cmljdC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dsb2JhbC1jb25zdC1yZWRlY2xhcmF0aW9uLXNl
dHRpbmcvc3RyaWN0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9nbG9iYWwtY29uc3QtcmVkZWNsYXJhdGlvbi1zZXR0aW5nL3N0cmljdC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKyJ1c2Ugc3RyaWN0IjsKK2NvbnN0IGZvbyA9
IDQ1OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAwMDM3KQorKysgU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTYtMDQtMjYgIFNh
YW0gYmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZl
IGFuIG9wdGlvbiB0byBhbGxvdyBnbG9iYWwgY29uc3QgcmVkZWNsYXJhdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzAwNgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMg
dGhlIEpTIFZNIG5vdCB0aHJvdyBnbG9iYWwgY29uc3QgcmVkZWNsYXJhdGlvbgorICAgICAgICBl
cnJvcnMgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgaUJvb2tzLgorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0pOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNldHRpbmdzOjpzaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3cp
OgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlv
bmRQYWdlKToKKwogMjAxNi0wNC0yNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFtXZWIgSURMXSBTcGVjaWZ5IGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJz
IG9mIHR5cGUgJ3Vuc2lnbmVkIHNob3J0JwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAyMDAwMzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjksNiArMjY5LDggQEAgVk0mIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKQogICAgICAg
ICB2bS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKICNlbmRpZgog
CisgICAgICAgIHZtLT5zZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyhTZXR0
aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKSk7CisKICAgICAgICAg
aW5pdE5vcm1hbFdvcmxkQ2xpZW50RGF0YSh2bSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5oCShyZXZpc2lvbiAyMDAwMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kuaCIKICNpbmNsdWRlICJFZGl0aW5nQmVoYXZpb3JUeXBlcy5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzTWFjcm9zLmgi
CiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCkBAIC0xODMsNiArMTg0LDE3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgYm9vbCBzaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycygpIHsgcmV0dXJuIGdT
aG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVyczsgfQogI2VuZGlmCiAKKyAgICBzdGF0aWMgYm9v
bCBnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdygpCisgICAgeyAKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgICAgIHJldHVybiAhTWFjQXBwbGljYXRpb246OmlzSUJvb2tzKCk7Cisj
ZWxpZiBQTEFURk9STShJT1MpCisgICAgICAgIHJldHVybiAhSU9TQXBwbGljYXRpb246OmlzSUJv
b2tzKCk7CisjZWxzZQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgIH0KKwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2Uo
Ym9vbCk7CiAgICAgYm9vbCBiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2U7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277538</attachid>
            <date>2016-04-27 14:51:51 -0700</date>
            <delta_ts>2016-04-27 14:51:51 -0700</delta_ts>
            <desc>follow up to move implementation to cpp file</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>2799</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDE1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA0LTI3ICBTYWFtIGJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEZvbGxvdyB1cCB0bzogSlNDIHNo
b3VsZCBoYXZlIGFuIG9wdGlvbiB0byBhbGxvdyBnbG9iYWwgY29uc3QgcmVkZWNsYXJhdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzAwNgor
CisgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIE1v
dmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIFNldHRpbmdzOjpnbG9iYWxDb25zdFJlZGVjbGFyYXRp
b25TaG91bGRUaHJvdworICAgICAgICBpbnRvIHRoZSBjcHAgZmlsZS4KKworICAgICAgICAqIHBh
Z2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6Om5ldHdvcmtJbnRl
cmZhY2VOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpnbG9iYWxDb25zdFJlZGVj
bGFyYXRpb25TaG91bGRUaHJvdyk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9u
U2hvdWxkVGhyb3cpOiBEZWxldGVkLgorCiAyMDE2LTA0LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgU3BlY3VsYXRpdmUgZml4IGZvciBudWxsIHBvaW50ZXIg
ZGVyZWZlcmVuY2UuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNpb24gMjAw
MTUyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCisjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgogI2luY2x1ZGUgIlRleHRBdXRvc2l6
ZXIuaCIKICNpbmNsdWRlIDxsaW1pdHM+CkBAIC03NTcsNCArNzU4LDE1IEBAIGNvbnN0IFN0cmlu
ZyYgU2V0dGluZ3M6Om5ldHdvcmtJbnRlcmZhY2UKIH0KICNlbmRpZgogCitib29sIFNldHRpbmdz
OjpnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdygpCit7CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIHJldHVybiAhTWFjQXBwbGljYXRpb246OmlzSUJvb2tzKCk7CisjZWxpZiBQTEFU
Rk9STShJT1MpCisgICAgcmV0dXJuICFJT1NBcHBsaWNhdGlvbjo6aXNJQm9va3MoKTsKKyNlbHNl
CisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2aXNpb24gMjAwMTUyKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAj
aW5jbHVkZSAiQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmgiCiAjaW5jbHVkZSAiRWRpdGluZ0JlaGF2
aW9yVHlwZXMuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJT
ZXR0aW5nc01hY3Jvcy5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgpAQCAtMTkwLDE2ICsxODks
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1l
cnMoKSB7IHJldHVybiBnU2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnM7IH0KICNlbmRpZgog
Ci0gICAgc3RhdGljIGJvb2wgZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKQot
ICAgIHsgCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICByZXR1cm4gIU1hY0FwcGxpY2F0aW9u
Ojppc0lCb29rcygpOwotI2VsaWYgUExBVEZPUk0oSU9TKQotICAgICAgICByZXR1cm4gIUlPU0Fw
cGxpY2F0aW9uOjppc0lCb29rcygpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5k
aWYKLSAgICB9CisgICAgc3RhdGljIGJvb2wgZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxk
VGhyb3coKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZFNob3VsZEV4
dGVuZEJleW9uZFBhZ2UoYm9vbCk7CiAgICAgYm9vbCBiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5
b25kUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2U7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>