<?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>56692</bug_id>
          
          <creation_ts>2011-03-18 16:19:24 -0700</creation_ts>
          <short_desc>Add high-quality band-limited audio resampling algorithm</short_desc>
          <delta_ts>2011-03-22 14:34:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>369994</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-03-18 16:19:24 -0700</bug_when>
    <thetext>Add high-quality band-limited audio resampling algorithm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370003</commentid>
    <comment_count>1</comment_count>
      <attachid>86240</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-03-18 16:32:51 -0700</bug_when>
    <thetext>Created attachment 86240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370007</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-03-18 16:35:39 -0700</bug_when>
    <thetext>The code has been tested a fair bit by processing exponentially swept sine waves and diffing against the ideal generated result.  The code can be optimized further, but runs well enough to get us started.

Note: this code will not be used in the mac port, since CoreAudio&apos;s resampler is very good and better optimized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370947</commentid>
    <comment_count>3</comment_count>
      <attachid>86240</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-21 15:13:51 -0700</bug_when>
    <thetext>Comment on attachment 86240
Patch

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

There are a bunch of signed/unsigned mismatches that need to be dealt with because I&apos;m pretty sure they&apos;ll be flagged as errors on some platforms (I think Windows). Some assertions are also needed to ensure no out-of-bounds accesses.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:98
&gt; +    unsigned n = m_kernelSize;
&gt; +    int halfSize = n / 2;

Mixing of signed/unsigned; bad idea.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:102
&gt; +    for (int offsetIndex = 0; offsetIndex &lt;= m_numberOfKernelOffsets; ++offsetIndex) {

Mixing of signed/unsigned.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:105
&gt; +        for (int i = 0; i &lt; n; ++i) {

Signed/unsigned mismatch. I think you should consider just using signed ints everywhere.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:141
&gt; +    // Setup various region pointers in the buffer (see diagram above).

Please add some assertions to prevent out-of-bounds accesses. As far as I can tell the following are requirements:
  m_blockSize &gt;= m_kernelSize / 2
  numberOfSourceFrames &gt;= m_blockSize + m_kernelSize / 2
  m_inputBuffer.size() &gt;= m_blockSize + m_kernelSize
  m_kernelSize % 2 == 0

&gt; Source/WebCore/platform/audio/SincResampler.cpp:152
&gt; +    unsigned numberOfDestinationFrames = numberOfSourceFrames / m_scaleFactor;

Is there a warning about loss of precision because the denominator is a double?

&gt; Source/WebCore/platform/audio/SincResampler.cpp:178
&gt; +            float sum1 = 0.0;
&gt; +            float sum2 = 0.0;

The .0&apos;s here are unnecessary; see &quot;Floating point literals&quot; in http://www.webkit.org/coding/coding-style.html .

&gt; Source/WebCore/platform/audio/SincResampler.cpp:198
&gt; +                // Optimize size 32 and size 64 kernels by unrolling the while loop.

Might be worth mentioning the percentage speedup you get by doing this.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:325
&gt; +        memcpy(r1, r3, sizeof(float) * (m_kernelSize / 2) );
&gt; +        memcpy(r2, r4, sizeof(float) * (m_kernelSize / 2) );

Extra spaces before closing paren.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371554</commentid>
    <comment_count>4</comment_count>
      <attachid>86490</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-03-22 12:22:01 -0700</bug_when>
    <thetext>Created attachment 86490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371557</commentid>
    <comment_count>5</comment_count>
      <attachid>86240</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-03-22 12:26:37 -0700</bug_when>
    <thetext>Comment on attachment 86240
Patch

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

&gt;&gt; Source/WebCore/platform/audio/SincResampler.cpp:98
&gt;&gt; +    int halfSize = n / 2;
&gt; 
&gt; Mixing of signed/unsigned; bad idea.

FIXED

&gt;&gt; Source/WebCore/platform/audio/SincResampler.cpp:102
&gt;&gt; +    for (int offsetIndex = 0; offsetIndex &lt;= m_numberOfKernelOffsets; ++offsetIndex) {
&gt; 
&gt; Mixing of signed/unsigned.

FIXED

&gt;&gt; Source/WebCore/platform/audio/SincResampler.cpp:105
&gt;&gt; +        for (int i = 0; i &lt; n; ++i) {
&gt; 
&gt; Signed/unsigned mismatch. I think you should consider just using signed ints everywhere.

n is now int instead of unsigned

&gt;&gt; Source/WebCore/platform/audio/SincResampler.cpp:141
&gt;&gt; +    // Setup various region pointers in the buffer (see diagram above).
&gt; 
&gt; Please add some assertions to prevent out-of-bounds accesses. As far as I can tell the following are requirements:
&gt;   m_blockSize &gt;= m_kernelSize / 2
&gt;   numberOfSourceFrames &gt;= m_blockSize + m_kernelSize / 2
&gt;   m_inputBuffer.size() &gt;= m_blockSize + m_kernelSize
&gt;   m_kernelSize % 2 == 0

Added your suggested assertions, except the one about numberOfSourceFrames.  It can be smaller than you suggest because consumeSource() will zero-pad if there aren&apos;t enough source frames.

&gt;&gt; Source/WebCore/platform/audio/SincResampler.cpp:152
&gt;&gt; +    unsigned numberOfDestinationFrames = numberOfSourceFrames / m_scaleFactor;
&gt; 
&gt; Is there a warning about loss of precision because the denominator is a double?

I added a static_cast&lt;&gt; here

&gt;&gt; Source/WebCore/platform/audio/SincResampler.cpp:178
&gt;&gt; +            float sum2 = 0.0;
&gt; 
&gt; The .0&apos;s here are unnecessary; see &quot;Floating point literals&quot; in http://www.webkit.org/coding/coding-style.html .

FIXED

&gt;&gt; Source/WebCore/platform/audio/SincResampler.cpp:198
&gt;&gt; +                // Optimize size 32 and size 64 kernels by unrolling the while loop.
&gt; 
&gt; Might be worth mentioning the percentage speedup you get by doing this.

DONE

&gt;&gt; Source/WebCore/platform/audio/SincResampler.cpp:325
&gt;&gt; +        memcpy(r2, r4, sizeof(float) * (m_kernelSize / 2) );
&gt; 
&gt; Extra spaces before closing paren.

FIXED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371583</commentid>
    <comment_count>6</comment_count>
      <attachid>86490</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-22 13:13:48 -0700</bug_when>
    <thetext>Comment on attachment 86490
Patch

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

Looks better, thanks. Couple of additional minor issues you can fix upon landing.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:165
&gt; +    while (numberOfDestinationFrames &gt; 0) {

numberOfDestinationFrames is unsigned, so this test is not well written. Would be better as &quot;while (numberOfDestinationFrames)&quot;.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:316
&gt; +            numberOfDestinationFrames--;

In WebKit, prefer predecrement (--numberOfDestinationFrames).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371653</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-03-22 14:34:34 -0700</bug_when>
    <thetext>Committed r81702: &lt;http://trac.webkit.org/changeset/81702&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86240</attachid>
            <date>2011-03-18 16:32:51 -0700</date>
            <delta_ts>2011-03-22 12:26:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56692-20110318163250.patch</filename>
            <type>text/plain</type>
            <size>19305</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNTMwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDMtMTggIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgaGlnaC1xdWFsaXR5IGJhbmQtbGltaXRlZCBhdWRpbyBy
ZXNhbXBsaW5nIGFsZ29yaXRobQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTY2OTIKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9TaW5j
UmVzYW1wbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW5jUmVzYW1wbGVyOjpT
aW5jUmVzYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbmNSZXNhbXBsZXI6OmluaXRpYWxp
emVLZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6U2luY1Jlc2FtcGxlcjo6Y29uc3VtZVNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW5jUmVzYW1wbGVyOjpwcm9jZXNzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmg6IEFkZGVkLgorCiAyMDExLTAzLTE4ICBK
YW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
U2luY1Jlc2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vU2luY1Jlc2FtcGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJTaW5jUmVzYW1wbGVyLmgi
CisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
CisvLyBJbnB1dCBidWZmZXIgbGF5b3V0LCBkaXZpZGluZyB0aGUgdG90YWwgYnVmZmVyIGludG8g
cmVnaW9ucyAocjAgLSByNSk6CisvLworLy8gfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0t
LS0tLS0tLS0tLS0tfAorLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsb2NrU2l6ZSArIGtlcm5lbFNpemUgLyAyICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisvLyAgICAgICAgICAgICAgICAgICA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+Cisv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjAKKy8v
CisvLyAgIGtlcm5lbFNpemUgLyAyICAga2VybmVsU2l6ZSAvIDIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXJuZWxTaXplIC8gMiAgICAga2VybmVsU2l6ZSAvIDIgCisvLyA8LS0t
LS0tLS0tLS0tLS0tPiA8LS0tLS0tLS0tLS0tLS0tPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDwtLS0tLS0tLS0tLS0tLS0+IDwtLS0tLS0tLS0tLS0tLS0+CisvLyAgICAgICAgIHIxICAg
ICAgICAgICAgICAgIHIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcjMgICAgICAgICAgICAgICAgcjQKKy8vIAorLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmxvY2tTaXplICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+CisvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjUKKworLy8gVGhl
IEFsZ29yaXRobToKKy8vCisvLyAxKSBDb25zdW1lIGlucHV0IGZyYW1lcyBpbnRvIHIwIChyMSBp
cyB6ZXJvLWluaXRpYWxpemVkKS4KKy8vIDIpIFBvc2l0aW9uIGtlcm5lbCBjZW50ZXJlZCBhdCBz
dGFydCBvZiByMCAocjIpIGFuZCBnZW5lcmF0ZSBvdXRwdXQgZnJhbWVzIHVudGlsIGtlcm5lbCBp
cyBjZW50ZXJlZCBhdCBzdGFydCBvZiByNC4KKy8vICAgIG9yIHdlJ3ZlIGZpbmlzaGVkIGdlbmVy
YXRpbmcgYWxsIHRoZSBvdXRwdXQgZnJhbWVzLgorLy8gMykgQ29weSByMyB0byByMSBhbmQgcjQg
dG8gcjIuCisvLyA0KSBDb25zdW1lIGlucHV0IGZyYW1lcyBpbnRvIHI1ICh6ZXJvLXBhZCBpZiB3
ZSBydW4gb3V0IG9mIGlucHV0KS4KKy8vIDUpIEdvdG8gKDIpIHVudGlsIGFsbCBvZiBpbnB1dCBp
cyBjb25zdW1lZC4KKy8vCisvLyBub3RlOiB3ZSdyZSBnbG9zc2luZyBvdmVyIGhvdyB0aGUgc3Vi
LXNhbXBsZSBoYW5kbGluZyB3b3JrcyB3aXRoIG1fdmlydHVhbFNvdXJjZUluZGV4LCBldGMuCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2luY1Jlc2FtcGxlcjo6U2luY1Jlc2FtcGxlcihkb3Vi
bGUgc2NhbGVGYWN0b3IsIHVuc2lnbmVkIGtlcm5lbFNpemUsIHVuc2lnbmVkIG51bWJlck9mS2Vy
bmVsT2Zmc2V0cykKKyAgICA6IG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCisgICAgLCBtX2tl
cm5lbFNpemUoa2VybmVsU2l6ZSkKKyAgICAsIG1fbnVtYmVyT2ZLZXJuZWxPZmZzZXRzKG51bWJl
ck9mS2VybmVsT2Zmc2V0cykKKyAgICAsIG1fa2VybmVsU3RvcmFnZShtX2tlcm5lbFNpemUgKiAo
bV9udW1iZXJPZktlcm5lbE9mZnNldHMgKyAxKSkKKyAgICAsIG1fdmlydHVhbFNvdXJjZUluZGV4
KDAuMCkKKyAgICAsIG1fYmxvY2tTaXplKDUxMikKKyAgICAsIG1faW5wdXRCdWZmZXIobV9ibG9j
a1NpemUgKyBtX2tlcm5lbFNpemUpIC8vIFNlZSBpbnB1dCBidWZmZXIgbGF5b3V0IGFib3ZlLgor
ICAgICwgbV9zb3VyY2UoMCkKKyAgICAsIG1fc291cmNlRnJhbWVzQXZhaWxhYmxlKDApCit7Cisg
ICAgaW5pdGlhbGl6ZUtlcm5lbCgpOworfQorCit2b2lkIFNpbmNSZXNhbXBsZXI6OmluaXRpYWxp
emVLZXJuZWwoKQoreworICAgIC8vIEJsYWNrbWFuIHdpbmRvdyBwYXJhbWV0ZXJzLgorICAgIGRv
dWJsZSBhbHBoYSA9IDAuMTY7CisgICAgZG91YmxlIGEwID0gMC41ICogKDEuMCAtIGFscGhhKTsK
KyAgICBkb3VibGUgYTEgPSAwLjU7CisgICAgZG91YmxlIGEyID0gMC41ICogYWxwaGE7CisKKyAg
ICAvLyBzaW5jU2NhbGVGYWN0b3IgaXMgYmFzaWNhbGx5IHRoZSBub3JtYWxpemVkIGN1dG9mZiBm
cmVxdWVuY3kgb2YgdGhlIGxvdy1wYXNzIGZpbHRlci4KKyAgICBkb3VibGUgc2luY1NjYWxlRmFj
dG9yID0gbV9zY2FsZUZhY3RvciA+IDEuMCA/IDEuMCAvIG1fc2NhbGVGYWN0b3IgOiAxLjA7CisK
KyAgICAvLyBUaGUgc2luYyBmdW5jdGlvbiBpcyBhbiBpZGVhbGl6ZWQgYnJpY2std2FsbCBmaWx0
ZXIsIGJ1dCBzaW5jZSB3ZSdyZSB3aW5kb3dpbmcgaXQgdGhlCisgICAgLy8gdHJhbnNpdGlvbiBm
cm9tIHBhc3MgdG8gc3RvcCBkb2VzIG5vdCBoYXBwZW4gcmlnaHQgYXdheS4gU28gd2Ugc2hvdWxk
IGFkanVzdCB0aGUKKyAgICAvLyBsb3dwYXNzIGZpbHRlciBjdXRvZmYgc2xpZ2h0bHkgZG93bndh
cmQgdG8gYXZvaWQgc29tZSBhbGlhc2luZyBhdCB0aGUgdmVyeSBoaWdoLWVuZC4KKyAgICAvLyBG
SVhNRTogdGhpcyB2YWx1ZSBpcyBlbXBpcmljYWwgYW5kIHRvIGJlIG1vcmUgZXhhY3Qgc2hvdWxk
IHZhcnkgZGVwZW5kaW5nIG9uIG1fa2VybmVsU2l6ZS4KKyAgICBzaW5jU2NhbGVGYWN0b3IgKj0g
MC45OworCisgICAgdW5zaWduZWQgbiA9IG1fa2VybmVsU2l6ZTsKKyAgICBpbnQgaGFsZlNpemUg
PSBuIC8gMjsKKworICAgIC8vIEdlbmVyYXRlcyBhIHNldCBvZiB3aW5kb3dlZCBzaW5jKCkga2Vy
bmVscy4KKyAgICAvLyBXZSBnZW5lcmF0ZSBhIHJhbmdlIG9mIHN1Yi1zYW1wbGUgb2Zmc2V0cyBm
cm9tIDAuMCB0byAxLjAuCisgICAgZm9yIChpbnQgb2Zmc2V0SW5kZXggPSAwOyBvZmZzZXRJbmRl
eCA8PSBtX251bWJlck9mS2VybmVsT2Zmc2V0czsgKytvZmZzZXRJbmRleCkgeworICAgICAgICBk
b3VibGUgc3Vic2FtcGxlT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihvZmZzZXRJbmRleCkg
LyBtX251bWJlck9mS2VybmVsT2Zmc2V0czsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG47ICsraSkgeworICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgc2luYygpIHdpdGggb2Zmc2V0
LgorICAgICAgICAgICAgZG91YmxlIHMgPSBzaW5jU2NhbGVGYWN0b3IgKiBwaURvdWJsZSAqIChp
IC0gaGFsZlNpemUgLSBzdWJzYW1wbGVPZmZzZXQpOworICAgICAgICAgICAgZG91YmxlIHNpbmMg
PSAhcyA/IDEuMCA6IHNpbihzKSAvIHM7CisgICAgICAgICAgICBzaW5jICo9IHNpbmNTY2FsZUZh
Y3RvcjsKKworICAgICAgICAgICAgLy8gQ29tcHV0ZSBCbGFja21hbiB3aW5kb3csIG1hdGNoaW5n
IHRoZSBvZmZzZXQgb2YgdGhlIHNpbmMoKS4KKyAgICAgICAgICAgIGRvdWJsZSB4ID0gKGkgLSBz
dWJzYW1wbGVPZmZzZXQpIC8gbjsKKyAgICAgICAgICAgIGRvdWJsZSB3aW5kb3cgPSBhMCAtIGEx
ICogY29zKDIuMCAqIHBpRG91YmxlICogeCkgKyBhMiAqIGNvcyg0LjAgKiBwaURvdWJsZSAqIHgp
OworCisgICAgICAgICAgICAvLyBXaW5kb3cgdGhlIHNpbmMoKSBmdW5jdGlvbiBhbmQgc3RvcmUg
YXQgdGhlIGNvcnJlY3Qgb2Zmc2V0LgorICAgICAgICAgICAgbV9rZXJuZWxTdG9yYWdlW2kgKyBv
ZmZzZXRJbmRleCAqIG1fa2VybmVsU2l6ZV0gPSBzaW5jICogd2luZG93OworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIFNpbmNSZXNhbXBsZXI6OmNvbnN1bWVTb3VyY2UoZmxvYXQqIGJ1ZmZl
ciwgdW5zaWduZWQgbnVtYmVyT2ZTb3VyY2VGcmFtZXMpCit7CisgICAgQVNTRVJUKG1fc291cmNl
KTsKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ2xh
bXAgdG8gbnVtYmVyIG9mIGZyYW1lcyBhdmFpbGFibGUgYW5kIHplcm8tcGFkLgorICAgIHVuc2ln
bmVkIGZyYW1lc1RvQ29weSA9IG1pbihtX3NvdXJjZUZyYW1lc0F2YWlsYWJsZSwgbnVtYmVyT2ZT
b3VyY2VGcmFtZXMpOworICAgIG1lbWNweShidWZmZXIsIG1fc291cmNlLCBzaXplb2YoZmxvYXQp
ICogZnJhbWVzVG9Db3B5KTsKKyAgICAKKyAgICAvLyBaZXJvLXBhZCBpZiBuZWNlc3NhcnkuCisg
ICAgaWYgKGZyYW1lc1RvQ29weSA8IG51bWJlck9mU291cmNlRnJhbWVzKQorICAgICAgICBtZW1z
ZXQoYnVmZmVyICsgZnJhbWVzVG9Db3B5LCAwLCBzaXplb2YoZmxvYXQpICogKG51bWJlck9mU291
cmNlRnJhbWVzIC0gZnJhbWVzVG9Db3B5KSk7CisgICAgCisgICAgbV9zb3VyY2VGcmFtZXNBdmFp
bGFibGUgLT0gZnJhbWVzVG9Db3B5OworICAgIG1fc291cmNlICs9IG51bWJlck9mU291cmNlRnJh
bWVzOworfQorCit2b2lkIFNpbmNSZXNhbXBsZXI6OnByb2Nlc3MoZmxvYXQqIHNvdXJjZSwgZmxv
YXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBudW1iZXJPZlNvdXJjZUZyYW1lcykKK3sKKyAgICAv
LyBTZXR1cCB2YXJpb3VzIHJlZ2lvbiBwb2ludGVycyBpbiB0aGUgYnVmZmVyIChzZWUgZGlhZ3Jh
bSBhYm92ZSkuCisgICAgZmxvYXQqIHIwID0gbV9pbnB1dEJ1ZmZlci5kYXRhKCkgKyBtX2tlcm5l
bFNpemUgLyAyOworICAgIGZsb2F0KiByMSA9IG1faW5wdXRCdWZmZXIuZGF0YSgpOworICAgIGZs
b2F0KiByMiA9IHIwOworICAgIGZsb2F0KiByMyA9IHIwICsgbV9ibG9ja1NpemUgLSBtX2tlcm5l
bFNpemUgLyAyOworICAgIGZsb2F0KiByNCA9IHIwICsgbV9ibG9ja1NpemU7CisgICAgZmxvYXQq
IHI1ID0gcjAgKyBtX2tlcm5lbFNpemUgLyAyOworCisgICAgbV9zb3VyY2UgPSBzb3VyY2U7Cisg
ICAgbV9zb3VyY2VGcmFtZXNBdmFpbGFibGUgPSBudW1iZXJPZlNvdXJjZUZyYW1lczsKKworICAg
IHVuc2lnbmVkIG51bWJlck9mRGVzdGluYXRpb25GcmFtZXMgPSBudW1iZXJPZlNvdXJjZUZyYW1l
cyAvIG1fc2NhbGVGYWN0b3I7CisKKyAgICAvLyBTdGVwICgxKQorICAgIC8vIFByaW1lIHRoZSBp
bnB1dCBidWZmZXIuCisgICAgY29uc3VtZVNvdXJjZShyMCwgbV9ibG9ja1NpemUgKyBtX2tlcm5l
bFNpemUgLyAyKTsKKyAgICAKKyAgICAvLyBTdGVwICgyKQorICAgIG1fdmlydHVhbFNvdXJjZUlu
ZGV4ID0gMC4wOworCisgICAgd2hpbGUgKG51bWJlck9mRGVzdGluYXRpb25GcmFtZXMgPiAwKSB7
CisgICAgICAgIHdoaWxlIChtX3ZpcnR1YWxTb3VyY2VJbmRleCA8IG1fYmxvY2tTaXplKSB7Cisg
ICAgICAgICAgICAvLyBtX3ZpcnR1YWxTb3VyY2VJbmRleCBsaWVzIGluIGJldHdlZW4gdHdvIGtl
cm5lbCBvZmZzZXRzIHNvIGZpZ3VyZSBvdXQgd2hhdCB0aGV5IGFyZS4KKyAgICAgICAgICAgIGlu
dCBzb3VyY2VJbmRleEkgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fdmlydHVhbFNvdXJjZUluZGV4KTsK
KyAgICAgICAgICAgIGRvdWJsZSBzdWJzYW1wbGVSZW1haW5kZXIgPSBtX3ZpcnR1YWxTb3VyY2VJ
bmRleCAtIHNvdXJjZUluZGV4STsKKworICAgICAgICAgICAgZG91YmxlIHZpcnR1YWxPZmZzZXRJ
bmRleCA9IHN1YnNhbXBsZVJlbWFpbmRlciAqIG1fbnVtYmVyT2ZLZXJuZWxPZmZzZXRzOworICAg
ICAgICAgICAgaW50IG9mZnNldEluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsT2Zmc2V0
SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmbG9hdCogazEgPSBtX2tlcm5lbFN0
b3JhZ2UuZGF0YSgpICsgb2Zmc2V0SW5kZXggKiBtX2tlcm5lbFNpemU7CisgICAgICAgICAgICBm
bG9hdCogazIgPSBrMSArIG1fa2VybmVsU2l6ZTsKKworICAgICAgICAgICAgLy8gSW5pdGlhbGl6
ZSBpbnB1dCBwb2ludGVyIGJhc2VkIG9uIHF1YW50aXplZCBtX3ZpcnR1YWxTb3VyY2VJbmRleC4K
KyAgICAgICAgICAgIGZsb2F0KiBpbnB1dFAgPSByMSArIHNvdXJjZUluZGV4STsKKworICAgICAg
ICAgICAgLy8gV2UnbGwgY29tcHV0ZSAiY29udm9sdXRpb25zIiBmb3IgdGhlIHR3byBrZXJuZWxz
IHdoaWNoIHN0cmFkZGxlIG1fdmlydHVhbFNvdXJjZUluZGV4CisgICAgICAgICAgICBmbG9hdCBz
dW0xID0gMC4wOworICAgICAgICAgICAgZmxvYXQgc3VtMiA9IDAuMDsKKworICAgICAgICAgICAg
Ly8gRmlndXJlIG91dCBob3cgbXVjaCB0byB3ZWlnaHQgZWFjaCBrZXJuZWwncyAiY29udm9sdXRp
b24iLgorICAgICAgICAgICAgZG91YmxlIGtlcm5lbEludGVycG9sYXRpb25GYWN0b3IgPSB2aXJ0
dWFsT2Zmc2V0SW5kZXggLSBvZmZzZXRJbmRleDsKKworICAgICAgICAgICAgLy8gR2VuZXJhdGUg
YSBzaW5nbGUgb3V0cHV0IHNhbXBsZS4gCisgICAgICAgICAgICBpbnQgbiA9IG1fa2VybmVsU2l6
ZTsKKworICAgICAgICAgICAgLy8gRklYTUU6IGFkZCBTSU1EIG9wdGltaXphdGlvbnMgZm9yIHRo
ZSBmb2xsb3dpbmcuIFRoZSBzY2FsYXIgY29kZS1wYXRoIGNhbiBwcm9iYWJseSBhbHNvIGJlIG9w
dGltaXplZCBiZXR0ZXIuCisKKyNkZWZpbmUgQ09OVk9MVkVfT05FX1NBTVBMRSAgICAgIFwKKyAg
ICAgICAgICAgIGlucHV0ID0gKmlucHV0UCsrOyAgIFwKKyAgICAgICAgICAgIHN1bTEgKz0gaW5w
dXQgKiAqazE7IFwKKyAgICAgICAgICAgIHN1bTIgKz0gaW5wdXQgKiAqazI7IFwKKyAgICAgICAg
ICAgICsrazE7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICsrazI7CisKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBpbnB1dDsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyBPcHRpbWl6ZSBzaXplIDMyIGFuZCBzaXplIDY0IGtlcm5lbHMgYnkg
dW5yb2xsaW5nIHRoZSB3aGlsZSBsb29wLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChuID09IDMyKSB7CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIKKyAg
ICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzCisgICAgICAgICAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNAorICAgICAgICAgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDUKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA2CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNwor
ICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDgKKyAgICAgICAgICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA5CisgICAgICAgICAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMTAKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAxMQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDEyCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTMKKyAgICAg
ICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNAorICAgICAgICAgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE1CisgICAgICAgICAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMTYKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAxNworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE4
CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTkKKyAgICAgICAg
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMAorICAgICAgICAgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIxCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMjIKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAyMworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI0Cisg
ICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjUKKyAgICAgICAgICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyNgorICAgICAgICAgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDI3CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMjgKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAyOQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMwCisgICAg
ICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzEKKyAgICAgICAgICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMgorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobiA9PSA2NCkgeworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDEKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyCisgICAgICAg
ICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMworICAgICAgICAgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyA1CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNgorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDcKKyAgICAg
ICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA4CisgICAgICAgICAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gOQorICAgICAgICAgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDEwCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMTEKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMgor
ICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEzCisgICAgICAgICAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTQKKyAgICAgICAgICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDE2CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMTcKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxOAorICAg
ICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE5CisgICAgICAgICAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjAKKyAgICAgICAgICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyAyMQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDIyCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8g
MjMKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyNAorICAgICAg
ICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI1CisgICAgICAgICAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjYKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAyNworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDI4CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjkK
KyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMAorICAgICAgICAg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMxCisgICAgICAgICAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzIKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyAzMworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDM0CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzUKKyAg
ICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNgorICAgICAgICAgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDM3CisgICAgICAgICAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMzgKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAzOQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDQwCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDEKKyAgICAg
ICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MgorICAgICAgICAgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQzCisgICAgICAgICAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gNDQKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyA0NQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ2
CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDcKKyAgICAgICAg
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0OAorICAgICAgICAgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ5CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gNTAKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyA1MQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUyCisg
ICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTMKKyAgICAgICAgICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1NAorICAgICAgICAgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDU1CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNTYKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA1NworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU4CisgICAg
ICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTkKKyAgICAgICAgICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MAorICAgICAgICAgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDYxCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNjIKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2
MworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDY0CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4tLSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTm9uLW9wdGltaXplZCB1c2luZyBhY3R1YWwgd2hpbGUg
bG9vcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gTGluZWFybHkgaW50ZXJwb2xhdGUgdGhlIHR3byAiY29udm9sdXRpb25zIi4K
KyAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSAoMS4wIC0ga2VybmVsSW50ZXJwb2xhdGlvbkZh
Y3RvcikgKiBzdW0xICsga2VybmVsSW50ZXJwb2xhdGlvbkZhY3RvciAqIHN1bTI7CisKKyAgICAg
ICAgICAgICpkZXN0aW5hdGlvbisrID0gcmVzdWx0OworCisgICAgICAgICAgICBudW1iZXJPZkRl
c3RpbmF0aW9uRnJhbWVzLS07CisgICAgICAgICAgICBpZiAoIW51bWJlck9mRGVzdGluYXRpb25G
cmFtZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBBZHZhbmNl
IHRoZSB2aXJ0dWFsIGluZGV4LgorICAgICAgICAgICAgbV92aXJ0dWFsU291cmNlSW5kZXggKz0g
bV9zY2FsZUZhY3RvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdyYXAgYmFjayBhcm91bmQg
dG8gdGhlIHN0YXJ0LgorICAgICAgICBtX3ZpcnR1YWxTb3VyY2VJbmRleCAtPSBtX2Jsb2NrU2l6
ZTsKKworICAgICAgICAvLyBTdGVwICgzKSBDb3B5IHIzIHRvIHIxIGFuZCByNCB0byByMi4KKyAg
ICAgICAgLy8gVGhpcyB3cmFwcyB0aGUgbGFzdCBpbnB1dCBmcmFtZXMgYmFjayB0byB0aGUgc3Rh
cnQgb2YgdGhlIGJ1ZmZlci4KKyAgICAgICAgbWVtY3B5KHIxLCByMywgc2l6ZW9mKGZsb2F0KSAq
IChtX2tlcm5lbFNpemUgLyAyKSApOworICAgICAgICBtZW1jcHkocjIsIHI0LCBzaXplb2YoZmxv
YXQpICogKG1fa2VybmVsU2l6ZSAvIDIpICk7CisKKyAgICAgICAgLy8gU3RlcCAoNCkKKyAgICAg
ICAgLy8gUmVmcmVzaCB0aGUgYnVmZmVyIHdpdGggbW9yZSBpbnB1dC4KKyAgICAgICAgY29uc3Vt
ZVNvdXJjZShyNSwgbV9ibG9ja1NpemUpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vU2luY1Jlc2FtcGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1NpbmNSZXNhbXBs
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1NpbmNS
ZXNhbXBsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2luY1Jl
c2FtcGxlcl9oCisjZGVmaW5lIFNpbmNSZXNhbXBsZXJfaAorCisjaW5jbHVkZSAiQXVkaW9BcnJh
eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNpbmNSZXNhbXBsZXIgaXMgYSBoaWdo
LXF1YWxpdHkgc2FtcGxlLXJhdGUgY29udmVydGVyLgorCitjbGFzcyBTaW5jUmVzYW1wbGVyIHsK
K3B1YmxpYzogICAKKyAgICAvLyBzY2FsZUZhY3RvciA9PSBzb3VyY2VTYW1wbGVSYXRlIC8gZGVz
dGluYXRpb25TYW1wbGVSYXRlCisgICAgLy8ga2VybmVsU2l6ZSBjYW4gYmUgYWRqdXN0ZWQgZm9y
IHF1YWxpdHkgKGhpZ2hlciBpcyBiZXR0ZXIpCisgICAgLy8gbnVtYmVyT2ZLZXJuZWxPZmZzZXRz
IGlzIHVzZWQgZm9yIGludGVycG9sYXRpb24gYW5kIGlzIHRoZSBudW1iZXIgb2Ygc3ViLXNhbXBs
ZSBrZXJuZWwgc2hpZnRzLgorICAgIFNpbmNSZXNhbXBsZXIoZG91YmxlIHNjYWxlRmFjdG9yLCB1
bnNpZ25lZCBrZXJuZWxTaXplID0gNjQsIHVuc2lnbmVkIG51bWJlck9mS2VybmVsT2Zmc2V0cyA9
IDMyKTsKKyAgICAKKyAgICAvLyBQcm9jZXNzZXMgbnVtYmVyT2ZTb3VyY2VGcmFtZXMgZnJvbSBz
b3VyY2UgdG8gcHJvZHVjZSBudW1iZXJPZlNvdXJjZUZyYW1lcyAvIHNjYWxlRmFjdG9yIGZyYW1l
cyBpbiBkZXN0aW5hdGlvbi4KKyAgICB2b2lkIHByb2Nlc3MoZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBudW1iZXJPZlNvdXJjZUZyYW1lcyk7CisgICAgCisgICAg
Ly8gRklYTUU6IHdlIGNhbiBhZGQgYSBwcm9jZXNzKCkgbWV0aG9kIHdoaWNoIHRha2VzIGFuIGlu
cHV0IHNvdXJjZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igc3RyZWFtaW5nIGFwcGxpY2F0aW9ucwor
ICAgIC8vIHdoZXJlIHRoZSBlbnRpcmUgaW5wdXQgYnVmZmVyIGlzIG5vdCBhbGwgYXZhaWxhYmxl
LgorICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgaW5pdGlhbGl6ZUtlcm5lbCgpOworICAgIHZv
aWQgY29uc3VtZVNvdXJjZShmbG9hdCogYnVmZmVyLCB1bnNpZ25lZCBudW1iZXJPZlNvdXJjZUZy
YW1lcyk7CisgICAgCisgICAgZG91YmxlIG1fc2NhbGVGYWN0b3I7CisgICAgdW5zaWduZWQgbV9r
ZXJuZWxTaXplOworICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZLZXJuZWxPZmZzZXRzOworCisgICAg
Ly8gbV9rZXJuZWxTdG9yYWdlIGhhcyBtX251bWJlck9mS2VybmVsT2Zmc2V0cyBrZXJuZWxzIGJh
Y2stdG8tYmFjaywgZWFjaCBvZiBzaXplIG1fa2VybmVsU2l6ZS4KKyAgICAvLyBUaGUga2VybmVs
IG9mZnNldHMgYXJlIHN1Yi1zYW1wbGUgc2hpZnRzIG9mIGEgd2luZG93ZWQgc2luYygpIHNoaWZ0
ZWQgZnJvbSAwLjAgdG8gMS4wIHNhbXBsZS4KKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9rZXJuZWxT
dG9yYWdlOworICAgIAorICAgIC8vIG1fdmlydHVhbFNvdXJjZUluZGV4IGlzIGFuIGluZGV4IG9u
IHRoZSBzb3VyY2UgaW5wdXQgYnVmZmVyIHdpdGggc3ViLXNhbXBsZSBwcmVjaXNpb24uCisgICAg
Ly8gSXQgbXVzdCBiZSBkb3VibGUgcHJlY2lzaW9uIHRvIGF2b2lkIGRyaWZ0LgorICAgIGRvdWJs
ZSBtX3ZpcnR1YWxTb3VyY2VJbmRleDsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHRoZSBudW1iZXIg
b2YgZGVzdGluYXRpb24gZnJhbWVzIHdlIGdlbmVyYXRlIHBlciBwcm9jZXNzaW5nIHBhc3Mgb24g
dGhlIGJ1ZmZlci4KKyAgICB1bnNpZ25lZCBtX2Jsb2NrU2l6ZTsKKworICAgIC8vIFNvdXJjZSBp
cyBjb3BpZWQgaW50byB0aGlzIGJ1ZmZlciBmb3IgZWFjaCBwcm9jZXNzaW5nIHBhc3MuCisgICAg
QXVkaW9GbG9hdEFycmF5IG1faW5wdXRCdWZmZXI7CisKKyAgICBmbG9hdCogbV9zb3VyY2U7Cisg
ICAgdW5zaWduZWQgbV9zb3VyY2VGcmFtZXNBdmFpbGFibGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTaW5jUmVzYW1wbGVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86490</attachid>
            <date>2011-03-22 12:22:01 -0700</date>
            <delta_ts>2011-03-22 13:13:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56692-20110322122159.patch</filename>
            <type>text/plain</type>
            <size>19562</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNjg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDMtMjIgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgaGlnaC1xdWFsaXR5IGJhbmQtbGltaXRlZCBhdWRpbyBy
ZXNhbXBsaW5nIGFsZ29yaXRobQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTY2OTIKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9TaW5j
UmVzYW1wbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW5jUmVzYW1wbGVyOjpT
aW5jUmVzYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbmNSZXNhbXBsZXI6OmluaXRpYWxp
emVLZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6U2luY1Jlc2FtcGxlcjo6Y29uc3VtZVNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW5jUmVzYW1wbGVyOjpwcm9jZXNzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmg6IEFkZGVkLgorCiAyMDExLTAzLTIyICBI
dWFodWkgV3UgIDxtZWRpYWRlcGVuZGVudEBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU3RldmUgQmxvY2suCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9TaW5j
UmVzYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9TaW5jUmVzYW1wbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1NpbmNSZXNhbXBsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlNpbmNSZXNhbXBsZXIuaCIKKwor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKy8v
IElucHV0IGJ1ZmZlciBsYXlvdXQsIGRpdmlkaW5nIHRoZSB0b3RhbCBidWZmZXIgaW50byByZWdp
b25zIChyMCAtIHI1KToKKy8vCisvLyB8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0t
LS0tLS0tLS18CisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmxvY2tTaXplICsga2VybmVsU2l6ZSAvIDIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKy8vICAgICAgICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KKy8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByMAorLy8KKy8v
ICAga2VybmVsU2l6ZSAvIDIgICBrZXJuZWxTaXplIC8gMiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtlcm5lbFNpemUgLyAyICAgICBrZXJuZWxTaXplIC8gMiAKKy8vIDwtLS0tLS0t
LS0tLS0tLS0+IDwtLS0tLS0tLS0tLS0tLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PC0tLS0tLS0tLS0tLS0tLT4gPC0tLS0tLS0tLS0tLS0tLT4KKy8vICAgICAgICAgcjEgICAgICAg
ICAgICAgICAgcjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
MyAgICAgICAgICAgICAgICByNAorLy8gCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBibG9ja1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KKy8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByNQorCisvLyBUaGUgQWxn
b3JpdGhtOgorLy8KKy8vIDEpIENvbnN1bWUgaW5wdXQgZnJhbWVzIGludG8gcjAgKHIxIGlzIHpl
cm8taW5pdGlhbGl6ZWQpLgorLy8gMikgUG9zaXRpb24ga2VybmVsIGNlbnRlcmVkIGF0IHN0YXJ0
IG9mIHIwIChyMikgYW5kIGdlbmVyYXRlIG91dHB1dCBmcmFtZXMgdW50aWwga2VybmVsIGlzIGNl
bnRlcmVkIGF0IHN0YXJ0IG9mIHI0LgorLy8gICAgb3Igd2UndmUgZmluaXNoZWQgZ2VuZXJhdGlu
ZyBhbGwgdGhlIG91dHB1dCBmcmFtZXMuCisvLyAzKSBDb3B5IHIzIHRvIHIxIGFuZCByNCB0byBy
Mi4KKy8vIDQpIENvbnN1bWUgaW5wdXQgZnJhbWVzIGludG8gcjUgKHplcm8tcGFkIGlmIHdlIHJ1
biBvdXQgb2YgaW5wdXQpLgorLy8gNSkgR290byAoMikgdW50aWwgYWxsIG9mIGlucHV0IGlzIGNv
bnN1bWVkLgorLy8KKy8vIG5vdGU6IHdlJ3JlIGdsb3NzaW5nIG92ZXIgaG93IHRoZSBzdWItc2Ft
cGxlIGhhbmRsaW5nIHdvcmtzIHdpdGggbV92aXJ0dWFsU291cmNlSW5kZXgsIGV0Yy4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitTaW5jUmVzYW1wbGVyOjpTaW5jUmVzYW1wbGVyKGRvdWJsZSBz
Y2FsZUZhY3RvciwgdW5zaWduZWQga2VybmVsU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZLZXJuZWxP
ZmZzZXRzKQorICAgIDogbV9zY2FsZUZhY3RvcihzY2FsZUZhY3RvcikKKyAgICAsIG1fa2VybmVs
U2l6ZShrZXJuZWxTaXplKQorICAgICwgbV9udW1iZXJPZktlcm5lbE9mZnNldHMobnVtYmVyT2ZL
ZXJuZWxPZmZzZXRzKQorICAgICwgbV9rZXJuZWxTdG9yYWdlKG1fa2VybmVsU2l6ZSAqIChtX251
bWJlck9mS2VybmVsT2Zmc2V0cyArIDEpKQorICAgICwgbV92aXJ0dWFsU291cmNlSW5kZXgoMC4w
KQorICAgICwgbV9ibG9ja1NpemUoNTEyKQorICAgICwgbV9pbnB1dEJ1ZmZlcihtX2Jsb2NrU2l6
ZSArIG1fa2VybmVsU2l6ZSkgLy8gU2VlIGlucHV0IGJ1ZmZlciBsYXlvdXQgYWJvdmUuCisgICAg
LCBtX3NvdXJjZSgwKQorICAgICwgbV9zb3VyY2VGcmFtZXNBdmFpbGFibGUoMCkKK3sKKyAgICBp
bml0aWFsaXplS2VybmVsKCk7Cit9CisKK3ZvaWQgU2luY1Jlc2FtcGxlcjo6aW5pdGlhbGl6ZUtl
cm5lbCgpCit7CisgICAgLy8gQmxhY2ttYW4gd2luZG93IHBhcmFtZXRlcnMuCisgICAgZG91Ymxl
IGFscGhhID0gMC4xNjsKKyAgICBkb3VibGUgYTAgPSAwLjUgKiAoMS4wIC0gYWxwaGEpOworICAg
IGRvdWJsZSBhMSA9IDAuNTsKKyAgICBkb3VibGUgYTIgPSAwLjUgKiBhbHBoYTsKKworICAgIC8v
IHNpbmNTY2FsZUZhY3RvciBpcyBiYXNpY2FsbHkgdGhlIG5vcm1hbGl6ZWQgY3V0b2ZmIGZyZXF1
ZW5jeSBvZiB0aGUgbG93LXBhc3MgZmlsdGVyLgorICAgIGRvdWJsZSBzaW5jU2NhbGVGYWN0b3Ig
PSBtX3NjYWxlRmFjdG9yID4gMS4wID8gMS4wIC8gbV9zY2FsZUZhY3RvciA6IDEuMDsKKworICAg
IC8vIFRoZSBzaW5jIGZ1bmN0aW9uIGlzIGFuIGlkZWFsaXplZCBicmljay13YWxsIGZpbHRlciwg
YnV0IHNpbmNlIHdlJ3JlIHdpbmRvd2luZyBpdCB0aGUKKyAgICAvLyB0cmFuc2l0aW9uIGZyb20g
cGFzcyB0byBzdG9wIGRvZXMgbm90IGhhcHBlbiByaWdodCBhd2F5LiBTbyB3ZSBzaG91bGQgYWRq
dXN0IHRoZQorICAgIC8vIGxvd3Bhc3MgZmlsdGVyIGN1dG9mZiBzbGlnaHRseSBkb3dud2FyZCB0
byBhdm9pZCBzb21lIGFsaWFzaW5nIGF0IHRoZSB2ZXJ5IGhpZ2gtZW5kLgorICAgIC8vIEZJWE1F
OiB0aGlzIHZhbHVlIGlzIGVtcGlyaWNhbCBhbmQgdG8gYmUgbW9yZSBleGFjdCBzaG91bGQgdmFy
eSBkZXBlbmRpbmcgb24gbV9rZXJuZWxTaXplLgorICAgIHNpbmNTY2FsZUZhY3RvciAqPSAwLjk7
CisKKyAgICBpbnQgbiA9IG1fa2VybmVsU2l6ZTsKKyAgICBpbnQgaGFsZlNpemUgPSBuIC8gMjsK
KworICAgIC8vIEdlbmVyYXRlcyBhIHNldCBvZiB3aW5kb3dlZCBzaW5jKCkga2VybmVscy4KKyAg
ICAvLyBXZSBnZW5lcmF0ZSBhIHJhbmdlIG9mIHN1Yi1zYW1wbGUgb2Zmc2V0cyBmcm9tIDAuMCB0
byAxLjAuCisgICAgZm9yICh1bnNpZ25lZCBvZmZzZXRJbmRleCA9IDA7IG9mZnNldEluZGV4IDw9
IG1fbnVtYmVyT2ZLZXJuZWxPZmZzZXRzOyArK29mZnNldEluZGV4KSB7CisgICAgICAgIGRvdWJs
ZSBzdWJzYW1wbGVPZmZzZXQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG9mZnNldEluZGV4KSAvIG1f
bnVtYmVyT2ZLZXJuZWxPZmZzZXRzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg
KytpKSB7CisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBzaW5jKCkgd2l0aCBvZmZzZXQuCisg
ICAgICAgICAgICBkb3VibGUgcyA9IHNpbmNTY2FsZUZhY3RvciAqIHBpRG91YmxlICogKGkgLSBo
YWxmU2l6ZSAtIHN1YnNhbXBsZU9mZnNldCk7CisgICAgICAgICAgICBkb3VibGUgc2luYyA9ICFz
ID8gMS4wIDogc2luKHMpIC8gczsKKyAgICAgICAgICAgIHNpbmMgKj0gc2luY1NjYWxlRmFjdG9y
OworCisgICAgICAgICAgICAvLyBDb21wdXRlIEJsYWNrbWFuIHdpbmRvdywgbWF0Y2hpbmcgdGhl
IG9mZnNldCBvZiB0aGUgc2luYygpLgorICAgICAgICAgICAgZG91YmxlIHggPSAoaSAtIHN1YnNh
bXBsZU9mZnNldCkgLyBuOworICAgICAgICAgICAgZG91YmxlIHdpbmRvdyA9IGEwIC0gYTEgKiBj
b3MoMi4wICogcGlEb3VibGUgKiB4KSArIGEyICogY29zKDQuMCAqIHBpRG91YmxlICogeCk7CisK
KyAgICAgICAgICAgIC8vIFdpbmRvdyB0aGUgc2luYygpIGZ1bmN0aW9uIGFuZCBzdG9yZSBhdCB0
aGUgY29ycmVjdCBvZmZzZXQuCisgICAgICAgICAgICBtX2tlcm5lbFN0b3JhZ2VbaSArIG9mZnNl
dEluZGV4ICogbV9rZXJuZWxTaXplXSA9IHNpbmMgKiB3aW5kb3c7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgU2luY1Jlc2FtcGxlcjo6Y29uc3VtZVNvdXJjZShmbG9hdCogYnVmZmVyLCB1
bnNpZ25lZCBudW1iZXJPZlNvdXJjZUZyYW1lcykKK3sKKyAgICBBU1NFUlQobV9zb3VyY2UpOwor
ICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBDbGFtcCB0
byBudW1iZXIgb2YgZnJhbWVzIGF2YWlsYWJsZSBhbmQgemVyby1wYWQuCisgICAgdW5zaWduZWQg
ZnJhbWVzVG9Db3B5ID0gbWluKG1fc291cmNlRnJhbWVzQXZhaWxhYmxlLCBudW1iZXJPZlNvdXJj
ZUZyYW1lcyk7CisgICAgbWVtY3B5KGJ1ZmZlciwgbV9zb3VyY2UsIHNpemVvZihmbG9hdCkgKiBm
cmFtZXNUb0NvcHkpOworICAgIAorICAgIC8vIFplcm8tcGFkIGlmIG5lY2Vzc2FyeS4KKyAgICBp
ZiAoZnJhbWVzVG9Db3B5IDwgbnVtYmVyT2ZTb3VyY2VGcmFtZXMpCisgICAgICAgIG1lbXNldChi
dWZmZXIgKyBmcmFtZXNUb0NvcHksIDAsIHNpemVvZihmbG9hdCkgKiAobnVtYmVyT2ZTb3VyY2VG
cmFtZXMgLSBmcmFtZXNUb0NvcHkpKTsKKyAgICAKKyAgICBtX3NvdXJjZUZyYW1lc0F2YWlsYWJs
ZSAtPSBmcmFtZXNUb0NvcHk7CisgICAgbV9zb3VyY2UgKz0gbnVtYmVyT2ZTb3VyY2VGcmFtZXM7
Cit9CisKK3ZvaWQgU2luY1Jlc2FtcGxlcjo6cHJvY2VzcyhmbG9hdCogc291cmNlLCBmbG9hdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIG51bWJlck9mU291cmNlRnJhbWVzKQoreworICAgIEFTU0VS
VChtX2Jsb2NrU2l6ZSA+IG1fa2VybmVsU2l6ZSk7CisgICAgQVNTRVJUKG1faW5wdXRCdWZmZXIu
c2l6ZSgpID49IG1fYmxvY2tTaXplICsgbV9rZXJuZWxTaXplKTsKKyAgICBBU1NFUlQoIShtX2tl
cm5lbFNpemUgJSAyKSk7CisgICAgCisgICAgLy8gU2V0dXAgdmFyaW91cyByZWdpb24gcG9pbnRl
cnMgaW4gdGhlIGJ1ZmZlciAoc2VlIGRpYWdyYW0gYWJvdmUpLgorICAgIGZsb2F0KiByMCA9IG1f
aW5wdXRCdWZmZXIuZGF0YSgpICsgbV9rZXJuZWxTaXplIC8gMjsKKyAgICBmbG9hdCogcjEgPSBt
X2lucHV0QnVmZmVyLmRhdGEoKTsKKyAgICBmbG9hdCogcjIgPSByMDsKKyAgICBmbG9hdCogcjMg
PSByMCArIG1fYmxvY2tTaXplIC0gbV9rZXJuZWxTaXplIC8gMjsKKyAgICBmbG9hdCogcjQgPSBy
MCArIG1fYmxvY2tTaXplOworICAgIGZsb2F0KiByNSA9IHIwICsgbV9rZXJuZWxTaXplIC8gMjsK
KworICAgIG1fc291cmNlID0gc291cmNlOworICAgIG1fc291cmNlRnJhbWVzQXZhaWxhYmxlID0g
bnVtYmVyT2ZTb3VyY2VGcmFtZXM7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkRlc3RpbmF0aW9u
RnJhbWVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bWJlck9mU291cmNlRnJhbWVzIC8gbV9z
Y2FsZUZhY3Rvcik7CisKKyAgICAvLyBTdGVwICgxKQorICAgIC8vIFByaW1lIHRoZSBpbnB1dCBi
dWZmZXIuCisgICAgY29uc3VtZVNvdXJjZShyMCwgbV9ibG9ja1NpemUgKyBtX2tlcm5lbFNpemUg
LyAyKTsKKyAgICAKKyAgICAvLyBTdGVwICgyKQorICAgIG1fdmlydHVhbFNvdXJjZUluZGV4ID0g
MDsKKworICAgIHdoaWxlIChudW1iZXJPZkRlc3RpbmF0aW9uRnJhbWVzID4gMCkgeworICAgICAg
ICB3aGlsZSAobV92aXJ0dWFsU291cmNlSW5kZXggPCBtX2Jsb2NrU2l6ZSkgeworICAgICAgICAg
ICAgLy8gbV92aXJ0dWFsU291cmNlSW5kZXggbGllcyBpbiBiZXR3ZWVuIHR3byBrZXJuZWwgb2Zm
c2V0cyBzbyBmaWd1cmUgb3V0IHdoYXQgdGhleSBhcmUuCisgICAgICAgICAgICBpbnQgc291cmNl
SW5kZXhJID0gc3RhdGljX2Nhc3Q8aW50PihtX3ZpcnR1YWxTb3VyY2VJbmRleCk7CisgICAgICAg
ICAgICBkb3VibGUgc3Vic2FtcGxlUmVtYWluZGVyID0gbV92aXJ0dWFsU291cmNlSW5kZXggLSBz
b3VyY2VJbmRleEk7CisKKyAgICAgICAgICAgIGRvdWJsZSB2aXJ0dWFsT2Zmc2V0SW5kZXggPSBz
dWJzYW1wbGVSZW1haW5kZXIgKiBtX251bWJlck9mS2VybmVsT2Zmc2V0czsKKyAgICAgICAgICAg
IGludCBvZmZzZXRJbmRleCA9IHN0YXRpY19jYXN0PGludD4odmlydHVhbE9mZnNldEluZGV4KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZmxvYXQqIGsxID0gbV9rZXJuZWxTdG9yYWdlLmRh
dGEoKSArIG9mZnNldEluZGV4ICogbV9rZXJuZWxTaXplOworICAgICAgICAgICAgZmxvYXQqIGsy
ID0gazEgKyBtX2tlcm5lbFNpemU7CisKKyAgICAgICAgICAgIC8vIEluaXRpYWxpemUgaW5wdXQg
cG9pbnRlciBiYXNlZCBvbiBxdWFudGl6ZWQgbV92aXJ0dWFsU291cmNlSW5kZXguCisgICAgICAg
ICAgICBmbG9hdCogaW5wdXRQID0gcjEgKyBzb3VyY2VJbmRleEk7CisKKyAgICAgICAgICAgIC8v
IFdlJ2xsIGNvbXB1dGUgImNvbnZvbHV0aW9ucyIgZm9yIHRoZSB0d28ga2VybmVscyB3aGljaCBz
dHJhZGRsZSBtX3ZpcnR1YWxTb3VyY2VJbmRleAorICAgICAgICAgICAgZmxvYXQgc3VtMSA9IDA7
CisgICAgICAgICAgICBmbG9hdCBzdW0yID0gMDsKKworICAgICAgICAgICAgLy8gRmlndXJlIG91
dCBob3cgbXVjaCB0byB3ZWlnaHQgZWFjaCBrZXJuZWwncyAiY29udm9sdXRpb24iLgorICAgICAg
ICAgICAgZG91YmxlIGtlcm5lbEludGVycG9sYXRpb25GYWN0b3IgPSB2aXJ0dWFsT2Zmc2V0SW5k
ZXggLSBvZmZzZXRJbmRleDsKKworICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBzaW5nbGUgb3V0
cHV0IHNhbXBsZS4gCisgICAgICAgICAgICBpbnQgbiA9IG1fa2VybmVsU2l6ZTsKKworICAgICAg
ICAgICAgLy8gRklYTUU6IGFkZCBTSU1EIG9wdGltaXphdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcu
IFRoZSBzY2FsYXIgY29kZS1wYXRoIGNhbiBwcm9iYWJseSBhbHNvIGJlIG9wdGltaXplZCBiZXR0
ZXIuCisKKyNkZWZpbmUgQ09OVk9MVkVfT05FX1NBTVBMRSAgICAgIFwKKyAgICAgICAgICAgIGlu
cHV0ID0gKmlucHV0UCsrOyAgIFwKKyAgICAgICAgICAgIHN1bTEgKz0gaW5wdXQgKiAqazE7IFwK
KyAgICAgICAgICAgIHN1bTIgKz0gaW5wdXQgKiAqazI7IFwKKyAgICAgICAgICAgICsrazE7ICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICsrazI7CisKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBmbG9hdCBpbnB1dDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBPcHRpbWl6ZSBzaXplIDMyIGFuZCBzaXplIDY0IGtlcm5lbHMgYnkgdW5yb2xsaW5nIHRo
ZSB3aGlsZSBsb29wLgorICAgICAgICAgICAgICAgIC8vIEEgMjAgLSAzMCUgc3BlZWQgaW1wcm92
ZW1lbnQgd2FzIG1lYXN1cmVkIGluIHNvbWUgY2FzZXMgYnkgdXNpbmcgdGhpcyBhcHByb2FjaC4K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobiA9PSAzMikgeworICAgICAg
ICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEKKyAgICAgICAgICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDQKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1CisgICAg
ICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNgorICAgICAgICAgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDcKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyA4CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gOQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDEwCisg
ICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTEKKyAgICAgICAgICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMgorICAgICAgICAgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDEzCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gMTQKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyAxNQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE2CisgICAg
ICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTcKKyAgICAgICAgICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxOAorICAgICAgICAgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDE5CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gMjAKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAy
MQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIyCisgICAgICAg
ICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjMKKyAgICAgICAgICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyNAorICAgICAgICAgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDI1CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gMjYKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyNwor
ICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI4CisgICAgICAgICAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjkKKyAgICAgICAgICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyAzMAorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDMxCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gMzIKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4gPT0gNjQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxCisgICAgICAgICAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMgorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVf
U0FNUExFIC8vIDMKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0
CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNQorICAgICAgICAg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDYKKyAgICAgICAgICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA3CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gOAorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDkKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxMAorICAgICAg
ICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDExCisgICAgICAgICAgICAgICAg
ICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTIKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9M
VkVfT05FX1NBTVBMRSAvLyAxMworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FN
UExFIC8vIDE0CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTUK
KyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAxNgorICAgICAgICAg
ICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDE3CisgICAgICAgICAgICAgICAgICAg
IENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMTgKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVf
T05FX1NBTVBMRSAvLyAxOQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExF
IC8vIDIwCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjEKKyAg
ICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyMgorICAgICAgICAgICAg
ICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDIzCisgICAgICAgICAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUgLy8gMjQKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRSAvLyAyNQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8v
IDI2CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMjcKKyAgICAg
ICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAyOAorICAgICAgICAgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDI5CisgICAgICAgICAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUgLy8gMzAKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NB
TVBMRSAvLyAzMQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDMy
CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzMKKyAgICAgICAg
ICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyAzNAorICAgICAgICAgICAgICAgICAg
ICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDM1CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZF
X09ORV9TQU1QTEUgLy8gMzYKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBM
RSAvLyAzNworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDM4Cisg
ICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gMzkKKyAgICAgICAgICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0MAorICAgICAgICAgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFIC8vIDQxCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09O
RV9TQU1QTEUgLy8gNDIKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAv
LyA0MworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDQ0CisgICAg
ICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNDUKKyAgICAgICAgICAgICAg
ICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0NgorICAgICAgICAgICAgICAgICAgICBDT05W
T0xWRV9PTkVfU0FNUExFIC8vIDQ3CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUgLy8gNDgKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA0
OQorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDUwCisgICAgICAg
ICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTEKKyAgICAgICAgICAgICAgICAg
ICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1MgorICAgICAgICAgICAgICAgICAgICBDT05WT0xW
RV9PTkVfU0FNUExFIC8vIDUzCisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1Q
TEUgLy8gNTQKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA1NQor
ICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDU2CisgICAgICAgICAg
ICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNTcKKyAgICAgICAgICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRSAvLyA1OAorICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9P
TkVfU0FNUExFIC8vIDU5CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUg
Ly8gNjAKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRSAvLyA2MQorICAg
ICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFIC8vIDYyCisgICAgICAgICAgICAg
ICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUgLy8gNjMKKyAgICAgICAgICAgICAgICAgICAgQ09O
Vk9MVkVfT05FX1NBTVBMRSAvLyA2NAorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChuLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5v
bi1vcHRpbWl6ZWQgdXNpbmcgYWN0dWFsIHdoaWxlIGxvb3AuCisgICAgICAgICAgICAgICAgICAg
ICAgICBDT05WT0xWRV9PTkVfU0FNUExFCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIExpbmVhcmx5IGludGVy
cG9sYXRlIHRoZSB0d28gImNvbnZvbHV0aW9ucyIuCisgICAgICAgICAgICBkb3VibGUgcmVzdWx0
ID0gKDEuMCAtIGtlcm5lbEludGVycG9sYXRpb25GYWN0b3IpICogc3VtMSArIGtlcm5lbEludGVy
cG9sYXRpb25GYWN0b3IgKiBzdW0yOworCisgICAgICAgICAgICAqZGVzdGluYXRpb24rKyA9IHJl
c3VsdDsKKworICAgICAgICAgICAgbnVtYmVyT2ZEZXN0aW5hdGlvbkZyYW1lcy0tOworICAgICAg
ICAgICAgaWYgKCFudW1iZXJPZkRlc3RpbmF0aW9uRnJhbWVzKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgLy8gQWR2YW5jZSB0aGUgdmlydHVhbCBpbmRleC4KKyAgICAg
ICAgICAgIG1fdmlydHVhbFNvdXJjZUluZGV4ICs9IG1fc2NhbGVGYWN0b3I7CisgICAgICAgIH0K
KworICAgICAgICAvLyBXcmFwIGJhY2sgYXJvdW5kIHRvIHRoZSBzdGFydC4KKyAgICAgICAgbV92
aXJ0dWFsU291cmNlSW5kZXggLT0gbV9ibG9ja1NpemU7CisKKyAgICAgICAgLy8gU3RlcCAoMykg
Q29weSByMyB0byByMSBhbmQgcjQgdG8gcjIuCisgICAgICAgIC8vIFRoaXMgd3JhcHMgdGhlIGxh
c3QgaW5wdXQgZnJhbWVzIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuCisgICAgICAg
IG1lbWNweShyMSwgcjMsIHNpemVvZihmbG9hdCkgKiAobV9rZXJuZWxTaXplIC8gMikpOworICAg
ICAgICBtZW1jcHkocjIsIHI0LCBzaXplb2YoZmxvYXQpICogKG1fa2VybmVsU2l6ZSAvIDIpKTsK
KworICAgICAgICAvLyBTdGVwICg0KQorICAgICAgICAvLyBSZWZyZXNoIHRoZSBidWZmZXIgd2l0
aCBtb3JlIGlucHV0LgorICAgICAgICBjb25zdW1lU291cmNlKHI1LCBtX2Jsb2NrU2l6ZSk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vU2luY1Jlc2FtcGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vU2luY1Jlc2FtcGxlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTaW5jUmVzYW1wbGVyX2gKKyNkZWZpbmUgU2luY1Jlc2Ft
cGxlcl9oCisKKyNpbmNsdWRlICJBdWRpb0FycmF5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gU2luY1Jlc2FtcGxlciBpcyBhIGhpZ2gtcXVhbGl0eSBzYW1wbGUtcmF0ZSBjb252ZXJ0
ZXIuCisKK2NsYXNzIFNpbmNSZXNhbXBsZXIgeworcHVibGljOiAgIAorICAgIC8vIHNjYWxlRmFj
dG9yID09IHNvdXJjZVNhbXBsZVJhdGUgLyBkZXN0aW5hdGlvblNhbXBsZVJhdGUKKyAgICAvLyBr
ZXJuZWxTaXplIGNhbiBiZSBhZGp1c3RlZCBmb3IgcXVhbGl0eSAoaGlnaGVyIGlzIGJldHRlcikK
KyAgICAvLyBudW1iZXJPZktlcm5lbE9mZnNldHMgaXMgdXNlZCBmb3IgaW50ZXJwb2xhdGlvbiBh
bmQgaXMgdGhlIG51bWJlciBvZiBzdWItc2FtcGxlIGtlcm5lbCBzaGlmdHMuCisgICAgU2luY1Jl
c2FtcGxlcihkb3VibGUgc2NhbGVGYWN0b3IsIHVuc2lnbmVkIGtlcm5lbFNpemUgPSA2NCwgdW5z
aWduZWQgbnVtYmVyT2ZLZXJuZWxPZmZzZXRzID0gMzIpOworICAgIAorICAgIC8vIFByb2Nlc3Nl
cyBudW1iZXJPZlNvdXJjZUZyYW1lcyBmcm9tIHNvdXJjZSB0byBwcm9kdWNlIG51bWJlck9mU291
cmNlRnJhbWVzIC8gc2NhbGVGYWN0b3IgZnJhbWVzIGluIGRlc3RpbmF0aW9uLgorICAgIHZvaWQg
cHJvY2VzcyhmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIG51bWJl
ck9mU291cmNlRnJhbWVzKTsKKyAgICAKKyAgICAvLyBGSVhNRTogd2UgY2FuIGFkZCBhIHByb2Nl
c3MoKSBtZXRob2Qgd2hpY2ggdGFrZXMgYW4gaW5wdXQgc291cmNlIGNhbGxiYWNrIGZ1bmN0aW9u
IGZvciBzdHJlYW1pbmcgYXBwbGljYXRpb25zCisgICAgLy8gd2hlcmUgdGhlIGVudGlyZSBpbnB1
dCBidWZmZXIgaXMgbm90IGFsbCBhdmFpbGFibGUuCisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBpbml0aWFsaXplS2VybmVsKCk7CisgICAgdm9pZCBjb25zdW1lU291cmNlKGZsb2F0KiBidWZm
ZXIsIHVuc2lnbmVkIG51bWJlck9mU291cmNlRnJhbWVzKTsKKyAgICAKKyAgICBkb3VibGUgbV9z
Y2FsZUZhY3RvcjsKKyAgICB1bnNpZ25lZCBtX2tlcm5lbFNpemU7CisgICAgdW5zaWduZWQgbV9u
dW1iZXJPZktlcm5lbE9mZnNldHM7CisKKyAgICAvLyBtX2tlcm5lbFN0b3JhZ2UgaGFzIG1fbnVt
YmVyT2ZLZXJuZWxPZmZzZXRzIGtlcm5lbHMgYmFjay10by1iYWNrLCBlYWNoIG9mIHNpemUgbV9r
ZXJuZWxTaXplLgorICAgIC8vIFRoZSBrZXJuZWwgb2Zmc2V0cyBhcmUgc3ViLXNhbXBsZSBzaGlm
dHMgb2YgYSB3aW5kb3dlZCBzaW5jKCkgc2hpZnRlZCBmcm9tIDAuMCB0byAxLjAgc2FtcGxlLgor
ICAgIEF1ZGlvRmxvYXRBcnJheSBtX2tlcm5lbFN0b3JhZ2U7CisgICAgCisgICAgLy8gbV92aXJ0
dWFsU291cmNlSW5kZXggaXMgYW4gaW5kZXggb24gdGhlIHNvdXJjZSBpbnB1dCBidWZmZXIgd2l0
aCBzdWItc2FtcGxlIHByZWNpc2lvbi4KKyAgICAvLyBJdCBtdXN0IGJlIGRvdWJsZSBwcmVjaXNp
b24gdG8gYXZvaWQgZHJpZnQuCisgICAgZG91YmxlIG1fdmlydHVhbFNvdXJjZUluZGV4OworICAg
IAorICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiBkZXN0aW5hdGlvbiBmcmFtZXMgd2UgZ2Vu
ZXJhdGUgcGVyIHByb2Nlc3NpbmcgcGFzcyBvbiB0aGUgYnVmZmVyLgorICAgIHVuc2lnbmVkIG1f
YmxvY2tTaXplOworCisgICAgLy8gU291cmNlIGlzIGNvcGllZCBpbnRvIHRoaXMgYnVmZmVyIGZv
ciBlYWNoIHByb2Nlc3NpbmcgcGFzcy4KKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9pbnB1dEJ1ZmZl
cjsKKworICAgIGZsb2F0KiBtX3NvdXJjZTsKKyAgICB1bnNpZ25lZCBtX3NvdXJjZUZyYW1lc0F2
YWlsYWJsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNpbmNS
ZXNhbXBsZXJfaAo=
</data>
<flag name="review"
          id="78771"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>