<?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>209063</bug_id>
          
          <creation_ts>2020-03-13 10:30:44 -0700</creation_ts>
          <short_desc>Gather PDF scripts to run on a background thread</short_desc>
          <delta_ts>2020-03-14 15:17:11 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1629679</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-13 10:30:44 -0700</bug_when>
    <thetext>When doing incremental PDF loading, gather PDF scripts to run on a background thread

&lt;rdar://problem/60422027&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629681</commentid>
    <comment_count>1</comment_count>
      <attachid>393500</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-13 10:32:09 -0700</bug_when>
    <thetext>Created attachment 393500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629712</commentid>
    <comment_count>2</comment_count>
      <attachid>393500</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-03-13 11:11:17 -0700</bug_when>
    <thetext>Comment on attachment 393500
Patch

Looks like this needs a rebase to run in EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629724</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-13 11:24:55 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #2)
&gt; Comment on attachment 393500 [details]
&gt; Patch
&gt; 
&gt; Looks like this needs a rebase to run in EWS.

Yup, confirming I build locally before I upload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629729</commentid>
    <comment_count>4</comment_count>
      <attachid>393510</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-13 11:31:06 -0700</bug_when>
    <thetext>Created attachment 393510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629739</commentid>
    <comment_count>5</comment_count>
      <attachid>393510</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-03-13 11:50:50 -0700</bug_when>
    <thetext>Comment on attachment 393510
Patch

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

&gt; Source/WebKit/ChangeLog:3
&gt; +        Gather PDF scripts to run on a background thread.

Why do we need to do this? Is it because we might block if the PDF is still loading?

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1563
&gt; +void PDFPlugin::maybeRunScriptsInPDFDocument()

=&gt; runScriptsInPDFDocumentIfNeeded

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1572
&gt; +    auto completionHandler = [this, protectedThis = makeRef(*this)] (Vector&lt;RetainPtr&lt;CFStringRef&gt;&gt;&amp; scripts) mutable {

Let&apos;s make this Vector&amp; a Vector&amp;&amp; -- that&apos;s a better proof of thread safety, I think, since it means you&apos;re the single owner.

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1576
&gt; +        JSGlobalContextRef ctx = JSGlobalContextCreate(0);

nullptr

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1579
&gt; +            JSEvaluateScript(ctx, OpaqueJSString::tryCreate(script.get()).get(), jsPDFDoc, nullptr, 0, nullptr);

0 =&gt; 1 (it&apos;s a line number)

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1587
&gt; +    auto&amp; rawQueue = scriptUtilityQueue.get();
&gt; +    auto documentRef = [m_pdfDocument documentRef];
&gt; +    rawQueue.dispatch([scriptUtilityQueue = WTFMove(scriptUtilityQueue), completionHandler = WTFMove(completionHandler), documentRef] () mutable {

Can we do scriptUtilityQueue-&gt; instead of rawQueue.? Less verbose if so.

Can we capture a RetainPtr instead of (what appears to be) a raw pointer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629878</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-13 15:25:50 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #5)
&gt; Comment on attachment 393510 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393510&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:3
&gt; &gt; +        Gather PDF scripts to run on a background thread.
&gt; 
&gt; Why do we need to do this? Is it because we might block if the PDF is still
&gt; loading?

Will clarify in new ChangeLog

&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1563
&gt; &gt; +void PDFPlugin::maybeRunScriptsInPDFDocument()
&gt; 
&gt; =&gt; runScriptsInPDFDocumentIfNeeded
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1572
&gt; &gt; +    auto completionHandler = [this, protectedThis = makeRef(*this)] (Vector&lt;RetainPtr&lt;CFStringRef&gt;&gt;&amp; scripts) mutable {
&gt; 
&gt; Let&apos;s make this Vector&amp; a Vector&amp;&amp; -- that&apos;s a better proof of thread
&gt; safety, I think, since it means you&apos;re the single owner.
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1576
&gt; &gt; +        JSGlobalContextRef ctx = JSGlobalContextCreate(0);
&gt; 
&gt; nullptr
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1579
&gt; &gt; +            JSEvaluateScript(ctx, OpaqueJSString::tryCreate(script.get()).get(), jsPDFDoc, nullptr, 0, nullptr);
&gt; 
&gt; 0 =&gt; 1 (it&apos;s a line number)
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1587
&gt; &gt; +    auto&amp; rawQueue = scriptUtilityQueue.get();
&gt; &gt; +    auto documentRef = [m_pdfDocument documentRef];
&gt; &gt; +    rawQueue.dispatch([scriptUtilityQueue = WTFMove(scriptUtilityQueue), completionHandler = WTFMove(completionHandler), documentRef] () mutable {
&gt; 
&gt; Can we do scriptUtilityQueue-&gt; instead of rawQueue.? Less verbose if so.

No, because the WTFMove for the capture happens before the call.

&gt; Can we capture a RetainPtr instead of (what appears to be) a raw pointer?

In practice not necessary because the m_pdfDocument will always be alive because the PDFPlugin will be too.

But adding it makes that more explicit, so I will.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629894</commentid>
    <comment_count>7</comment_count>
      <attachid>393542</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-13 15:39:30 -0700</bug_when>
    <thetext>Created attachment 393542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629902</commentid>
    <comment_count>8</comment_count>
      <attachid>393545</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-13 15:45:30 -0700</bug_when>
    <thetext>Created attachment 393545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629949</commentid>
    <comment_count>9</comment_count>
      <attachid>393545</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-03-13 17:00:20 -0700</bug_when>
    <thetext>Comment on attachment 393545
Patch

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

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1453
&gt; +    if (m_documentFinishedLoading)
&gt; +        runScriptsInPDFDocumentIfNeeded();

Can we just run scripts at the end of pdfDocumentDidLoad() in all cases?

That seems like the most natural time. And it removes the complexity of tracking whether we have run scripts already or not. If it&apos;s sometimes not possible to run scripts at the end of pdfDocumentDidLoad(), then I wonder why it&apos;s sometimes OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629996</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-13 20:38:58 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #9)
&gt; Comment on attachment 393545 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393545&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1453
&gt; &gt; +    if (m_documentFinishedLoading)
&gt; &gt; +        runScriptsInPDFDocumentIfNeeded();
&gt; 
&gt; Can we just run scripts at the end of pdfDocumentDidLoad() in all cases?
&gt; 
&gt; That seems like the most natural time. And it removes the complexity of
&gt; tracking whether we have run scripts already or not. If it&apos;s sometimes not
&gt; possible to run scripts at the end of pdfDocumentDidLoad(), then I wonder
&gt; why it&apos;s sometimes OK.

pdfDocumentDidLoad() is an old method name from the &quot;synchronously create the document at the end&quot; days.

It could be renamed to &quot;documentDataDidFinishLoading()&quot;

You need two things to be true to run scripts:
1 - You need all document data to have finished loading
2 - The PDFDocument needs to have been created.

In the new model, the main thread *can* finish loading all of the data for the document, while the original background PDF thread might not have finished creating the PDFDocument yet.

That&apos;s why there are two places that &quot;runScriptsInPDFDocumentIfNeeded&quot;:
1 - When the document data finishes loading (assuming the PDFDocument has also been created)
2 - When the PDFDocument has been created (assuming we also have all the document data)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630076</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-03-14 13:13:35 -0700</bug_when>
    <thetext>&gt; You need two things to be true to run scripts:
&gt; 1 - You need all document data to have finished loading
&gt; 2 - The PDFDocument needs to have been created.

Given these requirements, how about this design:

1. Change runScriptsInPDFDocument() to tryRunScriptsInPDFDocument()

1a. tryRunScriptsInPDFDocument returns early if m_pdfDocument is null or m_documentFinishedLoading is false

2. PDFPlugin::pdfDocumentDidLoad() calls tryRunScriptsInPDFDocument() unconditionally at the end

3. adoptBackgroundThreadDocument() calls tryRunScriptsInPDFDocument() unconditionally at the end

I think this design might be better because I think it directly encodes the requirements you&apos;ve described: tryRunScriptsInPDFDocument() only runs if both conditions are true, and each function that changes one of the conditions calls tryRunScriptsInPDFDocument() directly. It also avoids an extra piece of state.

(The patch you&apos;ve written is good at demonstrating that it never runs scripts twice, but not as good at demonstrating that it runs scripts more than zero times.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630083</commentid>
    <comment_count>12</comment_count>
      <attachid>393590</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-14 13:47:28 -0700</bug_when>
    <thetext>Created attachment 393590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630087</commentid>
    <comment_count>13</comment_count>
      <attachid>393590</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-03-14 13:55:49 -0700</bug_when>
    <thetext>Comment on attachment 393590
Patch

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

r=me

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1564
&gt; +    ASSERT(m_documentFinishedLoading);

I think this assert is no longer valid?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630090</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-14 14:01:02 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #13)
&gt; Comment on attachment 393590 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393590&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1564
&gt; &gt; +    ASSERT(m_documentFinishedLoading);
&gt; 
&gt; I think this assert is no longer valid?

Amazing you called that out right after I ran into it in testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630093</commentid>
    <comment_count>15</comment_count>
      <attachid>393592</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-14 14:04:01 -0700</bug_when>
    <thetext>Created attachment 393592
PFL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630102</commentid>
    <comment_count>16</comment_count>
      <attachid>393592</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-14 15:17:09 -0700</bug_when>
    <thetext>Comment on attachment 393592
PFL

Clearing flags on attachment: 393592

Committed r258474: &lt;https://trac.webkit.org/changeset/258474&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630103</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-14 15:17:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393500</attachid>
            <date>2020-03-13 10:32:09 -0700</date>
            <delta_ts>2020-03-13 11:31:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>pat</filename>
            <type>text/plain</type>
            <size>5542</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNTVmNWJiMjZiNmMuLjQ2ZTg3N2NhMzk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDIwLTAzLTEzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBHYXRoZXIgUERGIHNjcmlwdHMgdG8gcnVuIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkwNjMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dGhyZWFk
RW50cnkpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNv
bXBsZXRlV2l0aEFjY3VtdWxhdGVkRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
cGRmRG9jdW1lbnREaWRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjppbnN0YWxs
UERGRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1heWJlUnVuU2NyaXB0
c0luUERGRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnJ1blNjcmlwdHNJ
blBERkRvY3VtZW50KTogRGVsZXRlZC4KKwogMjAyMC0wMy0xMSAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgdmVyeSB2ZXJib3NlIGxvZ2dpbmcgbW9k
ZSBmb3IgaW5jcmVtZW50YWwgUERGIGxvYWRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAppbmRleCAzZWU1MzRkNzViZC4uMTYzNTBiMzcy
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLmgKQEAgLTI1MSw3ICsyNTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5zdGFsbFBERkRv
Y3VtZW50KCk7CiAgICAgdm9pZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKICAgICB2b2lkIGNhbGN1
bGF0ZVNpemVzKCk7Ci0gICAgdm9pZCBydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOworICAgIHZv
aWQgbWF5YmVSdW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOwogCiAgICAgTlNFdmVudCAqbnNFdmVu
dEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwogICAgIFdlYkNvcmU6Oklu
dFBvaW50IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JikgY29uc3Q7CkBAIC0zMjQsNiArMzI0LDcgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8UERG
RG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7CiAKICAgICBib29sIG1fZG9jdW1lbnRGaW5pc2hlZExv
YWRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNSdW5Eb2N1bWVudFNjcmlwdHMgeyBmYWxz
ZSB9OwogICAgIHVuc2lnbmVkIG1fZmlyc3RQYWdlSGVpZ2h0IHsgMCB9OwogICAgIFdlYkNvcmU6
OkludFNpemUgbV9wZGZEb2N1bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMu
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2lu
Lm1tCmluZGV4IDg1ZTM4NTRjMjA5Li44YTQ1N2U4YWU5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC04MDUsNyArODA1LDcg
QEAgdm9pZCBQREZQbHVnaW46OnRocmVhZEVudHJ5KFJlZjxQREZQbHVnaW4+JiYgcHJvdGVjdGVk
UGx1Z2luKQogCiAgICAgZmlyc3RQYWdlU2VtYXBob3JlLndhaXQoKTsKIAotICAgIHBkZkxvZygi
RmluaW5pc2hlZCBwcmVsb2FkaW5nIGZpcnN0IHBhZ2UiKTsKKyAgICBwZGZMb2coIkZpbmlzaGVk
IHByZWxvYWRpbmcgZmlyc3QgcGFnZSIpOwogCiAgICAgLy8gVGhlIG1haW4gdGhyZWFkIGRpc3Bh
dGNoIGJlbG93IHJlbW92ZXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBQREYgdGhyZWFkLgog
ICAgIC8vIEl0IG11c3QgYmUgdGhlIGxhc3QgY29kZSBleGVjdXRlZCBpbiB0aGlzIGZ1bmN0aW9u
LgpAQCAtOTIxLDcgKzkyMSw3IEBAIHZvaWQgUERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpj
b21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEoUERGUGx1Z2luJiBwbHVnaW4pCiAjZW5kaWYKIAog
ICAgIG1fY29tcGxldGlvbkhhbmRsZXIobV9hY2N1bXVsYXRlZERhdGEuZGF0YSgpLCBtX2FjY3Vt
dWxhdGVkRGF0YS5zaXplKCkpOwotICAgIAorCiAgICAgaWYgKG1fc3RyZWFtTG9hZGVyKQogICAg
ICAgICBwbHVnaW4uZm9yZ2V0TG9hZGVyKCptX3N0cmVhbUxvYWRlcik7CiAKQEAgLTE0MTYsNiAr
MTQxNiw5IEBAIHZvaWQgUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQogICAgIGlmICht
X2luY3JlbWVudGFsUERGTG9hZGluZ0VuYWJsZWQpIHsKICAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCB3ZSBrbm93IGFsbCBkYXRhIGZvciB0aGUgZG9jdW1lbnQsIGFuZCB0aGVyZWZvcmUgd2Uga25v
dyBob3cgdG8gYW5zd2VyIGFueSBvdXRzdGFuZGluZyByYW5nZSByZXF1ZXN0cy4KICAgICAgICAg
dW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3RhbmRpbmdSYW5nZVJlcXVlc3RzKCk7CisKKyAgICAg
ICAgaWYgKG1fcGRmRG9jdW1lbnQpCisgICAgICAgICAgICBtYXliZVJ1blNjcmlwdHNJblBERkRv
Y3VtZW50KCk7CiAgICAgfSBlbHNlCiAjZW5kaWYKICAgICB7CkBAIC0xNDQyLDcgKzE0NDUsOCBA
QCB2b2lkIFBERlBsdWdpbjo6aW5zdGFsbFBERkRvY3VtZW50KCkKICAgICBjYWxjdWxhdGVTaXpl
cygpOwogICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKIAotICAgIHJ1blNjcmlwdHNJblBERkRvY3Vt
ZW50KCk7CisgICAgaWYgKG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcpCisgICAgICAgIG1heWJl
UnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKIAogICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xv
Y2tlZF0pCiAgICAgICAgIGNyZWF0ZVBhc3N3b3JkRW50cnlGb3JtKCk7CkBAIC0xNTUyLDE5ICsx
NTU2LDQ1IEBAIHZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wpCiAjZW5k
aWYKIH0KIAotdm9pZCBQREZQbHVnaW46OnJ1blNjcmlwdHNJblBERkRvY3VtZW50KCkKK3ZvaWQg
UERGUGx1Z2luOjptYXliZVJ1blNjcmlwdHNJblBERkRvY3VtZW50KCkKIHsKLSAgICBWZWN0b3I8
UmV0YWluUHRyPENGU3RyaW5nUmVmPj4gc2NyaXB0czsKLSAgICBnZXRBbGxTY3JpcHRzSW5QREZE
b2N1bWVudChbbV9wZGZEb2N1bWVudCBkb2N1bWVudFJlZl0sIHNjcmlwdHMpOworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcp
OwogCi0gICAgaWYgKHNjcmlwdHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2hhc1J1bkRvY3VtZW50
U2NyaXB0cykKICAgICAgICAgcmV0dXJuOworICAgIG1faGFzUnVuRG9jdW1lbnRTY3JpcHRzID0g
dHJ1ZTsKKworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpXSAoVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+JiBzY3Jp
cHRzKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKHNjcmlwdHMuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENv
bnRleHRDcmVhdGUoMCk7CisgICAgICAgIEpTT2JqZWN0UmVmIGpzUERGRG9jID0gbWFrZUpTUERG
RG9jKGN0eCk7CisgICAgICAgIGZvciAoYXV0byYgc2NyaXB0IDogc2NyaXB0cykKKyAgICAgICAg
ICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKHNjcmlw
dC5nZXQoKSkuZ2V0KCksIGpzUERGRG9jLCBudWxscHRyLCAwLCBudWxscHRyKTsKKyAgICAgICAg
SlNHbG9iYWxDb250ZXh0UmVsZWFzZShjdHgpOworICAgIH07CisKKyNpZiBIQVZFKElOQ1JFTUVO
VEFMX1BERl9BUElTKQorICAgIGF1dG8gc2NyaXB0VXRpbGl0eVF1ZXVlID0gV29ya1F1ZXVlOjpj
cmVhdGUoIlBERiBzY3JpcHQgdXRpbGl0eSIpOworICAgIGF1dG8mIHJhd1F1ZXVlID0gc2NyaXB0
VXRpbGl0eVF1ZXVlLmdldCgpOworICAgIGF1dG8gZG9jdW1lbnRSZWYgPSBbbV9wZGZEb2N1bWVu
dCBkb2N1bWVudFJlZl07CisgICAgcmF3UXVldWUuZGlzcGF0Y2goW3NjcmlwdFV0aWxpdHlRdWV1
ZSA9IFdURk1vdmUoc2NyaXB0VXRpbGl0eVF1ZXVlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZG9jdW1lbnRSZWZdICgpIG11dGFibGUgeworICAgICAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHgg
PSBKU0dsb2JhbENvbnRleHRDcmVhdGUoMCk7Ci0gICAgSlNPYmplY3RSZWYganNQREZEb2MgPSBt
YWtlSlNQREZEb2MoY3R4KTsKLSAgICBmb3IgKGF1dG8mIHNjcmlwdCA6IHNjcmlwdHMpCi0gICAg
ICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKHNjcmlw
dC5nZXQoKSkuZ2V0KCksIGpzUERGRG9jLCBudWxscHRyLCAwLCBudWxscHRyKTsKLSAgICBKU0ds
b2JhbENvbnRleHRSZWxlYXNlKGN0eCk7CisgICAgICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+PiBzY3JpcHRzOworICAgICAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChkb2N1
bWVudFJlZiwgc2NyaXB0cyk7CisKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc2NyaXB0cyA9IFdURk1vdmUo
c2NyaXB0cyldICgpIG11dGFibGUgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc2Ny
aXB0cyk7CisgICAgICAgIH0pOworICAgIH0pOworI2Vsc2UKKyAgICBWZWN0b3I8UmV0YWluUHRy
PENGU3RyaW5nUmVmPj4gc2NyaXB0czsKKyAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChb
bV9wZGZEb2N1bWVudCBkb2N1bWVudFJlZl0sIHNjcmlwdHMpOworICAgIGNvbXBsZXRpb25IYW5k
bGVyKHNjcmlwdHMpOworI2VuZGlmCiB9CiAKIHZvaWQgUERGUGx1Z2luOjpjcmVhdGVQYXNzd29y
ZEVudHJ5Rm9ybSgpCg==
</data>
<flag name="review"
          id="408891"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393510</attachid>
            <date>2020-03-13 11:31:06 -0700</date>
            <delta_ts>2020-03-13 15:39:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>pat</filename>
            <type>text/plain</type>
            <size>5508</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmMwNTRmY2Y4MjMuLmE3YjM3MzI5Mzc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDIwLTAzLTEzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBHYXRoZXIgUERGIHNjcmlwdHMgdG8gcnVuIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkwNjMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dGhyZWFk
RW50cnkpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNv
bXBsZXRlV2l0aEFjY3VtdWxhdGVkRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
cGRmRG9jdW1lbnREaWRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjppbnN0YWxs
UERGRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1heWJlUnVuU2NyaXB0
c0luUERGRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnJ1blNjcmlwdHNJ
blBERkRvY3VtZW50KTogRGVsZXRlZC4KKwogMjAyMC0wMy0xMyAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIFNtYXJ0TWFnbmlmaWNh
dGlvbkNvbnRyb2xsZXIgTWFnbmlmeSBtZXNzYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKaW5kZXggM2VlNTM0ZDc1YmQuLjE2MzUwYjM3
MjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5oCkBAIC0yNTEsNyArMjUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluc3RhbGxQREZE
b2N1bWVudCgpOwogICAgIHZvaWQgYWRkQXJjaGl2ZVJlc291cmNlKCk7CiAgICAgdm9pZCBjYWxj
dWxhdGVTaXplcygpOwotICAgIHZvaWQgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKKyAgICB2
b2lkIG1heWJlUnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKIAogICAgIE5TRXZlbnQgKm5zRXZl
bnRGb3JXZWJNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICBXZWJDb3JlOjpJ
bnRQb2ludCBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYpIGNvbnN0OwpAQCAtMzI0LDYgKzMyNCw3IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPFBE
RkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OwogCiAgICAgYm9vbCBtX2RvY3VtZW50RmluaXNoZWRM
b2FkaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzUnVuRG9jdW1lbnRTY3JpcHRzIHsgZmFs
c2UgfTsKICAgICB1bnNpZ25lZCBtX2ZpcnN0UGFnZUhlaWdodCB7IDAgfTsKICAgICBXZWJDb3Jl
OjpJbnRTaXplIG1fcGRmRG9jdW1lbnRTaXplOyAvLyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBz
LgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQppbmRleCA1ODVhZTU0ODljNi4uMTA3Y2FkOWRjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQpAQCAtODA2LDcgKzgwNiw3
IEBAIHZvaWQgUERGUGx1Z2luOjp0aHJlYWRFbnRyeShSZWY8UERGUGx1Z2luPiYmIHByb3RlY3Rl
ZFBsdWdpbikKICAgICBmaXJzdFBhZ2VTZW1hcGhvcmUud2FpdCgpOwogCiAjaWYgIUxPR19ESVNB
QkxFRAotICAgIHBkZkxvZygiRmluaW5pc2hlZCBwcmVsb2FkaW5nIGZpcnN0IHBhZ2UiKTsKKyAg
ICBwZGZMb2coIkZpbmlzaGVkIHByZWxvYWRpbmcgZmlyc3QgcGFnZSIpOwogI2VuZGlmCiAKICAg
ICAvLyBUaGUgbWFpbiB0aHJlYWQgZGlzcGF0Y2ggYmVsb3cgcmVtb3ZlcyB0aGUgbGFzdCByZWZl
cmVuY2UgdG8gdGhlIFBERiB0aHJlYWQuCkBAIC05MjMsNyArOTIzLDcgQEAgdm9pZCBQREZQbHVn
aW46OkJ5dGVSYW5nZVJlcXVlc3Q6OmNvbXBsZXRlV2l0aEFjY3VtdWxhdGVkRGF0YShQREZQbHVn
aW4mIHBsdWdpbikKICNlbmRpZgogCiAgICAgbV9jb21wbGV0aW9uSGFuZGxlcihtX2FjY3VtdWxh
dGVkRGF0YS5kYXRhKCksIG1fYWNjdW11bGF0ZWREYXRhLnNpemUoKSk7Ci0gICAgCisKICAgICBp
ZiAobV9zdHJlYW1Mb2FkZXIpCiAgICAgICAgIHBsdWdpbi5mb3JnZXRMb2FkZXIoKm1fc3RyZWFt
TG9hZGVyKTsKIApAQCAtMTQyMCw2ICsxNDIwLDkgQEAgdm9pZCBQREZQbHVnaW46OnBkZkRvY3Vt
ZW50RGlkTG9hZCgpCiAgICAgaWYgKG1faW5jcmVtZW50YWxQREZMb2FkaW5nRW5hYmxlZCkgewog
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYWxsIGRhdGEgZm9yIHRoZSBkb2N1bWVu
dCwgYW5kIHRoZXJlZm9yZSB3ZSBrbm93IGhvdyB0byBhbnN3ZXIgYW55IG91dHN0YW5kaW5nIHJh
bmdlIHJlcXVlc3RzLgogICAgICAgICB1bmNvbmRpdGlvbmFsQ29tcGxldGVPdXRzdGFuZGluZ1Jh
bmdlUmVxdWVzdHMoKTsKKworICAgICAgICBpZiAobV9wZGZEb2N1bWVudCkKKyAgICAgICAgICAg
IG1heWJlUnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKICAgICB9IGVsc2UKICNlbmRpZgogICAg
IHsKQEAgLTE0NDYsNyArMTQ0OSw4IEBAIHZvaWQgUERGUGx1Z2luOjppbnN0YWxsUERGRG9jdW1l
bnQoKQogICAgIGNhbGN1bGF0ZVNpemVzKCk7CiAgICAgdXBkYXRlU2Nyb2xsYmFycygpOwogCi0g
ICAgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKKyAgICBpZiAobV9kb2N1bWVudEZpbmlzaGVk
TG9hZGluZykKKyAgICAgICAgbWF5YmVSdW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOwogCiAgICAg
aWYgKFttX3BkZkRvY3VtZW50IGlzTG9ja2VkXSkKICAgICAgICAgY3JlYXRlUGFzc3dvcmRFbnRy
eUZvcm0oKTsKQEAgLTE1NTYsMTkgKzE1NjAsNDUgQEAgdm9pZCBQREZQbHVnaW46Om1hbnVhbFN0
cmVhbURpZEZhaWwoYm9vbCkKICNlbmRpZgogfQogCi12b2lkIFBERlBsdWdpbjo6cnVuU2NyaXB0
c0luUERGRG9jdW1lbnQoKQordm9pZCBQREZQbHVnaW46Om1heWJlUnVuU2NyaXB0c0luUERGRG9j
dW1lbnQoKQogewotICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiBzY3JpcHRzOwot
ICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRvY3VtZW50IGRvY3VtZW50UmVm
XSwgc2NyaXB0cyk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9k
b2N1bWVudEZpbmlzaGVkTG9hZGluZyk7CiAKLSAgICBpZiAoc2NyaXB0cy5pc0VtcHR5KCkpCisg
ICAgaWYgKG1faGFzUnVuRG9jdW1lbnRTY3JpcHRzKQogICAgICAgICByZXR1cm47CisgICAgbV9o
YXNSdW5Eb2N1bWVudFNjcmlwdHMgPSB0cnVlOworCisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxl
ciA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChWZWN0b3I8UmV0YWlu
UHRyPENGU3RyaW5nUmVmPj4mIHNjcmlwdHMpIG11dGFibGUgeworICAgICAgICBpZiAoc2NyaXB0
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSlNHbG9iYWxDb250
ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZSgwKTsKKyAgICAgICAgSlNPYmplY3RS
ZWYganNQREZEb2MgPSBtYWtlSlNQREZEb2MoY3R4KTsKKyAgICAgICAgZm9yIChhdXRvJiBzY3Jp
cHQgOiBzY3JpcHRzKQorICAgICAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIE9wYXF1ZUpT
U3RyaW5nOjp0cnlDcmVhdGUoc2NyaXB0LmdldCgpKS5nZXQoKSwganNQREZEb2MsIG51bGxwdHIs
IDAsIG51bGxwdHIpOworICAgICAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7CisgICAg
fTsKKworI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCisgICAgYXV0byBzY3JpcHRVdGls
aXR5UXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiUERGIHNjcmlwdCB1dGlsaXR5Iik7CisgICAg
YXV0byYgcmF3UXVldWUgPSBzY3JpcHRVdGlsaXR5UXVldWUuZ2V0KCk7CisgICAgYXV0byBkb2N1
bWVudFJlZiA9IFttX3BkZkRvY3VtZW50IGRvY3VtZW50UmVmXTsKKyAgICByYXdRdWV1ZS5kaXNw
YXRjaChbc2NyaXB0VXRpbGl0eVF1ZXVlID0gV1RGTW92ZShzY3JpcHRVdGlsaXR5UXVldWUpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBkb2N1bWVudFJl
Zl0gKCkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAg
SlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZSgwKTsKLSAgICBK
U09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOwotICAgIGZvciAoYXV0byYg
c2NyaXB0IDogc2NyaXB0cykKLSAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIE9wYXF1ZUpT
U3RyaW5nOjp0cnlDcmVhdGUoc2NyaXB0LmdldCgpKS5nZXQoKSwganNQREZEb2MsIG51bGxwdHIs
IDAsIG51bGxwdHIpOwotICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY3R4KTsKKyAgICAgICAg
VmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IHNjcmlwdHM7CisgICAgICAgIGdldEFsbFNj
cmlwdHNJblBERkRvY3VtZW50KGRvY3VtZW50UmVmLCBzY3JpcHRzKTsKKworICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBzY3JpcHRzID0gV1RGTW92ZShzY3JpcHRzKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihzY3JpcHRzKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisjZWxz
ZQorICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiBzY3JpcHRzOworICAgIGdldEFs
bFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRvY3VtZW50IGRvY3VtZW50UmVmXSwgc2NyaXB0
cyk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoc2NyaXB0cyk7CisjZW5kaWYKIH0KIAogdm9pZCBQ
REZQbHVnaW46OmNyZWF0ZVBhc3N3b3JkRW50cnlGb3JtKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393542</attachid>
            <date>2020-03-13 15:39:30 -0700</date>
            <delta_ts>2020-03-13 15:45:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>pat</filename>
            <type>text/plain</type>
            <size>5979</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmMwNTRmY2Y4MjMuLjQ3YTcyMDM5ZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI3IEBACisyMDIwLTAzLTEzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBHYXRoZXIgUERGIHNjcmlwdHMgdG8gcnVuIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkwNjMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IEluIGluY3JlbWVudGFsIGxvYWRpbmcgbW9kZSwgZ2F0aGVyaW5nIGRvY3VtZW50IHNjcmlwdHMg
d2lsbCBzb21ldGltZXMgcmVxdWlyZSBQREZLaXQvQ0cKKyAgICAgICAgdG8gbG9jayBhbmQgd2Fp
dCBvbiBkYXRhIGxvYWRzIGZyb20gb3VyIGRhdGEgcHJvdmlkZXIuCisgICAgICAgIAorICAgICAg
ICBTbyBpZiB3ZSBnYXRoZXIgdGhlbSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgaGFuZyB0
aGUgbWFpbiB0aHJlYWQgYW5kIHRoZXJlZm9yZSBkZWFkbG9jaworICAgICAgICB3aXRoIG91ciBk
YXRhIHByb3ZpZGVyIHRocmVhZC9xdWV1ZS4KKyAgICAgICAgCisgICAgICAgIFNvIGxldCdzIGdh
dGhlciB0aG9zZSBzY3JpcHRzIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQhCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnRo
cmVhZEVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0
Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OnBkZkRvY3VtZW50RGlkTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aW5z
dGFsbFBERkRvY3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjptYXliZVJ1blNj
cmlwdHNJblBERkRvY3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpydW5TY3Jp
cHRzSW5QREZEb2N1bWVudCk6IERlbGV0ZWQuCisKIDIwMjAtMDMtMTMgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBTbWFydE1hZ25p
ZmljYXRpb25Db250cm9sbGVyIE1hZ25pZnkgbWVzc2FnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCmluZGV4IDNlZTUzNGQ3NWJkLi41Yjlm
MDFjNGEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4uaApAQCAtMjUxLDcgKzI1MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnN0YWxs
UERGRG9jdW1lbnQoKTsKICAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwogICAgIHZvaWQg
Y2FsY3VsYXRlU2l6ZXMoKTsKLSAgICB2b2lkIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7Cisg
ICAgdm9pZCBydW5TY3JpcHRzSW5QREZEb2N1bWVudElmTmVlZGVkKCk7CiAKICAgICBOU0V2ZW50
ICpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CiAgICAgV2Vi
Q29yZTo6SW50UG9pbnQgY29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKSBjb25zdDsKQEAgLTMyNCw2ICszMjQsNyBAQCBwcml2YXRlOgogICAgIFJldGFp
blB0cjxQREZEb2N1bWVudD4gbV9wZGZEb2N1bWVudDsKIAogICAgIGJvb2wgbV9kb2N1bWVudEZp
bmlzaGVkTG9hZGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1J1bkRvY3VtZW50U2NyaXB0
cyB7IGZhbHNlIH07CiAgICAgdW5zaWduZWQgbV9maXJzdFBhZ2VIZWlnaHQgeyAwIH07CiAgICAg
V2ViQ29yZTo6SW50U2l6ZSBtX3BkZkRvY3VtZW50U2l6ZTsgLy8gQWxsIHBhZ2VzLCBpbmNsdWRp
bmcgZ2Fwcy4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4ubW0KaW5kZXggNTg1YWU1NDg5YzYuLmE3YTJmNmNlMmQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KQEAgLTgwNiw3
ICs4MDYsNyBAQCB2b2lkIFBERlBsdWdpbjo6dGhyZWFkRW50cnkoUmVmPFBERlBsdWdpbj4mJiBw
cm90ZWN0ZWRQbHVnaW4pCiAgICAgZmlyc3RQYWdlU2VtYXBob3JlLndhaXQoKTsKIAogI2lmICFM
T0dfRElTQUJMRUQKLSAgICBwZGZMb2coIkZpbmluaXNoZWQgcHJlbG9hZGluZyBmaXJzdCBwYWdl
Iik7CisgICAgcGRmTG9nKCJGaW5pc2hlZCBwcmVsb2FkaW5nIGZpcnN0IHBhZ2UiKTsKICNlbmRp
ZgogCiAgICAgLy8gVGhlIG1haW4gdGhyZWFkIGRpc3BhdGNoIGJlbG93IHJlbW92ZXMgdGhlIGxh
c3QgcmVmZXJlbmNlIHRvIHRoZSBQREYgdGhyZWFkLgpAQCAtOTIzLDcgKzkyMyw3IEBAIHZvaWQg
UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEo
UERGUGx1Z2luJiBwbHVnaW4pCiAjZW5kaWYKIAogICAgIG1fY29tcGxldGlvbkhhbmRsZXIobV9h
Y2N1bXVsYXRlZERhdGEuZGF0YSgpLCBtX2FjY3VtdWxhdGVkRGF0YS5zaXplKCkpOwotICAgIAor
CiAgICAgaWYgKG1fc3RyZWFtTG9hZGVyKQogICAgICAgICBwbHVnaW4uZm9yZ2V0TG9hZGVyKCpt
X3N0cmVhbUxvYWRlcik7CiAKQEAgLTE0MjAsNiArMTQyMCw5IEBAIHZvaWQgUERGUGx1Z2luOjpw
ZGZEb2N1bWVudERpZExvYWQoKQogICAgIGlmIChtX2luY3JlbWVudGFsUERGTG9hZGluZ0VuYWJs
ZWQpIHsKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IGFsbCBkYXRhIGZvciB0aGUg
ZG9jdW1lbnQsIGFuZCB0aGVyZWZvcmUgd2Uga25vdyBob3cgdG8gYW5zd2VyIGFueSBvdXRzdGFu
ZGluZyByYW5nZSByZXF1ZXN0cy4KICAgICAgICAgdW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3Rh
bmRpbmdSYW5nZVJlcXVlc3RzKCk7CisKKyAgICAgICAgaWYgKG1fcGRmRG9jdW1lbnQpCisgICAg
ICAgICAgICBydW5TY3JpcHRzSW5QREZEb2N1bWVudElmTmVlZGVkKCk7CiAgICAgfSBlbHNlCiAj
ZW5kaWYKICAgICB7CkBAIC0xNDQ2LDcgKzE0NDksOCBAQCB2b2lkIFBERlBsdWdpbjo6aW5zdGFs
bFBERkRvY3VtZW50KCkKICAgICBjYWxjdWxhdGVTaXplcygpOwogICAgIHVwZGF0ZVNjcm9sbGJh
cnMoKTsKIAotICAgIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CisgICAgaWYgKG1fZG9jdW1l
bnRGaW5pc2hlZExvYWRpbmcpCisgICAgICAgIHJ1blNjcmlwdHNJblBERkRvY3VtZW50SWZOZWVk
ZWQoKTsKIAogICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pCiAgICAgICAgIGNyZWF0
ZVBhc3N3b3JkRW50cnlGb3JtKCk7CkBAIC0xNTU2LDE5ICsxNTYwLDQ1IEBAIHZvaWQgUERGUGx1
Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wpCiAjZW5kaWYKIH0KIAotdm9pZCBQREZQbHVn
aW46OnJ1blNjcmlwdHNJblBERkRvY3VtZW50KCkKK3ZvaWQgUERGUGx1Z2luOjpydW5TY3JpcHRz
SW5QREZEb2N1bWVudElmTmVlZGVkKCkKIHsKLSAgICBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5n
UmVmPj4gc2NyaXB0czsKLSAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChbbV9wZGZEb2N1
bWVudCBkb2N1bWVudFJlZl0sIHNjcmlwdHMpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgQVNTRVJUKG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcpOwogCi0gICAgaWYgKHNjcmlw
dHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2hhc1J1bkRvY3VtZW50U2NyaXB0cykKICAgICAgICAg
cmV0dXJuOworICAgIG1faGFzUnVuRG9jdW1lbnRTY3JpcHRzID0gdHJ1ZTsKKworICAgIGF1dG8g
Y29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
XSAoVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+JiYgc2NyaXB0cykgbXV0YWJsZSB7Cisg
ICAgICAgIGlmIChzY3JpcHRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKG51bGxw
dHIpOworICAgICAgICBKU09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOwor
ICAgICAgICBmb3IgKGF1dG8mIHNjcmlwdCA6IHNjcmlwdHMpCisgICAgICAgICAgICBKU0V2YWx1
YXRlU2NyaXB0KGN0eCwgT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShzY3JpcHQuZ2V0KCkpLmdl
dCgpLCBqc1BERkRvYywgbnVsbHB0ciwgMSwgbnVsbHB0cik7CisgICAgICAgIEpTR2xvYmFsQ29u
dGV4dFJlbGVhc2UoY3R4KTsKKyAgICB9OworCisjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJ
UykKKyAgICBhdXRvIHNjcmlwdFV0aWxpdHlRdWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJQREYg
c2NyaXB0IHV0aWxpdHkiKTsKKyAgICBhdXRvJiByYXdRdWV1ZSA9IHNjcmlwdFV0aWxpdHlRdWV1
ZS5nZXQoKTsKKyAgICBSZXRhaW5QdHI8Q0dQREZEb2N1bWVudFJlZj4gZG9jdW1lbnQgPSBbbV9w
ZGZEb2N1bWVudCBkb2N1bWVudFJlZl07CisgICAgcmF3UXVldWUuZGlzcGF0Y2goW3NjcmlwdFV0
aWxpdHlRdWV1ZSA9IFdURk1vdmUoc2NyaXB0VXRpbGl0eVF1ZXVlKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZG9jdW1lbnQgPSBXVEZNb3ZlKGRvY3Vt
ZW50KV0gKCkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0g
ICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZSgwKTsKLSAg
ICBKU09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOwotICAgIGZvciAoYXV0
byYgc2NyaXB0IDogc2NyaXB0cykKLSAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIE9wYXF1
ZUpTU3RyaW5nOjp0cnlDcmVhdGUoc2NyaXB0LmdldCgpKS5nZXQoKSwganNQREZEb2MsIG51bGxw
dHIsIDAsIG51bGxwdHIpOwotICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY3R4KTsKKyAgICAg
ICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IHNjcmlwdHM7CisgICAgICAgIGdldEFs
bFNjcmlwdHNJblBERkRvY3VtZW50KGRvY3VtZW50LmdldCgpLCBzY3JpcHRzKTsKKworICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBzY3JpcHRzID0gV1RGTW92ZShzY3JpcHRzKV0gKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNjcmlwdHMpKTsKKyAgICAgICAgfSk7
CisgICAgfSk7CisjZWxzZQorICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiBzY3Jp
cHRzOworICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRvY3VtZW50IGRvY3Vt
ZW50UmVmXSwgc2NyaXB0cyk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoc2NyaXB0cyk7CisjZW5k
aWYKIH0KIAogdm9pZCBQREZQbHVnaW46OmNyZWF0ZVBhc3N3b3JkRW50cnlGb3JtKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393545</attachid>
            <date>2020-03-13 15:45:30 -0700</date>
            <delta_ts>2020-03-14 13:47:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>pat</filename>
            <type>text/plain</type>
            <size>5988</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmMwNTRmY2Y4MjMuLjQ3YTcyMDM5ZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI3IEBACisyMDIwLTAzLTEzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBHYXRoZXIgUERGIHNjcmlwdHMgdG8gcnVuIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkwNjMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IEluIGluY3JlbWVudGFsIGxvYWRpbmcgbW9kZSwgZ2F0aGVyaW5nIGRvY3VtZW50IHNjcmlwdHMg
d2lsbCBzb21ldGltZXMgcmVxdWlyZSBQREZLaXQvQ0cKKyAgICAgICAgdG8gbG9jayBhbmQgd2Fp
dCBvbiBkYXRhIGxvYWRzIGZyb20gb3VyIGRhdGEgcHJvdmlkZXIuCisgICAgICAgIAorICAgICAg
ICBTbyBpZiB3ZSBnYXRoZXIgdGhlbSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgaGFuZyB0
aGUgbWFpbiB0aHJlYWQgYW5kIHRoZXJlZm9yZSBkZWFkbG9jaworICAgICAgICB3aXRoIG91ciBk
YXRhIHByb3ZpZGVyIHRocmVhZC9xdWV1ZS4KKyAgICAgICAgCisgICAgICAgIFNvIGxldCdzIGdh
dGhlciB0aG9zZSBzY3JpcHRzIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQhCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnRo
cmVhZEVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0
Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OnBkZkRvY3VtZW50RGlkTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aW5z
dGFsbFBERkRvY3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjptYXliZVJ1blNj
cmlwdHNJblBERkRvY3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpydW5TY3Jp
cHRzSW5QREZEb2N1bWVudCk6IERlbGV0ZWQuCisKIDIwMjAtMDMtMTMgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBTbWFydE1hZ25p
ZmljYXRpb25Db250cm9sbGVyIE1hZ25pZnkgbWVzc2FnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCmluZGV4IDNlZTUzNGQ3NWJkLi41Yjlm
MDFjNGEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4uaApAQCAtMjUxLDcgKzI1MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnN0YWxs
UERGRG9jdW1lbnQoKTsKICAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwogICAgIHZvaWQg
Y2FsY3VsYXRlU2l6ZXMoKTsKLSAgICB2b2lkIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7Cisg
ICAgdm9pZCBydW5TY3JpcHRzSW5QREZEb2N1bWVudElmTmVlZGVkKCk7CiAKICAgICBOU0V2ZW50
ICpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CiAgICAgV2Vi
Q29yZTo6SW50UG9pbnQgY29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKSBjb25zdDsKQEAgLTMyNCw2ICszMjQsNyBAQCBwcml2YXRlOgogICAgIFJldGFp
blB0cjxQREZEb2N1bWVudD4gbV9wZGZEb2N1bWVudDsKIAogICAgIGJvb2wgbV9kb2N1bWVudEZp
bmlzaGVkTG9hZGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1J1bkRvY3VtZW50U2NyaXB0
cyB7IGZhbHNlIH07CiAgICAgdW5zaWduZWQgbV9maXJzdFBhZ2VIZWlnaHQgeyAwIH07CiAgICAg
V2ViQ29yZTo6SW50U2l6ZSBtX3BkZkRvY3VtZW50U2l6ZTsgLy8gQWxsIHBhZ2VzLCBpbmNsdWRp
bmcgZ2Fwcy4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4ubW0KaW5kZXggNTg1YWU1NDg5YzYuLjgwYTNmZDZmMjYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KQEAgLTgwNiw3
ICs4MDYsNyBAQCB2b2lkIFBERlBsdWdpbjo6dGhyZWFkRW50cnkoUmVmPFBERlBsdWdpbj4mJiBw
cm90ZWN0ZWRQbHVnaW4pCiAgICAgZmlyc3RQYWdlU2VtYXBob3JlLndhaXQoKTsKIAogI2lmICFM
T0dfRElTQUJMRUQKLSAgICBwZGZMb2coIkZpbmluaXNoZWQgcHJlbG9hZGluZyBmaXJzdCBwYWdl
Iik7CisgICAgcGRmTG9nKCJGaW5pc2hlZCBwcmVsb2FkaW5nIGZpcnN0IHBhZ2UiKTsKICNlbmRp
ZgogCiAgICAgLy8gVGhlIG1haW4gdGhyZWFkIGRpc3BhdGNoIGJlbG93IHJlbW92ZXMgdGhlIGxh
c3QgcmVmZXJlbmNlIHRvIHRoZSBQREYgdGhyZWFkLgpAQCAtOTIzLDcgKzkyMyw3IEBAIHZvaWQg
UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEo
UERGUGx1Z2luJiBwbHVnaW4pCiAjZW5kaWYKIAogICAgIG1fY29tcGxldGlvbkhhbmRsZXIobV9h
Y2N1bXVsYXRlZERhdGEuZGF0YSgpLCBtX2FjY3VtdWxhdGVkRGF0YS5zaXplKCkpOwotICAgIAor
CiAgICAgaWYgKG1fc3RyZWFtTG9hZGVyKQogICAgICAgICBwbHVnaW4uZm9yZ2V0TG9hZGVyKCpt
X3N0cmVhbUxvYWRlcik7CiAKQEAgLTE0MjAsNiArMTQyMCw5IEBAIHZvaWQgUERGUGx1Z2luOjpw
ZGZEb2N1bWVudERpZExvYWQoKQogICAgIGlmIChtX2luY3JlbWVudGFsUERGTG9hZGluZ0VuYWJs
ZWQpIHsKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IGFsbCBkYXRhIGZvciB0aGUg
ZG9jdW1lbnQsIGFuZCB0aGVyZWZvcmUgd2Uga25vdyBob3cgdG8gYW5zd2VyIGFueSBvdXRzdGFu
ZGluZyByYW5nZSByZXF1ZXN0cy4KICAgICAgICAgdW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3Rh
bmRpbmdSYW5nZVJlcXVlc3RzKCk7CisKKyAgICAgICAgaWYgKG1fcGRmRG9jdW1lbnQpCisgICAg
ICAgICAgICBydW5TY3JpcHRzSW5QREZEb2N1bWVudElmTmVlZGVkKCk7CiAgICAgfSBlbHNlCiAj
ZW5kaWYKICAgICB7CkBAIC0xNDQ2LDcgKzE0NDksOCBAQCB2b2lkIFBERlBsdWdpbjo6aW5zdGFs
bFBERkRvY3VtZW50KCkKICAgICBjYWxjdWxhdGVTaXplcygpOwogICAgIHVwZGF0ZVNjcm9sbGJh
cnMoKTsKIAotICAgIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CisgICAgaWYgKG1fZG9jdW1l
bnRGaW5pc2hlZExvYWRpbmcpCisgICAgICAgIHJ1blNjcmlwdHNJblBERkRvY3VtZW50SWZOZWVk
ZWQoKTsKIAogICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pCiAgICAgICAgIGNyZWF0
ZVBhc3N3b3JkRW50cnlGb3JtKCk7CkBAIC0xNTU2LDE5ICsxNTYwLDQ1IEBAIHZvaWQgUERGUGx1
Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wpCiAjZW5kaWYKIH0KIAotdm9pZCBQREZQbHVn
aW46OnJ1blNjcmlwdHNJblBERkRvY3VtZW50KCkKK3ZvaWQgUERGUGx1Z2luOjpydW5TY3JpcHRz
SW5QREZEb2N1bWVudElmTmVlZGVkKCkKIHsKLSAgICBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5n
UmVmPj4gc2NyaXB0czsKLSAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChbbV9wZGZEb2N1
bWVudCBkb2N1bWVudFJlZl0sIHNjcmlwdHMpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgQVNTRVJUKG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcpOwogCi0gICAgaWYgKHNjcmlw
dHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2hhc1J1bkRvY3VtZW50U2NyaXB0cykKICAgICAgICAg
cmV0dXJuOworICAgIG1faGFzUnVuRG9jdW1lbnRTY3JpcHRzID0gdHJ1ZTsKKworICAgIGF1dG8g
Y29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
XSAoVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+JiYgc2NyaXB0cykgbXV0YWJsZSB7Cisg
ICAgICAgIGlmIChzY3JpcHRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKG51bGxw
dHIpOworICAgICAgICBKU09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOwor
ICAgICAgICBmb3IgKGF1dG8mIHNjcmlwdCA6IHNjcmlwdHMpCisgICAgICAgICAgICBKU0V2YWx1
YXRlU2NyaXB0KGN0eCwgT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShzY3JpcHQuZ2V0KCkpLmdl
dCgpLCBqc1BERkRvYywgbnVsbHB0ciwgMSwgbnVsbHB0cik7CisgICAgICAgIEpTR2xvYmFsQ29u
dGV4dFJlbGVhc2UoY3R4KTsKKyAgICB9OworCisjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJ
UykKKyAgICBhdXRvIHNjcmlwdFV0aWxpdHlRdWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJQREYg
c2NyaXB0IHV0aWxpdHkiKTsKKyAgICBhdXRvJiByYXdRdWV1ZSA9IHNjcmlwdFV0aWxpdHlRdWV1
ZS5nZXQoKTsKKyAgICBSZXRhaW5QdHI8Q0dQREZEb2N1bWVudFJlZj4gZG9jdW1lbnQgPSBbbV9w
ZGZEb2N1bWVudCBkb2N1bWVudFJlZl07CisgICAgcmF3UXVldWUuZGlzcGF0Y2goW3NjcmlwdFV0
aWxpdHlRdWV1ZSA9IFdURk1vdmUoc2NyaXB0VXRpbGl0eVF1ZXVlKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZG9jdW1lbnQgPSBXVEZNb3ZlKGRvY3Vt
ZW50KV0gKCkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0g
ICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZSgwKTsKLSAg
ICBKU09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOwotICAgIGZvciAoYXV0
byYgc2NyaXB0IDogc2NyaXB0cykKLSAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIE9wYXF1
ZUpTU3RyaW5nOjp0cnlDcmVhdGUoc2NyaXB0LmdldCgpKS5nZXQoKSwganNQREZEb2MsIG51bGxw
dHIsIDAsIG51bGxwdHIpOwotICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY3R4KTsKKyAgICAg
ICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IHNjcmlwdHM7CisgICAgICAgIGdldEFs
bFNjcmlwdHNJblBERkRvY3VtZW50KGRvY3VtZW50LmdldCgpLCBzY3JpcHRzKTsKKworICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBzY3JpcHRzID0gV1RGTW92ZShzY3JpcHRzKV0gKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNjcmlwdHMpKTsKKyAgICAgICAgfSk7
CisgICAgfSk7CisjZWxzZQorICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiBzY3Jp
cHRzOworICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRvY3VtZW50IGRvY3Vt
ZW50UmVmXSwgc2NyaXB0cyk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShzY3JpcHRz
KSk7CisjZW5kaWYKIH0KIAogdm9pZCBQREZQbHVnaW46OmNyZWF0ZVBhc3N3b3JkRW50cnlGb3Jt
KCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393590</attachid>
            <date>2020-03-14 13:47:28 -0700</date>
            <delta_ts>2020-03-14 14:04:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>pat</filename>
            <type>text/plain</type>
            <size>6948</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmMwNTRmY2Y4MjMuLjU4NzJkODcwZjgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMxIEBACisyMDIwLTAzLTE0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBHYXRoZXIgUERGIHNjcmlwdHMgdG8gcnVuIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkwNjMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IEluIGluY3JlbWVudGFsIGxvYWRpbmcgbW9kZSwgZ2F0aGVyaW5nIGRvY3VtZW50IHNjcmlwdHMg
d2lsbCBzb21ldGltZXMgcmVxdWlyZSBQREZLaXQvQ0cKKyAgICAgICAgdG8gbG9jayBhbmQgd2Fp
dCBvbiBkYXRhIGxvYWRzIGZyb20gb3VyIGRhdGEgcHJvdmlkZXIuCisgICAgICAgIAorICAgICAg
ICBTbyBpZiB3ZSBnYXRoZXIgdGhlbSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgaGFuZyB0
aGUgbWFpbiB0aHJlYWQgYW5kIHRoZXJlZm9yZSBkZWFkbG9jaworICAgICAgICB3aXRoIG91ciBk
YXRhIHByb3ZpZGVyIHRocmVhZC9xdWV1ZS4KKyAgICAgICAgCisgICAgICAgIFNvIGxldCdzIGdh
dGhlciB0aG9zZSBzY3JpcHRzIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQhCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnRo
cmVhZEVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0
Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OmRvY3VtZW50RGF0YURpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQREZQ
bHVnaW46Omluc3RhbGxQREZEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWFu
dWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
dHJ5UnVuU2NyaXB0c0luUERGRG9jdW1lbnQpOiBPbmx5IGFjdHVhbGx5IGdhdGhlcnMgc2NyaXB0
cyB0byBleGVjdXRlIGlmIHRoZXJlCisgICAgICAgICAgaXMgYSBtX3BkZkRvY3VtZW50IGFuZCB0
aGUgZW50aXJlIGRvY3VtZW50IGRhdGEgZmluaXNoZWQgbG9hZGluZy4KKyAgICAgICAgKFdlYktp
dDo6UERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpQREZQbHVnaW46OnJ1blNjcmlwdHNJblBERkRvY3VtZW50KTogRGVsZXRlZC4KKwogMjAy
MC0wMy0xMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgdW51c2VkIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIgTWFnbmlmeSBtZXNzYWdl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgK
aW5kZXggM2VlNTM0ZDc1YmQuLjI3MDQxMTk3MzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCkBAIC0yNDcsMTEgKzI0NywxMSBAQCBw
cml2YXRlOgogICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOwogICAgIFJlZjxXZWJDb3JlOjpT
Y3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7
CiAgICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9u
KTsKLSAgICB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpOworICAgIHZvaWQgZG9jdW1lbnREYXRh
RGlkRmluaXNoTG9hZGluZygpOwogICAgIHZvaWQgaW5zdGFsbFBERkRvY3VtZW50KCk7CiAgICAg
dm9pZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKICAgICB2b2lkIGNhbGN1bGF0ZVNpemVzKCk7Ci0g
ICAgdm9pZCBydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOworICAgIHZvaWQgdHJ5UnVuU2NyaXB0
c0luUERGRG9jdW1lbnQoKTsKIAogICAgIE5TRXZlbnQgKm5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50
KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJv
bVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KaW5kZXgg
NTg1YWU1NDg5YzYuLjBjZDBhMmE2YzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KQEAgLTgwNiw3ICs4MDYsNyBAQCB2b2lkIFBE
RlBsdWdpbjo6dGhyZWFkRW50cnkoUmVmPFBERlBsdWdpbj4mJiBwcm90ZWN0ZWRQbHVnaW4pCiAg
ICAgZmlyc3RQYWdlU2VtYXBob3JlLndhaXQoKTsKIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICBw
ZGZMb2coIkZpbmluaXNoZWQgcHJlbG9hZGluZyBmaXJzdCBwYWdlIik7CisgICAgcGRmTG9nKCJG
aW5pc2hlZCBwcmVsb2FkaW5nIGZpcnN0IHBhZ2UiKTsKICNlbmRpZgogCiAgICAgLy8gVGhlIG1h
aW4gdGhyZWFkIGRpc3BhdGNoIGJlbG93IHJlbW92ZXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRo
ZSBQREYgdGhyZWFkLgpAQCAtOTIzLDcgKzkyMyw3IEBAIHZvaWQgUERGUGx1Z2luOjpCeXRlUmFu
Z2VSZXF1ZXN0Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEoUERGUGx1Z2luJiBwbHVnaW4p
CiAjZW5kaWYKIAogICAgIG1fY29tcGxldGlvbkhhbmRsZXIobV9hY2N1bXVsYXRlZERhdGEuZGF0
YSgpLCBtX2FjY3VtdWxhdGVkRGF0YS5zaXplKCkpOwotICAgIAorCiAgICAgaWYgKG1fc3RyZWFt
TG9hZGVyKQogICAgICAgICBwbHVnaW4uZm9yZ2V0TG9hZGVyKCptX3N0cmVhbUxvYWRlcik7CiAK
QEAgLTE0MDcsNyArMTQwNyw3IEBAIHZvaWQgUERGUGx1Z2luOjpjb252ZXJ0UG9zdFNjcmlwdERh
dGFJZk5lZWRlZCgpCiAgICAgbV9kYXRhID0gUERGRG9jdW1lbnRJbWFnZTo6Y29udmVydFBvc3RT
Y3JpcHREYXRhVG9QREYoV1RGTW92ZShtX2RhdGEpKTsKIH0KIAotdm9pZCBQREZQbHVnaW46OnBk
ZkRvY3VtZW50RGlkTG9hZCgpCit2b2lkIFBERlBsdWdpbjo6ZG9jdW1lbnREYXRhRGlkRmluaXNo
TG9hZGluZygpCiB7CiAgICAgYWRkQXJjaGl2ZVJlc291cmNlKCk7CiAKQEAgLTE0MjYsNiArMTQy
Niw4IEBAIHZvaWQgUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQogICAgICAgICBtX3Bk
ZkRvY3VtZW50ID0gYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxvY10gaW5pdFdpdGhE
YXRhOnJhd0RhdGEoKV0pOwogICAgICAgICBpbnN0YWxsUERGRG9jdW1lbnQoKTsKICAgICB9CisK
KyAgICB0cnlSdW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOwogfQogCiB2b2lkIFBERlBsdWdpbjo6
aW5zdGFsbFBERkRvY3VtZW50KCkKQEAgLTE0NDYsNyArMTQ0OCw3IEBAIHZvaWQgUERGUGx1Z2lu
OjppbnN0YWxsUERGRG9jdW1lbnQoKQogICAgIGNhbGN1bGF0ZVNpemVzKCk7CiAgICAgdXBkYXRl
U2Nyb2xsYmFycygpOwogCi0gICAgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKKyAgICB0cnlS
dW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOwogCiAgICAgaWYgKFttX3BkZkRvY3VtZW50IGlzTG9j
a2VkXSkKICAgICAgICAgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsKQEAgLTE0OTQsNyArMTQ5
Niw3IEBAIHZvaWQgUERGUGx1Z2luOjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0
cmVhbUlEKQogICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3Vt
ZW50UmVxdWVzdElEKTsKIAogICAgIGNvbnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVkKCk7Ci0g
ICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7CisgICAgZG9jdW1lbnREYXRhRGlkRmluaXNoTG9hZGlu
ZygpOwogfQogCiB2b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1J
RCwgYm9vbCB3YXNDYW5jZWxsZWQpCkBAIC0xNTQ0LDcgKzE1NDYsNyBAQCB2b2lkIFBERlBsdWdp
bjo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5n
dGgpCiB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCiB7CiAg
ICAgY29udmVydFBvc3RTY3JpcHREYXRhSWZOZWVkZWQoKTsKLSAgICBwZGZEb2N1bWVudERpZExv
YWQoKTsKKyAgICBkb2N1bWVudERhdGFEaWRGaW5pc2hMb2FkaW5nKCk7CiB9CiAKIHZvaWQgUERG
UGx1Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wpCkBAIC0xNTU2LDE5ICsxNTU4LDQ0IEBA
IHZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wpCiAjZW5kaWYKIH0KIAot
dm9pZCBQREZQbHVnaW46OnJ1blNjcmlwdHNJblBERkRvY3VtZW50KCkKK3ZvaWQgUERGUGx1Z2lu
Ojp0cnlSdW5TY3JpcHRzSW5QREZEb2N1bWVudCgpCiB7Ci0gICAgVmVjdG9yPFJldGFpblB0cjxD
RlN0cmluZ1JlZj4+IHNjcmlwdHM7Ci0gICAgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoW21f
cGRmRG9jdW1lbnQgZG9jdW1lbnRSZWZdLCBzY3JpcHRzKTsKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIEFTU0VSVChtX2RvY3VtZW50RmluaXNoZWRMb2FkaW5nKTsKIAotICAgIGlm
IChzY3JpcHRzLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fcGRmRG9jdW1lbnQgfHwgIW1fZG9jdW1l
bnRGaW5pc2hlZExvYWRpbmcpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTR2xvYmFsQ29udGV4
dFJlZiBjdHggPSBKU0dsb2JhbENvbnRleHRDcmVhdGUoMCk7Ci0gICAgSlNPYmplY3RSZWYganNQ
REZEb2MgPSBtYWtlSlNQREZEb2MoY3R4KTsKLSAgICBmb3IgKGF1dG8mIHNjcmlwdCA6IHNjcmlw
dHMpCi0gICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBPcGFxdWVKU1N0cmluZzo6dHJ5Q3Jl
YXRlKHNjcmlwdC5nZXQoKSkuZ2V0KCksIGpzUERGRG9jLCBudWxscHRyLCAwLCBudWxscHRyKTsK
LSAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7CisgICAgYXV0byBjb21wbGV0aW9uSGFu
ZGxlciA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChWZWN0b3I8UmV0
YWluUHRyPENGU3RyaW5nUmVmPj4mJiBzY3JpcHRzKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKHNj
cmlwdHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENvbnRleHRDcmVhdGUobnVsbHB0cik7CisgICAgICAg
IEpTT2JqZWN0UmVmIGpzUERGRG9jID0gbWFrZUpTUERGRG9jKGN0eCk7CisgICAgICAgIGZvciAo
YXV0byYgc2NyaXB0IDogc2NyaXB0cykKKyAgICAgICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4
LCBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKHNjcmlwdC5nZXQoKSkuZ2V0KCksIGpzUERGRG9j
LCBudWxscHRyLCAxLCBudWxscHRyKTsKKyAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShj
dHgpOworICAgIH07CisKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorICAgIGF1dG8g
c2NyaXB0VXRpbGl0eVF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoIlBERiBzY3JpcHQgdXRpbGl0
eSIpOworICAgIGF1dG8mIHJhd1F1ZXVlID0gc2NyaXB0VXRpbGl0eVF1ZXVlLmdldCgpOworICAg
IFJldGFpblB0cjxDR1BERkRvY3VtZW50UmVmPiBkb2N1bWVudCA9IFttX3BkZkRvY3VtZW50IGRv
Y3VtZW50UmVmXTsKKyAgICByYXdRdWV1ZS5kaXNwYXRjaChbc2NyaXB0VXRpbGl0eVF1ZXVlID0g
V1RGTW92ZShzY3JpcHRVdGlsaXR5UXVldWUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBkb2N1bWVudCA9IFdURk1vdmUoZG9jdW1lbnQpXSAoKSBtdXRh
YmxlIHsKKyAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICAgICAgVmVjdG9y
PFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IHNjcmlwdHM7CisgICAgICAgIGdldEFsbFNjcmlwdHNJ
blBERkRvY3VtZW50KGRvY3VtZW50LmdldCgpLCBzY3JpcHRzKTsKKworICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBzY3JpcHRzID0gV1RGTW92ZShzY3JpcHRzKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNjcmlwdHMpKTsKKyAgICAgICAgfSk7CisgICAgfSk7
CisjZWxzZQorICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiBzY3JpcHRzOworICAg
IGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRvY3VtZW50IGRvY3VtZW50UmVmXSwg
c2NyaXB0cyk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShzY3JpcHRzKSk7CisjZW5k
aWYKIH0KIAogdm9pZCBQREZQbHVnaW46OmNyZWF0ZVBhc3N3b3JkRW50cnlGb3JtKCkK
</data>
<flag name="review"
          id="408989"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393592</attachid>
            <date>2020-03-14 14:04:01 -0700</date>
            <delta_ts>2020-03-14 15:17:09 -0700</delta_ts>
            <desc>PFL</desc>
            <filename>pat</filename>
            <type>text/plain</type>
            <size>6905</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmMwNTRmY2Y4MjMuLmJjYTIxNjI3Y2U4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMxIEBACisyMDIwLTAzLTE0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBHYXRoZXIgUERGIHNjcmlwdHMgdG8gcnVuIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkwNjMK
KworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KKyAgICAgICAgCisgICAgICAgIElu
IGluY3JlbWVudGFsIGxvYWRpbmcgbW9kZSwgZ2F0aGVyaW5nIGRvY3VtZW50IHNjcmlwdHMgd2ls
bCBzb21ldGltZXMgcmVxdWlyZSBQREZLaXQvQ0cKKyAgICAgICAgdG8gbG9jayBhbmQgd2FpdCBv
biBkYXRhIGxvYWRzIGZyb20gb3VyIGRhdGEgcHJvdmlkZXIuCisgICAgICAgIAorICAgICAgICBT
byBpZiB3ZSBnYXRoZXIgdGhlbSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgaGFuZyB0aGUg
bWFpbiB0aHJlYWQgYW5kIHRoZXJlZm9yZSBkZWFkbG9jaworICAgICAgICB3aXRoIG91ciBkYXRh
IHByb3ZpZGVyIHRocmVhZC9xdWV1ZS4KKyAgICAgICAgCisgICAgICAgIFNvIGxldCdzIGdhdGhl
ciB0aG9zZSBzY3JpcHRzIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQhCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnRocmVh
ZEVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpCeXRlUmFuZ2VSZXF1ZXN0Ojpj
b21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmRvY3VtZW50RGF0YURpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46Omluc3RhbGxQREZEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c3Ry
ZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWFudWFs
U3RyZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dHJ5
UnVuU2NyaXB0c0luUERGRG9jdW1lbnQpOiBPbmx5IGFjdHVhbGx5IGdhdGhlcnMgc2NyaXB0cyB0
byBleGVjdXRlIGlmIHRoZXJlCisgICAgICAgICAgaXMgYSBtX3BkZkRvY3VtZW50IGFuZCB0aGUg
ZW50aXJlIGRvY3VtZW50IGRhdGEgZmluaXNoZWQgbG9hZGluZy4KKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpQREZQbHVnaW46OnJ1blNjcmlwdHNJblBERkRvY3VtZW50KTogRGVsZXRlZC4KKwogMjAyMC0w
My0xMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgdW51c2VkIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIgTWFnbmlmeSBtZXNzYWdlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2lu
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKaW5k
ZXggM2VlNTM0ZDc1YmQuLjI3MDQxMTk3MzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCkBAIC0yNDcsMTEgKzI0NywxMSBAQCBwcml2
YXRlOgogICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOwogICAgIFJlZjxXZWJDb3JlOjpTY3Jv
bGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CiAg
ICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsK
LSAgICB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpOworICAgIHZvaWQgZG9jdW1lbnREYXRhRGlk
RmluaXNoTG9hZGluZygpOwogICAgIHZvaWQgaW5zdGFsbFBERkRvY3VtZW50KCk7CiAgICAgdm9p
ZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKICAgICB2b2lkIGNhbGN1bGF0ZVNpemVzKCk7Ci0gICAg
dm9pZCBydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOworICAgIHZvaWQgdHJ5UnVuU2NyaXB0c0lu
UERGRG9jdW1lbnQoKTsKIAogICAgIE5TRXZlbnQgKm5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBs
dWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KaW5kZXggNTg1
YWU1NDg5YzYuLjhhM2ExN2ViNjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KQEAgLTgwNiw3ICs4MDYsNyBAQCB2b2lkIFBERlBs
dWdpbjo6dGhyZWFkRW50cnkoUmVmPFBERlBsdWdpbj4mJiBwcm90ZWN0ZWRQbHVnaW4pCiAgICAg
Zmlyc3RQYWdlU2VtYXBob3JlLndhaXQoKTsKIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICBwZGZM
b2coIkZpbmluaXNoZWQgcHJlbG9hZGluZyBmaXJzdCBwYWdlIik7CisgICAgcGRmTG9nKCJGaW5p
c2hlZCBwcmVsb2FkaW5nIGZpcnN0IHBhZ2UiKTsKICNlbmRpZgogCiAgICAgLy8gVGhlIG1haW4g
dGhyZWFkIGRpc3BhdGNoIGJlbG93IHJlbW92ZXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBQ
REYgdGhyZWFkLgpAQCAtOTIzLDcgKzkyMyw3IEBAIHZvaWQgUERGUGx1Z2luOjpCeXRlUmFuZ2VS
ZXF1ZXN0Ojpjb21wbGV0ZVdpdGhBY2N1bXVsYXRlZERhdGEoUERGUGx1Z2luJiBwbHVnaW4pCiAj
ZW5kaWYKIAogICAgIG1fY29tcGxldGlvbkhhbmRsZXIobV9hY2N1bXVsYXRlZERhdGEuZGF0YSgp
LCBtX2FjY3VtdWxhdGVkRGF0YS5zaXplKCkpOwotICAgIAorCiAgICAgaWYgKG1fc3RyZWFtTG9h
ZGVyKQogICAgICAgICBwbHVnaW4uZm9yZ2V0TG9hZGVyKCptX3N0cmVhbUxvYWRlcik7CiAKQEAg
LTE0MDcsNyArMTQwNyw3IEBAIHZvaWQgUERGUGx1Z2luOjpjb252ZXJ0UG9zdFNjcmlwdERhdGFJ
Zk5lZWRlZCgpCiAgICAgbV9kYXRhID0gUERGRG9jdW1lbnRJbWFnZTo6Y29udmVydFBvc3RTY3Jp
cHREYXRhVG9QREYoV1RGTW92ZShtX2RhdGEpKTsKIH0KIAotdm9pZCBQREZQbHVnaW46OnBkZkRv
Y3VtZW50RGlkTG9hZCgpCit2b2lkIFBERlBsdWdpbjo6ZG9jdW1lbnREYXRhRGlkRmluaXNoTG9h
ZGluZygpCiB7CiAgICAgYWRkQXJjaGl2ZVJlc291cmNlKCk7CiAKQEAgLTE0MjYsNiArMTQyNiw4
IEBAIHZvaWQgUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQogICAgICAgICBtX3BkZkRv
Y3VtZW50ID0gYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEYXRh
OnJhd0RhdGEoKV0pOwogICAgICAgICBpbnN0YWxsUERGRG9jdW1lbnQoKTsKICAgICB9CisKKyAg
ICB0cnlSdW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOwogfQogCiB2b2lkIFBERlBsdWdpbjo6aW5z
dGFsbFBERkRvY3VtZW50KCkKQEAgLTE0NDYsNyArMTQ0OCw3IEBAIHZvaWQgUERGUGx1Z2luOjpp
bnN0YWxsUERGRG9jdW1lbnQoKQogICAgIGNhbGN1bGF0ZVNpemVzKCk7CiAgICAgdXBkYXRlU2Ny
b2xsYmFycygpOwogCi0gICAgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKKyAgICB0cnlSdW5T
Y3JpcHRzSW5QREZEb2N1bWVudCgpOwogCiAgICAgaWYgKFttX3BkZkRvY3VtZW50IGlzTG9ja2Vk
XSkKICAgICAgICAgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsKQEAgLTE0OTQsNyArMTQ5Niw3
IEBAIHZvaWQgUERGUGx1Z2luOjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVh
bUlEKQogICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50
UmVxdWVzdElEKTsKIAogICAgIGNvbnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVkKCk7Ci0gICAg
cGRmRG9jdW1lbnREaWRMb2FkKCk7CisgICAgZG9jdW1lbnREYXRhRGlkRmluaXNoTG9hZGluZygp
OwogfQogCiB2b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwg
Ym9vbCB3YXNDYW5jZWxsZWQpCkBAIC0xNTQ0LDcgKzE1NDYsNyBAQCB2b2lkIFBERlBsdWdpbjo6
bWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgp
CiB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCiB7CiAgICAg
Y29udmVydFBvc3RTY3JpcHREYXRhSWZOZWVkZWQoKTsKLSAgICBwZGZEb2N1bWVudERpZExvYWQo
KTsKKyAgICBkb2N1bWVudERhdGFEaWRGaW5pc2hMb2FkaW5nKCk7CiB9CiAKIHZvaWQgUERGUGx1
Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wpCkBAIC0xNTU2LDE5ICsxNTU4LDQzIEBAIHZv
aWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wpCiAjZW5kaWYKIH0KIAotdm9p
ZCBQREZQbHVnaW46OnJ1blNjcmlwdHNJblBERkRvY3VtZW50KCkKK3ZvaWQgUERGUGx1Z2luOjp0
cnlSdW5TY3JpcHRzSW5QREZEb2N1bWVudCgpCiB7Ci0gICAgVmVjdG9yPFJldGFpblB0cjxDRlN0
cmluZ1JlZj4+IHNjcmlwdHM7Ci0gICAgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoW21fcGRm
RG9jdW1lbnQgZG9jdW1lbnRSZWZdLCBzY3JpcHRzKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCi0gICAgaWYgKHNjcmlwdHMuaXNFbXB0eSgpKQorICAgIGlmICghbV9wZGZEb2N1bWVu
dCB8fCAhbV9kb2N1bWVudEZpbmlzaGVkTG9hZGluZykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZSgwKTsKLSAgICBK
U09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOwotICAgIGZvciAoYXV0byYg
c2NyaXB0IDogc2NyaXB0cykKLSAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIE9wYXF1ZUpT
U3RyaW5nOjp0cnlDcmVhdGUoc2NyaXB0LmdldCgpKS5nZXQoKSwganNQREZEb2MsIG51bGxwdHIs
IDAsIG51bGxwdHIpOwotICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY3R4KTsKKyAgICBhdXRv
IGNvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0gKFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiYmIHNjcmlwdHMpIG11dGFibGUgewor
ICAgICAgICBpZiAoc2NyaXB0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZShudWxs
cHRyKTsKKyAgICAgICAgSlNPYmplY3RSZWYganNQREZEb2MgPSBtYWtlSlNQREZEb2MoY3R4KTsK
KyAgICAgICAgZm9yIChhdXRvJiBzY3JpcHQgOiBzY3JpcHRzKQorICAgICAgICAgICAgSlNFdmFs
dWF0ZVNjcmlwdChjdHgsIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoc2NyaXB0LmdldCgpKS5n
ZXQoKSwganNQREZEb2MsIG51bGxwdHIsIDEsIG51bGxwdHIpOworICAgICAgICBKU0dsb2JhbENv
bnRleHRSZWxlYXNlKGN0eCk7CisgICAgfTsKKworI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQ
SVMpCisgICAgYXV0byBzY3JpcHRVdGlsaXR5UXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiUERG
IHNjcmlwdCB1dGlsaXR5Iik7CisgICAgYXV0byYgcmF3UXVldWUgPSBzY3JpcHRVdGlsaXR5UXVl
dWUuZ2V0KCk7CisgICAgUmV0YWluUHRyPENHUERGRG9jdW1lbnRSZWY+IGRvY3VtZW50ID0gW21f
cGRmRG9jdW1lbnQgZG9jdW1lbnRSZWZdOworICAgIHJhd1F1ZXVlLmRpc3BhdGNoKFtzY3JpcHRV
dGlsaXR5UXVldWUgPSBXVEZNb3ZlKHNjcmlwdFV0aWxpdHlRdWV1ZSksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGRvY3VtZW50ID0gV1RGTW92ZShkb2N1
bWVudCldICgpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKwor
ICAgICAgICBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPj4gc2NyaXB0czsKKyAgICAgICAg
Z2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoZG9jdW1lbnQuZ2V0KCksIHNjcmlwdHMpOworCisg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIHNjcmlwdHMgPSBXVEZNb3ZlKHNjcmlwdHMpXSAoKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoc2NyaXB0cykpOworICAgICAg
ICB9KTsKKyAgICB9KTsKKyNlbHNlCisgICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+
IHNjcmlwdHM7CisgICAgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoW21fcGRmRG9jdW1lbnQg
ZG9jdW1lbnRSZWZdLCBzY3JpcHRzKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNj
cmlwdHMpKTsKKyNlbmRpZgogfQogCiB2b2lkIFBERlBsdWdpbjo6Y3JlYXRlUGFzc3dvcmRFbnRy
eUZvcm0oKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>