<?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>171634</bug_id>
          
          <creation_ts>2017-05-03 16:41:37 -0700</creation_ts>
          <short_desc>Change the asynchronous image decoding tests to use the event webkitImageFrameReady</short_desc>
          <delta_ts>2017-05-04 18:53:35 -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>Images</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>
          <dependson>171641</dependson>
    
    <dependson>171694</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1304370</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-03 16:41:37 -0700</bug_when>
    <thetext>TestRunner.display() needs to have the option to draw the web page without drawing a gray background for the track repaints. A new argument will be added to this function to provide this option but it is optional. If it is not passed, it will behave as it was before the change so the existing tests won&apos;t break.

The purpose of this change is to make it easy to test the async image decoding. To draw an image asynchronously, TestRunner.display() will be called to start the image decoding. When the image frame is ready, we are going to call TestRunner.notifyDone() which will call TestRunner.display() a second time. This time, the image will be drawn without any further decoding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304373</commentid>
    <comment_count>1</comment_count>
      <attachid>308986</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-03 16:48:36 -0700</bug_when>
    <thetext>Created attachment 308986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304382</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-05-03 16:55:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/31976651&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304391</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-05-03 16:59:24 -0700</bug_when>
    <thetext>Maybe we should just rename display() to displayAndTrackRepaints()? There are 175 instances:

compositing/clip-change.html:        testRunner.display();
compositing/geometry/foreground-offset-change.html:        testRunner.display();
compositing/geometry/limit-layer-bounds-transformed-overflow.html:        testRunner.display();
compositing/iframes/become-composited-nested-iframes.html:              testRunner.display();
compositing/iframes/become-overlapped-iframe.html:                testRunner.display(); // Painting has to happen to detect overlap.
compositing/iframes/connect-compositing-iframe-delayed.html:            testRunner.display();
compositing/iframes/connect-compositing-iframe.html:        testRunner.display();
compositing/iframes/connect-compositing-iframe2.html:            testRunner.display();
compositing/iframes/connect-compositing-iframe3.html:        testRunner.display();
compositing/iframes/enter-compositing-iframe.html:        testRunner.display();
compositing/iframes/iframe-content-flipping.html:        testRunner.display();
compositing/iframes/iframe-resize.html:            testRunner.display();
compositing/iframes/iframe-resize.html:                testRunner.display();
compositing/iframes/iframe-size-to-zero.html:                testRunner.display();
compositing/iframes/iframe-size-to-zero.html:                testRunner.display();
compositing/iframes/iframe-src-change.html:                testRunner.display(); // Need to paint for overlap testing.
compositing/iframes/invisible-nested-iframe-hide.html:          testRunner.display();
compositing/iframes/invisible-nested-iframe-show.html:          testRunner.display();
compositing/iframes/leave-compositing-iframe.html:        testRunner.display();
compositing/iframes/overlapped-iframe-iframe.html:                testRunner.display();
compositing/iframes/overlapped-iframe.html:              testRunner.display();
compositing/iframes/overlapped-nested-iframes.html:            testRunner.display();
compositing/iframes/repaint-after-losing-scrollbars.html:        testRunner.display(); // Paint once with all overflow controls visible.
compositing/iframes/resources/fixed-position-subframe.html:            testRunner.display();
compositing/iframes/resources/fixed-position-transformed-subframe.html:        testRunner.display();
compositing/iframes/resources/scrollgrandchild-inner.html:        testRunner.display();
compositing/iframes/scrolling-iframe.html:                testRunner.display();
compositing/overflow/content-gains-scrollbars.html:        testRunner.display(); // Ensure compositor tree is up to date.
compositing/overflow/content-gains-scrollbars.html:    testRunner.display(); // Force compositor state to be updated before the container needs any overflow controls
compositing/overflow/content-loses-scrollbars.html:        testRunner.display(); // Ensure compositor tree is up to date.
compositing/overflow/content-loses-scrollbars.html:    testRunner.display(); // Force compositor state to be updated before the container needs any overflow controls
compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html:        window.testRunner.display();
compositing/overflow/overflow-scrollbar-layers.html:    testRunner.display(); // Ensure compositor tree is up to date.
compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html:      window.testRunner.display();
compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html:        window.testRunner.display();
compositing/overflow/repaint-after-losing-scrollbars.html:    testRunner.display(); // Paint once with all overflow controls visible.
compositing/patterns/direct-pattern-compositing-add-text-expected.html:              testRunner.display();
compositing/patterns/direct-pattern-compositing-add-text.html:              testRunner.display();
compositing/patterns/direct-pattern-compositing-change-expected.html:              window.testRunner.display();
compositing/patterns/direct-pattern-compositing-change.html:              window.testRunner.display();
compositing/patterns/direct-pattern-compositing-load-expected.html:              window.testRunner.display();
compositing/patterns/direct-pattern-compositing-load.html:              window.testRunner.display();
compositing/plugins/invalidate_rect.html:      testRunner.display();
compositing/repaint/iframes/composited-iframe-with-fixed-background-doc-repaint.html:                testRunner.display(); // Flush pending compositing repaints.
compositing/repaint/iframes/compositing-iframe-scroll-repaint.html:                testRunner.display(); // Flush pending compositing repaints.
compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint.html:                testRunner.display(); // Flush pending compositing repaints.
compositing/repaint/newly-composited-on-scroll.html:            testRunner.display();
compositing/repaint/newly-composited-on-scroll.html:            testRunner.display();
compositing/repaint/newly-composited-repaint-rect.html:            testRunner.display();
compositing/repaint/page-scale-repaint.html:        testRunner.display();
compositing/repaint/requires-backing-repaint.html:                testRunner.display();
compositing/repaint/transform-style-change.html:    testRunner.display(); // Force one composite with preserve-3d
compositing/rtl/rtl-overflow-invalidation.html:            testRunner.display();
compositing/scroll-painted-composited-content.html:            testRunner.display();
compositing/tiling/huge-layer-resize.html:            testRunner.display();
compositing/video/video-with-invalid-source.html:            testRunner.display();
compositing/video-page-visibility.html:        testRunner.display();
compositing/video-page-visibility.html:        testRunner.display();
compositing/webgl/webgl-repaint.html:      testRunner.display();
compositing/webgl/webgl-repaint.html:      testRunner.display();
compositing/webgl/webgl-repaint.html:      testRunner.display();
css3/filters/multiple-filters-invalidation.html:    testRunner.display();
css3/flexbox/repaint-column-reverse.html:        testRunner.display();
css3/flexbox/repaint-during-resize-no-flex.html:        testRunner.display();
css3/flexbox/repaint-rtl-column.html:        testRunner.display();
css3/flexbox/repaint.html:        testRunner.display();
displaylists/canvas-display-list.html:                testRunner.display();
displaylists/resources/dump-target-display-list.js:        testRunner.display();
displaylists/resources/dump-target-replay-list.js:        testRunner.display();
fast/animation/request-animation-frame-detach-element.html:            testRunner.display();
fast/animation/request-animation-frame-detach-element2.html:            testRunner.display();
fast/animation/request-animation-frame-during-modal.html:              &apos;    testRunner.display();&apos; +
fast/animation/request-animation-frame-during-modal.html:        testRunner.display();
fast/animation/request-animation-frame-iframe.html:                testRunner.display();
fast/animation/request-animation-frame-iframe2.html:                testRunner.display();
fast/animation/script-tests/request-animation-frame-cancel.js:    testRunner.display();
fast/animation/script-tests/request-animation-frame-cancel2.js:    testRunner.display();
fast/animation/script-tests/request-animation-frame-disabled.js:    testRunner.display();
fast/animation/script-tests/request-animation-frame-prefix.js:        testRunner.display();
fast/animation/script-tests/request-animation-frame-prefix.js:        testRunner.display();
fast/animation/script-tests/request-animation-frame-time-unit.js:            testRunner.display();
fast/animation/script-tests/request-animation-frame-time-unit.js:    testRunner.display();
fast/animation/script-tests/request-animation-frame-timestamps-advance.js:        testRunner.display();
fast/animation/script-tests/request-animation-frame-timestamps-advance.js:        testRunner.display();
fast/animation/script-tests/request-animation-frame-timestamps.js:    testRunner.display();
fast/animation/script-tests/request-animation-frame-within-callback.js:    testRunner.display();
fast/animation/script-tests/request-animation-frame-within-callback.js:    testRunner.display();
fast/animation/script-tests/request-animation-frame.js:    testRunner.display();
fast/backgrounds/obscured-background-child-style-change-expected.html:    testRunner.display();
fast/backgrounds/obscured-background-child-style-change.html:    testRunner.display();
fast/backgrounds/solid-color-context-restore.html:            testRunner.display();
fast/canvas/canvas-as-image-incremental-repaint.html:        testRunner.display();
fast/canvas/canvas-incremental-repaint-2.html:            testRunner.display();
fast/canvas/canvas-incremental-repaint.html:            testRunner.display();
fast/canvas/canvas-resize-after-paint.html:    testRunner.display(); // Force a composite at normal width/height to ensure we have a compositing layer for the canvas.
fast/canvas/resources/repaint.js:        testRunner.display();
fast/canvas/script-tests/canvas-imageSmoothingEnabled-repaint.js:        testRunner.display();
fast/canvas/webgl/canvas-test.html:      testRunner.display();
fast/canvas/webgl/webgl-layer-update.html:            testRunner.display();
fast/canvas/webgl/webgl-layer-update.html:    testRunner.display();
fast/css/pseudostyle-anonymous-text.html:                testRunner.display();
fast/css/relative-positioned-block-crash.html:            testRunner.display();
fast/dom/Window/post-message-crash.html:    testRunner.display();
fast/dom/Window/web-timing-minimal-performance-now.html:    window.testRunner.display();
fast/dynamic/containing-block-change.html:            testRunner.display();
fast/dynamic/containing-block-change.html:            testRunner.display();
fast/dynamic/layer-no-longer-paginated.html:            testRunner.display();
fast/events/touch/gesture/pad-gesture-cancel.js:    testRunner.display();
fast/events/touch/gesture/pad-gesture-fling.js:    testRunner.display();
fast/events/touch/gesture/pad-gesture-fling.js:    testRunner.display();
fast/events/touch/gesture/pad-gesture-fling.js:    testRunner.display();
fast/forms/hidden-listbox.html:    testRunner.display();
fast/forms/listbox-clip.html:            testRunner.display();
fast/frames/inline-object-inside-frameset.html:        testRunner.display();
fast/frames/transparent-scrollbar.html:        testRunner.display();
fast/frames/transparent-scrollbar.html:            testRunner.display();
fast/images/animated-background-image-crash.html:                testRunner.display();
fast/layers/add-layer-with-nested-stacking.html:        testRunner.display();
fast/layers/inline-dirty-z-order-lists.html:        testRunner.display();
fast/layers/layer-content-visibility-change.html:        testRunner.display();
fast/layers/nested-layers-1.html:        testRunner.display();
fast/layers/nested-layers-2.html:        testRunner.display();
fast/layers/nested-layers-3.html:        testRunner.display();
fast/layers/nested-layers-4.html:        testRunner.display();
fast/layers/remove-layer-with-nested-stacking.html:        testRunner.display();
fast/overflow/hidden-scrollbar-resize.html:    testRunner.display();
fast/reflections/inline-crash.html:            testRunner.display();
fast/repaint/animation-after-layer-scroll.html:        testRunner.display();
fast/repaint/animation-after-layer-scroll.html:        testRunner.display();
fast/repaint/background-shorthand-with-gradient-and-height-changes.html:    window.testRunner.display();
fast/repaint/fixed-child-move-after-scroll.html:              testRunner.display();
fast/repaint/fixed-child-of-fixed-move-after-scroll.html:              testRunner.display();
fast/repaint/fixed-child-of-transformed-move-after-scroll.html:              testRunner.display();
fast/repaint/fixed-move-after-scroll.html:              testRunner.display();
fast/repaint/no-animation-outside-viewport-subframe.html:        testRunner.display();
fast/repaint/no-animation-outside-viewport-subframe.html:        testRunner.display();
fast/repaint/no-animation-outside-viewport.html:        testRunner.display();
fast/repaint/obscured-background-no-repaint.html:        testRunner.display();
fast/repaint/overflow-hidden-in-overflow-hidden-scrolled.html:                testRunner.display();
fast/repaint/renderer-destruction-by-invalidateSelection-crash.html:            testRunner.display();
fast/repaint/repaint-during-scroll-with-zoom.html:            testRunner.display();
fast/repaint/resources/fixed-move-after-keyboard-scroll-iframe.html:              testRunner.display();
fast/repaint/resources/iframe-scroll-repaint-iframe.html:    testRunner.display();
fast/repaint/resources/line-flow-with-floats.js:        testRunner.display();
fast/repaint/resources/repaint.js:        testRunner.display();
fast/repaint/table-overflow-hidden-in-overflow-hidden-scrolled.html:                testRunner.display();
fast/replaced/width100percent-textarea.html:    testRunner.display();
fast/scrolling/scrollbar-tickmarks-hittest.html:        testRunner.display();
fast/table/border-collapsing/cached-69296.html:                    testRunner.display();
fast/table/border-collapsing/cached-cell-append.html:                    testRunner.display();
fast/table/border-collapsing/cached-cell-remove.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-cell-border-color.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-cell-border-width.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-cell-sl-border-color.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-col-border-color.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-col-border-width.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-colgroup-border-color.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-colgroup-border-width.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-row-border-color.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-row-border-width.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-table-border-color.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-table-border-width.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-tbody-border-color.html:                    testRunner.display();
fast/table/border-collapsing/cached-change-tbody-border-width.html:                    testRunner.display();
fast/table/empty-section-crash.html:            testRunner.display();
fast/text/font-initial.html:        testRunner.display();
fast/text/international/harfbuzz-runs-with-no-glyph.html:    testRunner.display();
fast/text/text-shadow-extreme-value.html:        testRunner.display();
http/tests/misc/slow-loading-image-in-pattern.html:    testRunner.display();
media/audio-repaint.html:        testRunner.display();
media/media-document-audio-repaint.html:            testRunner.display();
scrollbars/scrollbar-percent-padding-crash.html:        testRunner.display();
svg/custom/non-scaling-stroke-update.svg:        testRunner.display();
svg/custom/stale-resource-data-crash.svg:      testRunner.display();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304711</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-05-04 11:26:55 -0700</bug_when>
    <thetext>I think the new way is bug 171641, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304901</commentid>
    <comment_count>5</comment_count>
      <attachid>309116</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-04 17:13:04 -0700</bug_when>
    <thetext>Created attachment 309116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304906</commentid>
    <comment_count>6</comment_count>
      <attachid>309117</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-04 17:29:35 -0700</bug_when>
    <thetext>Created attachment 309117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304908</commentid>
    <comment_count>7</comment_count>
      <attachid>309117</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-05-04 17:31:44 -0700</bug_when>
    <thetext>Comment on attachment 309117
Patch

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

&gt; LayoutTests/fast/images/async-image-background-image-repeated.html:18
&gt; +        background-image: url(&quot;&quot;);

Maybe just remove the property?

&gt; LayoutTests/fast/images/async-image-background-image.html:9
&gt; +        background-image: url(&quot;&quot;);

Remove?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304930</commentid>
    <comment_count>8</comment_count>
      <attachid>309122</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-04 18:12:30 -0700</bug_when>
    <thetext>Created attachment 309122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304948</commentid>
    <comment_count>9</comment_count>
      <attachid>309122</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-04 18:53:34 -0700</bug_when>
    <thetext>Comment on attachment 309122
Patch

Clearing flags on attachment: 309122

Committed r216225: &lt;http://trac.webkit.org/changeset/216225&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304949</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-04 18:53:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308986</attachid>
            <date>2017-05-03 16:48:36 -0700</date>
            <delta_ts>2017-05-04 17:13:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171634-20170503164836.patch</filename>
            <type>text/plain</type>
            <size>20382</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNjE1NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM0IEBACisyMDE3LTA1LTAzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgbmV3IGFyZ3VtZW50IHRvIFRlc3RSdW5uZXIuZGlz
cGxheSgpIHRvIGNvbnRyb2wgd2hldGhlciB0cmFjayByZXBhaW50cyBhcmUgcmVxdWlyZWQgb3Ig
bm90CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE2
MzQKKyAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hh
bmdlIHRoZSB0ZXN0UnVubmVyLmRpc3BsYXkoKSBieSBhZGRpbmcgYSBuZXcgYXJndW1lbnQgJ0Rp
c3BsYXlPcHRpb25zJy4KKyAgICAgICAgSWYgaXQgaXMgbm90IHBhc3NlZCwgaXRzIHZhbHVlIHdp
bGwgYmUgJ0NvbnRlbnRzQW5kVHJhY2tSZXBhaW50cycuIElmCisgICAgICAgIERpc3BsYXlPcHRp
b25zIGlzIGVxdWFsIHRvICdDb250ZW50c09ubHknLCB0ZXN0UnVubmVyLmRpc3BsYXkoKSB3aWxs
IGRpc3BsYXkKKyAgICAgICAgdGhlIFdlYlZpZXcgd2l0aG91dCB0cmFja2luZyByZXBhaW50Lgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaDoKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKEpTVmFsdWVUb0Rpc3BsYXlP
cHRpb25zKToKKyAgICAgICAgKGRpc3BsYXlDYWxsYmFjayk6CisgICAgICAgIChkaXNwbGF5SW52
YWxpZGF0ZWRSZWdpb25DYWxsYmFjayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdFJ1
bm5lci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToK
KyAgICAgICAgKGRpc3BsYXlXZWJWaWV3KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMv
VGVzdFJ1bm5lck1hYy5tbToKKyAgICAgICAgKFRlc3RSdW5uZXI6OmRpc3BsYXkpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcDoKKyAgICAgICAgKFRlc3RS
dW5uZXI6OmRpc3BsYXkpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
ZGlzcGxheSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmg6CisgICAgICAgIChXVFI6OnRvRGlzcGxheU9wdGlvbnMpOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0luamVjdGVkQnVuZGxlSU9TLm1tOgor
CiAyMDE3LTA1LTAzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIEhhdmUgV0tXZWJWaWV3IGNhbGwgX3VwZGF0ZVZpc2libGVDb250ZW50UmVjdHMgZm9y
IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlmIHBvc3NpYmxlLCByYXRoZXIgdGhhbiBhbHdheXMg
ZGVsYXlpbmcKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaAkocmV2aXNp
b24gMjE2MTU0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsOCArNTEsMTMgQEAgZXh0ZXJuIHZvbGF0aWxlIGJvb2wgZG9uZTsK
IC8vIEZJWE1FOiBUaGlzIGlzIGEgYmFkIGFic3RyYWN0aW9uLiAgV2Ugc2hvdWxkIGluc3RlZCBw
YXNzIHRoaXMgdG8gb3RoZXIgY29udHJvbGxlciBvYmplY3RzIHdoaWNoIG5lZWQgYWNjZXNzIHRv
IGl0LgogZXh0ZXJuIFJlZlB0cjxUZXN0UnVubmVyPiBnVGVzdFJ1bm5lcjsKIAorZW51bSBjbGFz
cyBEaXNwbGF5T3B0aW9ucyB7CisgICAgQ29udGVudHNBbmRUcmFja1JlcGFpbnRzLAorICAgIENv
bnRlbnRzT25seQorfTsKKwogdm9pZCBkdW1wKCk7Ci12b2lkIGRpc3BsYXlXZWJWaWV3KCk7Cit2
b2lkIGRpc3BsYXlXZWJWaWV3KERpc3BsYXlPcHRpb25zKTsKIAogc3RydWN0IFRlc3RDb21tYW5k
IHsKICAgICBzdGQ6OnN0cmluZyBwYXRoT3JVUkw7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
UnVubmVyLmNwcAkocmV2aXNpb24gMjE2MTU0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVz
dFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNCwxMSArNTE0LDE5IEBAIHN0YXRpYyBK
U1ZhbHVlUmVmIGRpc3BhdGNoUGVuZGluZ0xvYWRSZXEKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBEaXNwbGF5T3B0aW9ucyBKU1ZhbHVlVG9E
aXNwbGF5T3B0aW9ucyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcHRp
b24oQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbikp
OworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgcmV0dXJuIG9wdGlvbi5nZXQoKS0+c3Ry
aW5nKCkgPT0gIkNvbnRlbnRzT25seSIgPyBEaXNwbGF5T3B0aW9uczo6Q29udGVudHNPbmx5IDog
RGlzcGxheU9wdGlvbnM6OkNvbnRlbnRzQW5kVHJhY2tSZXBhaW50czsKK30KKwogc3RhdGljIEpT
VmFsdWVSZWYgZGlzcGxheUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgogICAgIFRlc3RSdW5uZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5kaXNwbGF5KCk7CisgICAgRGlzcGxheU9w
dGlvbnMgb3B0aW9ucyA9IGFyZ3VtZW50Q291bnQgPiAwID8gSlNWYWx1ZVRvRGlzcGxheU9wdGlv
bnMoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pIDogRGlzcGxheU9wdGlvbnM6OkNv
bnRlbnRzQW5kVHJhY2tSZXBhaW50czsKKyAgICBjb250cm9sbGVyLT5kaXNwbGF5KG9wdGlvbnMp
OwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQpAQCAtNTI5
LDcgKzUzNyw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlJbnZhbGlkYXRlZFJlZ2kKICAg
ICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgLy8gVGVzdFJ1bm5lcjo6ZGlzcGxheSgp
IG9ubHkgcmVuZGVycyB0aGUgaW52YWxpZGF0ZWQgcmVnaW9uIHNvCiAgICAgLy8gd2UgY2FuIGp1
c3QgdXNlIHRoYXQuCi0gICAgY29udHJvbGxlci0+ZGlzcGxheSgpOworICAgIERpc3BsYXlPcHRp
b25zIG9wdGlvbnMgPSBhcmd1bWVudENvdW50ID4gMCA/IEpTVmFsdWVUb0Rpc3BsYXlPcHRpb25z
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSA6IERpc3BsYXlPcHRpb25zOjpDb250
ZW50c0FuZFRyYWNrUmVwYWludHM7CisgICAgY29udHJvbGxlci0+ZGlzcGxheShvcHRpb25zKTsK
IAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9UZXN0UnVubmVyLmgJKHJldmlzaW9uIDIxNjE1NCkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW5jbHVkZSAi
VUlTY3JpcHRDb250ZXh0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYu
aD4KICNpbmNsdWRlIDxtYXA+CkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBKU1N0cmlu
Z1JlZiBjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpOwogICAgIEpTU3RyaW5n
UmVmIGNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSk7CiAgICAgdm9pZCBkaXNw
YXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKTsKLSAgICB2b2lkIGRpc3BsYXkoKTsKKyAgICB2b2lk
IGRpc3BsYXkoRGlzcGxheU9wdGlvbnMpOwogICAgIHZvaWQgZGlzcGxheUludmFsaWRhdGVkUmVn
aW9uKCk7CiAgICAgdm9pZCBleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1Jl
ZiB2YWx1ZSk7CiAgICAgYm9vbCBmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYs
IEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiAyMTYxNTQpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwOTMsMTUg
KzIwOTMsMTcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogICAg
IGZmbHVzaChzdGRlcnIpOwogfQogCi12b2lkIGRpc3BsYXlXZWJWaWV3KCkKK3ZvaWQgZGlzcGxh
eVdlYlZpZXcoRGlzcGxheU9wdGlvbnMgb3B0aW9ucykKIHsKICNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbbWFpbkZyYW1lIHdlYlZpZXddOwogICAgIFt3ZWJWaWV3
IGRpc3BsYXldOwogCiAgICAgLy8gRklYTUU6IFRyYWNraW5nIHJlcGFpbnRzIGlzIG5vdCBzcGVj
aWZpYyB0byBNYWMuIFdlIHNob3VsZCBlbmFibGUgc3VjaCBzdXBwb3J0IG9uIGlPUy4KLSAgICBb
d2ViVmlldyBzZXRUcmFja3NSZXBhaW50czpZRVNdOwotICAgIFt3ZWJWaWV3IHJlc2V0VHJhY2tl
ZFJlcGFpbnRzXTsKKyAgICBpZiAob3B0aW9ucyA9PSBEaXNwbGF5T3B0aW9uczo6Q29udGVudHNB
bmRUcmFja1JlcGFpbnRzKSB7CisgICAgICAgIFt3ZWJWaWV3IHNldFRyYWNrc1JlcGFpbnRzOllF
U107CisgICAgICAgIFt3ZWJWaWV3IHJlc2V0VHJhY2tlZFJlcGFpbnRzXTsKKyAgICB9CiAjZWxz
ZQogICAgIFtnRHJ0V2luZG93IGxheW91dFRpbGVzTm93XTsKICAgICBbZ0RydFdpbmRvdyBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3Q6W2dEcnRXaW5kb3cgZnJhbWVdXTsKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCShyZXZpc2lvbiAyMTYxNTQpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjUwLDkgKzI1MCw5IEBAIEpTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNvcHlFbmNvZGVkSG9zdE4K
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKVtuYW1l
TlMgX3dlYl9lbmNvZGVIb3N0TmFtZV0pOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXko
KQordm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KERpc3BsYXlPcHRpb25zIG9wdGlvbnMpCiB7Ci0g
ICAgZGlzcGxheVdlYlZpZXcoKTsKKyAgICBkaXNwbGF5V2ViVmlldyhvcHRpb25zKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgpCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCShyZXZpc2lvbiAyMTYxNTQpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
NCw5ICsyMjQsOSBAQCBKU1N0cmluZ1JlZiBUZXN0UnVubmVyOjpjb3B5RW5jb2RlZEhvc3ROCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgpCit2b2lkIFRlc3RS
dW5uZXI6OmRpc3BsYXkoRGlzcGxheU9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBkaXNwbGF5V2Vi
VmlldygpOworICAgIGRpc3BsYXlXZWJWaWV3KG9wdGlvbnMpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OmtlZXBXZWJIaXN0b3J5KCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMjE2MTU0KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE0LDEyICsxMTQsMTUgQEAgSlNDbGFzc1JlZiBUZXN0UnVubmVyOjp3
cmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBKU1Rlc3RSdW5uZXI6OnRlc3RSdW5uZXJDbGFzcygp
OwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXkoKQordm9pZCBUZXN0UnVubmVyOjpkaXNw
bGF5KERpc3BsYXlPcHRpb25zKiBvcHRpb25zKQogewogICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVu
ZGxlUGFnZUZvcmNlUmVwYWludChwYWdlKTsKLSAgICBXS0J1bmRsZVBhZ2VTZXRUcmFja3NSZXBh
aW50cyhwYWdlLCB0cnVlKTsKLSAgICBXS0J1bmRsZVBhZ2VSZXNldFRyYWNrZWRSZXBhaW50cyhw
YWdlKTsKKworICAgIGlmICghb3B0aW9ucyB8fCAqb3B0aW9ucyA9PSBEaXNwbGF5T3B0aW9uczo6
Q29udGVudHNBbmRUcmFja1JlcGFpbnRzKSB7CisgICAgICAgIFdLQnVuZGxlUGFnZVNldFRyYWNr
c1JlcGFpbnRzKHBhZ2UsIHRydWUpOworICAgICAgICBXS0J1bmRsZVBhZ2VSZXNldFRyYWNrZWRS
ZXBhaW50cyhwYWdlKTsKKyAgICB9CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChi
b29sIGR1bXBQaXhlbHMpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMjE2MTU0KQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU1dyYXBwYWJsZS5oIgogI2luY2x1ZGUgIlN0
cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KICNpbmNsdWRlIDxX
ZWJLaXQvV0tCdW5kbGVTY3JpcHRXb3JsZC5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPHN0cmluZz4KQEAgLTQ4LDYgKzQ5LDE4IEBAIHR5cGVkZWYgUnVuTG9v
cDo6VGltZXI8VGVzdFJ1bm5lcj4gUGxhdGYKIAogbmFtZXNwYWNlIFdUUiB7CiAKK2VudW0gY2xh
c3MgRGlzcGxheU9wdGlvbnMgeworICAgIENvbnRlbnRzQW5kVHJhY2tSZXBhaW50cywKKyAgICBD
b250ZW50c09ubHkKK307CisKK2lubGluZSBEaXNwbGF5T3B0aW9ucyogdG9EaXNwbGF5T3B0aW9u
cyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBzdGF0aWMg
RGlzcGxheU9wdGlvbnMgdmFsdWVzW10gPSB7IERpc3BsYXlPcHRpb25zOjpDb250ZW50c0FuZFRy
YWNrUmVwYWludHMsIERpc3BsYXlPcHRpb25zOjpDb250ZW50c09ubHkgfTsKKyAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gb3B0aW9uKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIHZhbHVlLCBudWxscHRyKSk7CisgICAgcmV0dXJuIG9wdGlvbi5nZXQoKS0+c3RyaW5nKCkg
PT0gIkNvbnRlbnRzT25seSIgPyAmdmFsdWVzWzFdIDogJnZhbHVlc1swXTsKK30KKwogY2xhc3Mg
VGVzdFJ1bm5lciA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxUZXN0UnVubmVyPiBjcmVhdGUoKTsKQEAgLTE0MCw3ICsxNTMsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gUmVwYWludCB0ZXN0aW5nLgogICAgIHZvaWQgdGVzdFJlcGFpbnQoKSB7IG1fdGVzdFJlcGFp
bnQgPSB0cnVlOyB9CiAgICAgdm9pZCByZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoKSB7IG1fdGVz
dFJlcGFpbnRTd2VlcEhvcml6b250YWxseSA9IHRydWU7IH0KLSAgICB2b2lkIGRpc3BsYXkoKTsK
KyAgICB2b2lkIGRpc3BsYXkoRGlzcGxheU9wdGlvbnMqKTsKICAgICAKICAgICAvLyBVc2VyQ29u
dGVudCB0ZXN0aW5nLgogICAgIHZvaWQgYWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2Us
IGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RS
dW5uZXIuaWRsCShyZXZpc2lvbiAyMTYxNTQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw2ICsyMywxMSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
K2VudW0gRGlzcGxheU9wdGlvbnMgeworICAgICJDb250ZW50c0FuZFRyYWNrUmVwYWludHMiLAor
ICAgICJDb250ZW50c09ubHkiCit9OworCiBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gaXNXZWJLaXQyOwogCkBAIC05OCw3ICsxMDMsNyBAQCBp
bnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgLy8gUmVwYWludCB0ZXN0aW5nLgogICAgIHZvaWQg
dGVzdFJlcGFpbnQoKTsKICAgICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250YWxseSgpOwotICAg
IHZvaWQgZGlzcGxheSgpOworICAgIHZvaWQgZGlzcGxheShEaXNwbGF5T3B0aW9ucyBvcHRpb25z
KTsKIAogICAgIC8vIFByaW50aW5nCiAgICAgYm9vbGVhbiBpc1BhZ2VCb3hWaXNpYmxlKGxvbmcg
cGFnZUluZGV4KTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
aW9zL0luamVjdGVkQnVuZGxlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0luamVjdGVkQnVuZGxlSU9TLm1tCShyZXZpc2lvbiAy
MTYxNTQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9Jbmpl
Y3RlZEJ1bmRsZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbXBvcnQgImNvbmZpZy5oIgog
I2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGUuaCIKIAogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTYxNTQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNy0wNS0wMyAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIG5ldyBh
cmd1bWVudCB0byBUZXN0UnVubmVyLmRpc3BsYXkoKSB0byBjb250cm9sIHdoZXRoZXIgdHJhY2sg
cmVwYWludHMgYXJlIHJlcXVpcmVkIG9yIG5vdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNjM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVG8gdGVzdCB0aGUgYXN5bmMgaW1hZ2UgZGVjb2Rpbmcgd2Ug
cmVsaWFibHkgd2UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisgICAgICAgIC0tIE1ha2Ug
c3VyZSB0byBsb2FkIHRoZSBpbWFnZSBiZWZvcmUgc2V0dGluZyBpdHMgc3JjIHRvIHRoZSBlbGVt
ZW50LgorICAgICAgICAtLSBDYWxsIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0IHRvIGZvcmNl
IGxheW91dC4KKyAgICAgICAgLS0gQ2FsbCB0ZXN0UnVubmVyLmRpc3BsYXkoIkNvbnRlbnRzT25s
eSIpIHRvIGZvcmNlIHRoZSBmaXJzdCBwYWludC4KKyAgICAgICAgLS0gVXNlIHRoZSB3ZWJraXRJ
bWFnZUZyYW1lUmVhZHkgdG8gcmVsaWFibHkga25vdyB3aGVuIGFuIGltYWdlIGZyYW1lIGlzIHJl
YWR5LgorICAgICAgICAtLSBXaGVuIHdlYmtpdEltYWdlRnJhbWVSZWFkeSBpcyBmaXJlZCBjYWxs
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLiBUaGlzCisgICAgICAgICAgIHdpbGwgZm9yY2UgdGhl
IHNlY29uZCBwYWludC4KKworICAgICAgICAqIGZhc3QvaW1hZ2VzL2FzeW5jLWltYWdlLWJhY2tn
cm91bmQtaW1hZ2UtcmVwZWF0ZWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ltYWdlcy9hc3luYy1p
bWFnZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWw6CisgICAgICAgICogZmFzdC9pbWFnZXMvc3ByaXRl
LXNoZWV0LWltYWdlLWRyYXcuaHRtbDoKKwogMjAxNy0wNS0wMyAgUnlhbiBIYWRkYWQgIDxyeWFu
aGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBNYXJrIG1lZGlhL21vZGVybi1tZWRpYS1jb250
cm9scy9zbGlkZXIvc2xpZGVyLXN0eWxlcy5odG1sIGFzIGZsYWt5IG9uIG1hYy13azEuCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLXJl
cGVhdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvYXN5bmMt
aW1hZ2UtYmFja2dyb3VuZC1pbWFnZS1yZXBlYXRlZC5odG1sCShyZXZpc2lvbiAyMTYxNTQpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLXJl
cGVhdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcgKzE1LDcgQEAKICAgICAgICAgYmFj
a2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OwogICAgIH0KICAgICAuaW1hZ2UtYmFja2dyb3VuZCB7
Ci0gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChyZXNvdXJjZXMvc3ByaXRlLXNoZWV0LXJl
ZC1ncmVlbi1ibHVlLnBuZyk7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiIik7CiAg
ICAgfQogICAgIEBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSB7CiAg
ICAgICAgIC5ib3ggewpAQCAtMzksMzMgKzM5LDQ4IEBACiAgICAgPGJyPgogICAgIDxkaXYgY2xh
c3M9ImJveCByZXBlYXQtYm94IGltYWdlLWJhY2tncm91bmQiPjwvZGl2PgogICAgIDxzY3JpcHQ+
Ci0gICAgICAgIGZ1bmN0aW9uIGZvcmNlUmVkcmF3KGVsZW1lbnRzKSB7Ci0gICAgICAgICAgICBm
b3IodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAg
ZWxlbWVudHNbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgZnVuY3Rpb24gc2V0
RWxlbWVudEltYWdlQmFja2dyb3VuZChlbGVtZW50LCBpbWFnZSkgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5z
dHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcgKyBpbWFnZS5zcmMgKyAnKSc7CiAKLSAgICAg
ICAgICAgIHZhciB0cmljayA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0OwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAg
ICAgICAgICAgICAgZWxlbWVudHNbaV0uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOwor
ICAgICAgICAgICAgICAgIC8vIEZvcmNlIGxheW91dCBhbmQgZGlzcGxheSBzbyB0aGUgaW1hZ2Ug
ZnJhbWUgc3RhcnRzIGRlY29kaW5nLgorICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zm
c2V0SGVpZ2h0OworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIuZGlzcGxheSgiQ29udGVudHNP
bmx5Iik7CisgCisgICAgICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJr
aXRJbWFnZUZyYW1lUmVhZHkiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVz
b2x2ZSgpOworICAgICAgICAgICAgICAgIH0sIGZhbHNlKTsKKyAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CiAKICAgICAgICAgKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIGVsZW1lbnRz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaW1hZ2UtYmFja2dyb3VuZCIpOwot
Ci0gICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykgeworICAgICAgICAgICAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LnRlc3RSdW5uZXIpIHsKICAgICAgICAgICAgICAgICBp
bnRlcm5hbHMuY2xlYXJNZW1vcnlDYWNoZSgpOworICAgICAgICAgICAgICAgIGludGVybmFscy5z
ZXR0aW5ncy5zZXRXZWJraXRJbWFnZVJlYWR5RXZlbnRFbmFibGVkKHRydWUpOwogICAgICAgICAg
ICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRMYXJnZUltYWdlQXN5bmNEZWNvZGluZ0VuYWJs
ZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewotICAg
ICAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotICAgICAgICAgICAgICAg
IGZvcmNlUmVkcmF3KGVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBmb3JjZVJlZHJhdyhlbGVtZW50cyk7Ci0gICAg
ICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgICAgICAgICAgICAg
IH0sIDUwKTsKKyAgICAgICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOworICAgICAgICAg
ICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW1l
bnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaW1hZ2UtYmFja2dyb3VuZCIp
OworIAorICAgICAgICAgICAgICAgIC8vIENoYW5nZSB0aGUgYmFja2dyb3VuZCBvZiB0aGUgZWxl
bWVudHMuCisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LnRl
c3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gW107CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50cy5sZW5n
dGg7ICsraW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHNldEVs
ZW1lbnRJbWFnZUJhY2tncm91bmQoZWxlbWVudHNbaW5kZXhdLCBpbWFnZSkpOworIAorICAgICAg
ICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4geworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBlbGVtZW50c1swXS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcgKyBpbWFn
ZS5zcmMgKyAnKSc7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzWzFdLnN0eWxlLmJhY2tn
cm91bmRJbWFnZSA9ICd1cmwoJyArIGltYWdlLnNyYyArICcpJzsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGltYWdlLnNyYyA9ICJyZXNv
dXJjZXMvc3ByaXRlLXNoZWV0LXJlZC1ncmVlbi1ibHVlLnBuZyI7CisgICAgICAgIH0pKCk7CiAg
ICAgPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2lt
YWdlcy9hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9pbWFnZXMvYXN5bmMtaW1hZ2UtYmFja2dyb3VuZC1pbWFnZS5odG1sCShy
ZXZpc2lvbiAyMTYxNTQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9hc3luYy1pbWFnZS1i
YWNrZ3JvdW5kLWltYWdlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBACiAgICAg
ICAgIGhlaWdodDogMzAwcHg7CiAgICAgfQogICAgIC5pbWFnZS1iYWNrZ3JvdW5kIHsKLSAgICAg
ICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKHJlc291cmNlcy9yZWQtZ3JlZW4tYmx1ZS05MDAtMzAw
LnBuZyk7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiIik7CiAgICAgICAgIGJhY2tn
cm91bmQtcG9zaXRpb246IC0zMDBweCAwcHg7CiAgICAgfQogICAgIEBtZWRpYSAoLXdlYmtpdC1t
aW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSB7CkBAIC0yMywzMCArMjMsMzQgQEAKIDxib2R5Pgog
ICAgIDxkaXYgY2xhc3M9ImJveCBpbWFnZS1iYWNrZ3JvdW5kIj48L2Rpdj4KICAgICA8c2NyaXB0
PgotICAgICAgICBmdW5jdGlvbiBmb3JjZVJlZHJhdyhlbGVtZW50KSB7Ci0gICAgICAgICAgICB2
YXIgZGlzcCA9IGVsZW1lbnQuc3R5bGUuZGlzcGxheTsKLSAgICAgICAgICAgIGVsZW1lbnQuc3R5
bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgICAgICAgIHZhciB0cmljayA9IGVsZW1lbnQub2Zm
c2V0SGVpZ2h0OwotICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gZGlzcDsKLSAg
ICAgICAgfQotCiAgICAgICAgIChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBkaXZFbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaW1hZ2UtYmFja2dyb3VuZCIp
WzBdOwotCi0gICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykgeworICAgICAgICAgICAg
aWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LnRlc3RSdW5uZXIpIHsKICAgICAgICAgICAg
ICAgICBpbnRlcm5hbHMuY2xlYXJNZW1vcnlDYWNoZSgpOworICAgICAgICAgICAgICAgIGludGVy
bmFscy5zZXR0aW5ncy5zZXRXZWJraXRJbWFnZVJlYWR5RXZlbnRFbmFibGVkKHRydWUpOwogICAg
ICAgICAgICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRMYXJnZUltYWdlQXN5bmNEZWNvZGlu
Z0VuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25l
KCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikg
ewotICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotICAgICAgICAg
ICAgICAgIGZvcmNlUmVkcmF3KGRpdkVsZW1lbnQpOwotICAgICAgICAgICAgICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcmNlUmVkcmF3KGRpdkVsZW1l
bnQpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICAg
ICAgICAgICAgICB9LCA1MCk7CisgICAgICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsK
KyAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaW1hZ2UtYmFj
a2dyb3VuZCIpWzBdOworIAorICAgICAgICAgICAgICAgIC8vIENoYW5nZSB0aGUgYmFja2dyb3Vu
ZCBvZiB0aGUgZWxlbWVudC4KKyAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmJhY2tncm91
bmRJbWFnZSA9ICd1cmwoJyArIGltYWdlLnNyYyArICcpJzsKKyAKKyAgICAgICAgICAgICAgICBp
ZiAod2luZG93LmludGVybmFscyAmJiB3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAg
ICAgICAgICAvLyBGb3JjZSBsYXlvdXQgYW5kIGRpc3BsYXkgc28gdGhlIGltYWdlIGZyYW1lIHN0
YXJ0cyBkZWNvZGluZy4KKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRI
ZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIuZGlzcGxheSgiQ29udGVudHNP
bmx5Iik7CisgCisgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBpbWFnZSBmcmFt
ZSB0byBmaW5pc2ggZGVjb2RpbmcgYmVmb3JlIGZpbmlzaGluZyB0aGUgdGVzdC4KKyAgICAgICAg
ICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRJbWFnZUZyYW1lUmVh
ZHkiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgICAgICB9LCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgICAgICBpbWFnZS5zcmMgPSAi
cmVzb3VyY2VzL3JlZC1ncmVlbi1ibHVlLTkwMC0zMDAucG5nIjsKKyAgICAgICAgfSkoKTsKICAg
ICA8L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1h
Z2VzL3Nwcml0ZS1zaGVldC1pbWFnZS1kcmF3Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9pbWFnZXMvc3ByaXRlLXNoZWV0LWltYWdlLWRyYXcuaHRtbAkocmV2aXNpb24gMjE2
MTU0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvc3ByaXRlLXNoZWV0LWltYWdlLWRyYXcu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDcgQEAKICAgICAgICAgZGlzcGxheTogaW5s
aW5lLWJsb2NrOwogICAgIH0KICAgICAuaW1hZ2UtYmFja2dyb3VuZCB7Ci0gICAgICAgIGJhY2tn
cm91bmQtaW1hZ2U6IHVybChyZXNvdXJjZXMvc3ByaXRlLXNoZWV0LXJlZC1ncmVlbi1ibHVlLnBu
Zyk7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiIik7CiAgICAgICAgIGJhY2tncm91
bmQtcG9zaXRpb246IDBweCAtMTAwMHB4OwogICAgIH0KICAgICBAbWVkaWEgKC13ZWJraXQtbWlu
LWRldmljZS1waXhlbC1yYXRpbzogMikgewpAQCAtMjQsMzAgKzI0LDM0IEBACiA8Ym9keT4KICAg
ICA8ZGl2IGNsYXNzPSJib3ggaW1hZ2UtYmFja2dyb3VuZCI+PC9kaXY+CiAgICAgPHNjcmlwdD4K
LSAgICAgICAgZnVuY3Rpb24gZm9yY2VSZWRyYXcoZWxlbWVudCkgewotICAgICAgICAgICAgdmFy
IGRpc3AgPSBlbGVtZW50LnN0eWxlLmRpc3BsYXk7Ci0gICAgICAgICAgICBlbGVtZW50LnN0eWxl
LmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgICAgICAgICB2YXIgdHJpY2sgPSBlbGVtZW50Lm9mZnNl
dEhlaWdodDsKLSAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IGRpc3A7Ci0gICAg
ICAgIH0KLQogICAgICAgICAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgZGl2RWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImltYWdlLWJhY2tncm91bmQiKVsw
XTsKLQotICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIGlm
ICh3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy50ZXN0UnVubmVyKSB7CiAgICAgICAgICAgICAg
ICAgaW50ZXJuYWxzLmNsZWFyTWVtb3J5Q2FjaGUoKTsKKyAgICAgICAgICAgICAgICBpbnRlcm5h
bHMuc2V0dGluZ3Muc2V0V2Via2l0SW1hZ2VSZWFkeUV2ZW50RW5hYmxlZCh0cnVlKTsKICAgICAg
ICAgICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdF
bmFibGVkKHRydWUpOworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
LSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLSAgICAgICAgICAg
ICAgICBmb3JjZVJlZHJhdyhkaXZFbGVtZW50KTsKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBmb3JjZVJlZHJhdyhkaXZFbGVtZW50
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgICAg
ICAgICAgICAgfSwgNTApOworICAgICAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Cisg
ICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2
YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImltYWdlLWJhY2tn
cm91bmQiKVswXTsKKyAKKyAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdGhlIGJhY2tncm91bmQg
b2YgdGhlIGVsZW1lbnQuCisgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5k
SW1hZ2UgPSAndXJsKCcgKyBpbWFnZS5zcmMgKyAnKSc7CisgCisgICAgICAgICAgICAgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRm9yY2UgbGF5b3V0IGFuZCBkaXNwbGF5IHNvIHRoZSBpbWFnZSBmcmFtZSBzdGFy
dHMgZGVjb2RpbmcuCisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVp
Z2h0OworICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLmRpc3BsYXkoIkNvbnRlbnRzT25s
eSIpOworIAorICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgaW1hZ2UgZnJhbWUg
dG8gZmluaXNoIGRlY29kaW5nIGJlZm9yZSBmaW5pc2hpbmcgdGhlIHRlc3QuCisgICAgICAgICAg
ICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0SW1hZ2VGcmFtZVJlYWR5
IiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAgICAgaW1hZ2Uuc3JjID0gInJl
c291cmNlcy9zcHJpdGUtc2hlZXQtcmVkLWdyZWVuLWJsdWUucG5nIjsKKyAgICAgICAgfSkoKTsK
ICAgICA8L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309116</attachid>
            <date>2017-05-04 17:13:04 -0700</date>
            <delta_ts>2017-05-04 17:29:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171634-20170504171303.patch</filename>
            <type>text/plain</type>
            <size>9779</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIxNjIxOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE3LTA1LTA0ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIHRoZSBhc3luY2hy
b25vdXMgaW1hZ2UgZGVjb2RpbmcgdGVzdHMgdG8gdXNlIHRoZSBldmVudCB3ZWJraXRJbWFnZUZy
YW1lUmVhZHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MTYzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRvIHRlc3QgdGhlIGFzeW5jIGltYWdlIGRlY29kaW5nIHdlIHJlbGlhYmx5IHdlIG5lZWQgdG8g
ZG8gdGhlIGZvbGxvd2luZzoKKworICAgICAgICAtLSBNYWtlIHN1cmUgdG8gbG9hZCB0aGUgaW1h
Z2UgYmVmb3JlIHNldHRpbmcgaXRzIHNyYyB0byB0aGUgZWxlbWVudC4KKyAgICAgICAgLS0gQ2Fs
bCBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCB0byBmb3JjZSBsYXlvdXQuCisgICAgICAgIC0t
IENhbGwgdGVzdFJ1bm5lci5kaXNwbGF5KCJDb250ZW50c09ubHkiKSB0byBmb3JjZSB0aGUgZmly
c3QgcGFpbnQuCisgICAgICAgIC0tIFVzZSB0aGUgd2Via2l0SW1hZ2VGcmFtZVJlYWR5IHRvIHJl
bGlhYmx5IGtub3cgd2hlbiBhbiBpbWFnZSBmcmFtZSBpcyByZWFkeS4KKyAgICAgICAgLS0gV2hl
biB3ZWJraXRJbWFnZUZyYW1lUmVhZHkgaXMgZmlyZWQgY2FsbCB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKS4gVGhpcworICAgICAgICAgICB3aWxsIGZvcmNlIHRoZSBzZWNvbmQgcGFpbnQuCisKKyAg
ICAgICAgKiBmYXN0L2ltYWdlcy9hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLXJlcGVhdGVk
Lmh0bWw6CisgICAgICAgICogZmFzdC9pbWFnZXMvYXN5bmMtaW1hZ2UtYmFja2dyb3VuZC1pbWFn
ZS5odG1sOgorICAgICAgICAqIGZhc3QvaW1hZ2VzL3Nwcml0ZS1zaGVldC1pbWFnZS1kcmF3Lmh0
bWw6CisKIDIwMTctMDUtMDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW5hbWUgdGVzdFJ1bm5lci5kaXNwbGF5QW5kVHJhY2tSZXBhaW50
cygpIHRvIHRlc3RSdW5uZXIuZGlzcGxheUFuZFRyYWNrUmVwYWludHMoKQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9pbWFnZXMvYXN5bmMtaW1hZ2UtYmFja2dyb3VuZC1pbWFnZS1yZXBlYXRlZC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2FzeW5jLWltYWdlLWJh
Y2tncm91bmQtaW1hZ2UtcmVwZWF0ZWQuaHRtbAkocmV2aXNpb24gMjE2MjE5KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9pbWFnZXMvYXN5bmMtaW1hZ2UtYmFja2dyb3VuZC1pbWFnZS1yZXBlYXRlZC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgICAgIGJhY2tncm91bmQt
cmVwZWF0OiByZXBlYXQteDsKICAgICB9CiAgICAgLmltYWdlLWJhY2tncm91bmQgewotICAgICAg
ICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwocmVzb3VyY2VzL3Nwcml0ZS1zaGVldC1yZWQtZ3JlZW4t
Ymx1ZS5wbmcpOworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIiIpOwogICAgIH0KICAg
ICBAbWVkaWEgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMikgewogICAgICAgICAu
Ym94IHsKQEAgLTM5LDMzICszOSw0OCBAQAogICAgIDxicj4KICAgICA8ZGl2IGNsYXNzPSJib3gg
cmVwZWF0LWJveCBpbWFnZS1iYWNrZ3JvdW5kIj48L2Rpdj4KICAgICA8c2NyaXB0PgotICAgICAg
ICBmdW5jdGlvbiBmb3JjZVJlZHJhdyhlbGVtZW50cykgewotICAgICAgICAgICAgZm9yKHZhciBp
ID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGVsZW1lbnRz
W2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIGZ1bmN0aW9uIHNldEVsZW1lbnRJ
bWFnZUJhY2tncm91bmQoZWxlbWVudCwgaW1hZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
UHJvbWlzZSgocmVzb2x2ZSkgPT4geworICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuYmFj
a2dyb3VuZEltYWdlID0gJ3VybCgnICsgaW1hZ2Uuc3JjICsgJyknOwogCi0gICAgICAgICAgICB2
YXIgdHJpY2sgPSBlbGVtZW50Lm9mZnNldEhlaWdodDsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgZm9yKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAg
ICAgIGVsZW1lbnRzW2ldLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsKKyAgICAgICAg
ICAgICAgICAvLyBGb3JjZSBsYXlvdXQgYW5kIGRpc3BsYXkgc28gdGhlIGltYWdlIGZyYW1lIHN0
YXJ0cyBkZWNvZGluZy4KKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdo
dDsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLmRpc3BsYXkoKTsKKyAKKyAgICAgICAgICAg
ICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdEltYWdlRnJhbWVSZWFkeSIsIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAg
ICAgfSwgZmFsc2UpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICAoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCJpbWFnZS1iYWNrZ3JvdW5kIik7Ci0KLSAgICAgICAgICAgIGlmICh3aW5k
b3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscyAmJiB3aW5k
b3cudGVzdFJ1bm5lcikgewogICAgICAgICAgICAgICAgIGludGVybmFscy5jbGVhck1lbW9yeUNh
Y2hlKCk7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldFdlYmtpdEltYWdl
UmVhZHlFdmVudEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldHRp
bmdzLnNldExhcmdlSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAg
ICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAgICAgICAgICAgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAgICAgICAgICAgZm9yY2VSZWRyYXcoZWxlbWVudHMp
OwotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvcmNlUmVkcmF3KGVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgICAgICAgICAgICAgfSwgNTApOworICAgICAgICAgICAg
dmFyIGltYWdlID0gbmV3IEltYWdlKCk7CisgICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKCJpbWFnZS1iYWNrZ3JvdW5kIik7CisgCisgICAgICAgICAgICAgICAg
Ly8gQ2hhbmdlIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBlbGVtZW50cy4KKyAgICAgICAgICAgICAg
ICBpZiAod2luZG93LmludGVybmFscyAmJiB3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgcHJvbWlzZXMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnRzLmxlbmd0aDsgKytpbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goc2V0RWxlbWVudEltYWdlQmFja2dyb3VuZChl
bGVtZW50c1tpbmRleF0sIGltYWdlKSk7CisgCisgICAgICAgICAgICAgICAgICAgIFByb21pc2Uu
YWxsKHByb21pc2VzKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGlu
ZGV4IDwgZWxlbWVudHMubGVuZ3RoOyArK2luZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudHNbaW5kZXhdLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICd1cmwoJyArIGltYWdlLnNy
YyArICcpJzsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAg
ICAgICAgICAgIGltYWdlLnNyYyA9ICJyZXNvdXJjZXMvc3ByaXRlLXNoZWV0LXJlZC1ncmVlbi1i
bHVlLnBuZyI7CisgICAgICAgIH0pKCk7CiAgICAgPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWlt
YWdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvYXN5bmMtaW1h
Z2UtYmFja2dyb3VuZC1pbWFnZS5odG1sCShyZXZpc2lvbiAyMTYyMTkpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2ltYWdlcy9hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTYsNyArNiw3IEBACiAgICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgfQogICAg
IC5pbWFnZS1iYWNrZ3JvdW5kIHsKLSAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKHJlc291
cmNlcy9yZWQtZ3JlZW4tYmx1ZS05MDAtMzAwLnBuZyk7CisgICAgICAgIGJhY2tncm91bmQtaW1h
Z2U6IHVybCgiIik7CiAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zMDBweCAwcHg7CiAg
ICAgfQogICAgIEBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSB7CkBA
IC0yMywzMCArMjMsMzQgQEAKIDxib2R5PgogICAgIDxkaXYgY2xhc3M9ImJveCBpbWFnZS1iYWNr
Z3JvdW5kIj48L2Rpdj4KICAgICA8c2NyaXB0PgotICAgICAgICBmdW5jdGlvbiBmb3JjZVJlZHJh
dyhlbGVtZW50KSB7Ci0gICAgICAgICAgICB2YXIgZGlzcCA9IGVsZW1lbnQuc3R5bGUuZGlzcGxh
eTsKLSAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgICAg
ICAgIHZhciB0cmljayA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0OwotICAgICAgICAgICAgZWxlbWVu
dC5zdHlsZS5kaXNwbGF5ID0gZGlzcDsKLSAgICAgICAgfQotCiAgICAgICAgIChmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgIHZhciBkaXZFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSgiaW1hZ2UtYmFja2dyb3VuZCIpWzBdOwotCi0gICAgICAgICAgICBpZiAod2luZG93
LmludGVybmFscykgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93
LnRlc3RSdW5uZXIpIHsKICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuY2xlYXJNZW1vcnlDYWNo
ZSgpOworICAgICAgICAgICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRXZWJraXRJbWFnZVJl
YWR5RXZlbnRFbmFibGVkKHRydWUpOwogICAgICAgICAgICAgICAgIGludGVybmFscy5zZXR0aW5n
cy5zZXRMYXJnZUltYWdlQXN5bmNEZWNvZGluZ0VuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewotICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOwotICAgICAgICAgICAgICAgIGZvcmNlUmVkcmF3KGRpdkVsZW1lbnQp
OwotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvcmNlUmVkcmF3KGRpdkVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgICAgICAgICB9LCA1MCk7CisgICAgICAgICAg
ICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSgiaW1hZ2UtYmFja2dyb3VuZCIpWzBdOworIAorICAgICAgICAgICAg
ICAgIC8vIENoYW5nZSB0aGUgYmFja2dyb3VuZCBvZiB0aGUgZWxlbWVudC4KKyAgICAgICAgICAg
ICAgICBlbGVtZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICd1cmwoJyArIGltYWdlLnNyYyAr
ICcpJzsKKyAKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscyAmJiB3aW5kb3cu
dGVzdFJ1bm5lcikgeworICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBsYXlvdXQgYW5kIGRp
c3BsYXkgc28gdGhlIGltYWdlIGZyYW1lIHN0YXJ0cyBkZWNvZGluZy4KKyAgICAgICAgICAgICAg
ICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgIHRl
c3RSdW5uZXIuZGlzcGxheSgpOworIAorICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0
aGUgaW1hZ2UgZnJhbWUgdG8gZmluaXNoIGRlY29kaW5nIGJlZm9yZSBmaW5pc2hpbmcgdGhlIHRl
c3QuCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0
SW1hZ2VGcmFtZVJlYWR5IiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAgICAg
aW1hZ2Uuc3JjID0gInJlc291cmNlcy9yZWQtZ3JlZW4tYmx1ZS05MDAtMzAwLnBuZyI7CisgICAg
ICAgIH0pKCk7CiAgICAgPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2ltYWdlcy9zcHJpdGUtc2hlZXQtaW1hZ2UtZHJhdy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Nwcml0ZS1zaGVldC1pbWFnZS1kcmF3Lmh0bWwJ
KHJldmlzaW9uIDIxNjIxOSkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Nwcml0ZS1zaGVl
dC1pbWFnZS1kcmF3Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTcsNyArNyw3IEBACiAgICAgICAg
IGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICB9CiAgICAgLmltYWdlLWJhY2tncm91bmQgewot
ICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwocmVzb3VyY2VzL3Nwcml0ZS1zaGVldC1yZWQt
Z3JlZW4tYmx1ZS5wbmcpOworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIiIpOwogICAg
ICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwcHggLTEwMDBweDsKICAgICB9CiAgICAgQG1lZGlh
ICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpIHsKQEAgLTI0LDMwICsyNCwzNCBA
QAogPGJvZHk+CiAgICAgPGRpdiBjbGFzcz0iYm94IGltYWdlLWJhY2tncm91bmQiPjwvZGl2Pgog
ICAgIDxzY3JpcHQ+Ci0gICAgICAgIGZ1bmN0aW9uIGZvcmNlUmVkcmF3KGVsZW1lbnQpIHsKLSAg
ICAgICAgICAgIHZhciBkaXNwID0gZWxlbWVudC5zdHlsZS5kaXNwbGF5OwotICAgICAgICAgICAg
ZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgICAgICAgICAgdmFyIHRyaWNrID0g
ZWxlbWVudC5vZmZzZXRIZWlnaHQ7Ci0gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkg
PSBkaXNwOwotICAgICAgICB9Ci0KICAgICAgICAgKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
dmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJpbWFnZS1i
YWNrZ3JvdW5kIilbMF07Ci0KLSAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Cisg
ICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscyAmJiB3aW5kb3cudGVzdFJ1bm5lcikgewog
ICAgICAgICAgICAgICAgIGludGVybmFscy5jbGVhck1lbW9yeUNhY2hlKCk7CisgICAgICAgICAg
ICAgICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldFdlYmtpdEltYWdlUmVhZHlFdmVudEVuYWJsZWQo
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldExhcmdlSW1hZ2VB
c3luY0RlY29kaW5nRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKSB7Ci0gICAgICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
Ci0gICAgICAgICAgICAgICAgZm9yY2VSZWRyYXcoZGl2RWxlbWVudCk7Ci0gICAgICAgICAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yY2VSZWRy
YXcoZGl2RWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOwotICAgICAgICAgICAgICAgIH0sIDUwKTsKKyAgICAgICAgICAgIHZhciBpbWFnZSA9IG5l
dyBJbWFnZSgpOworICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l
KCJpbWFnZS1iYWNrZ3JvdW5kIilbMF07CisgCisgICAgICAgICAgICAgICAgLy8gQ2hhbmdlIHRo
ZSBiYWNrZ3JvdW5kIG9mIHRoZSBlbGVtZW50LgorICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5
bGUuYmFja2dyb3VuZEltYWdlID0gJ3VybCgnICsgaW1hZ2Uuc3JjICsgJyknOworIAorICAgICAg
ICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy50ZXN0UnVubmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGxheW91dCBhbmQgZGlzcGxheSBzbyB0aGUgaW1h
Z2UgZnJhbWUgc3RhcnRzIGRlY29kaW5nLgorICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5i
b2R5Lm9mZnNldEhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5kaXNwbGF5
KCk7CisgCisgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBpbWFnZSBmcmFtZSB0
byBmaW5pc2ggZGVjb2RpbmcgYmVmb3JlIGZpbmlzaGluZyB0aGUgdGVzdC4KKyAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRJbWFnZUZyYW1lUmVhZHki
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOworICAgICAgICAgICAgICAgICAgICB9LCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgICAgICBpbWFnZS5zcmMgPSAicmVz
b3VyY2VzL3Nwcml0ZS1zaGVldC1yZWQtZ3JlZW4tYmx1ZS5wbmciOworICAgICAgICB9KSgpOwog
ICAgIDwvc2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309117</attachid>
            <date>2017-05-04 17:29:35 -0700</date>
            <delta_ts>2017-05-04 18:12:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171634-20170504172935.patch</filename>
            <type>text/plain</type>
            <size>9762</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIxNjIxOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE3LTA1LTA0ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIHRoZSBhc3luY2hy
b25vdXMgaW1hZ2UgZGVjb2RpbmcgdGVzdHMgdG8gdXNlIHRoZSBldmVudCB3ZWJraXRJbWFnZUZy
YW1lUmVhZHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MTYzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRvIHRlc3QgdGhlIGFzeW5jIGltYWdlIGRlY29kaW5nIHJlbGlhYmx5IHdlIG5lZWQgdG8gZG8g
dGhlIGZvbGxvd2luZzoKKworICAgICAgICAtLSBNYWtlIHN1cmUgdG8gbG9hZCB0aGUgaW1hZ2Ug
YmVmb3JlIHNldHRpbmcgaXRzIHNyYyB0byB0aGUgZWxlbWVudC4KKyAgICAgICAgLS0gQ2FsbCBk
b2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCB0byBmb3JjZSBsYXlvdXQuCisgICAgICAgIC0tIENh
bGwgdGVzdFJ1bm5lci5kaXNwbGF5KCkgdG8gZm9yY2UgdGhlIGZpcnN0IHBhaW50LgorICAgICAg
ICAtLSBVc2UgdGhlIHdlYmtpdEltYWdlRnJhbWVSZWFkeSB0byByZWxpYWJseSBrbm93IHdoZW4g
YW4gaW1hZ2UgZnJhbWUgaXMgcmVhZHkuCisgICAgICAgIC0tIFdoZW4gd2Via2l0SW1hZ2VGcmFt
ZVJlYWR5IGlzIGZpcmVkIGNhbGwgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCkuIFRoaXMKKyAgICAg
ICAgICAgd2lsbCBmb3JjZSB0aGUgc2Vjb25kIHBhaW50LgorCisgICAgICAgICogZmFzdC9pbWFn
ZXMvYXN5bmMtaW1hZ2UtYmFja2dyb3VuZC1pbWFnZS1yZXBlYXRlZC5odG1sOgorICAgICAgICAq
IGZhc3QvaW1hZ2VzL2FzeW5jLWltYWdlLWJhY2tncm91bmQtaW1hZ2UuaHRtbDoKKyAgICAgICAg
KiBmYXN0L2ltYWdlcy9zcHJpdGUtc2hlZXQtaW1hZ2UtZHJhdy5odG1sOgorCiAyMDE3LTA1LTA0
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVuYW1lIHRlc3RSdW5uZXIuZGlzcGxheUFuZFRyYWNrUmVwYWludHMoKSB0byB0ZXN0UnVubmVy
LmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L2FzeW5jLWltYWdlLWJhY2tncm91bmQtaW1hZ2UtcmVwZWF0ZWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLXJl
cGVhdGVkLmh0bWwJKHJldmlzaW9uIDIxNjIxOSkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L2FzeW5jLWltYWdlLWJhY2tncm91bmQtaW1hZ2UtcmVwZWF0ZWQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMTUsNyArMTUsNyBAQAogICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7
CiAgICAgfQogICAgIC5pbWFnZS1iYWNrZ3JvdW5kIHsKLSAgICAgICAgYmFja2dyb3VuZC1pbWFn
ZTogdXJsKHJlc291cmNlcy9zcHJpdGUtc2hlZXQtcmVkLWdyZWVuLWJsdWUucG5nKTsKKyAgICAg
ICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCIiKTsKICAgICB9CiAgICAgQG1lZGlhICgtd2Via2l0
LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpIHsKICAgICAgICAgLmJveCB7CkBAIC0zOSwzMyAr
MzksNDggQEAKICAgICA8YnI+CiAgICAgPGRpdiBjbGFzcz0iYm94IHJlcGVhdC1ib3ggaW1hZ2Ut
YmFja2dyb3VuZCI+PC9kaXY+CiAgICAgPHNjcmlwdD4KLSAgICAgICAgZnVuY3Rpb24gZm9yY2VS
ZWRyYXcoZWxlbWVudHMpIHsKLSAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlbGVtZW50
cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5zdHlsZS5kaXNwbGF5
ID0gJ25vbmUnOworICAgICAgICBmdW5jdGlvbiBzZXRFbGVtZW50SW1hZ2VCYWNrZ3JvdW5kKGVs
ZW1lbnQsIGltYWdlKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUp
ID0+IHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICd1
cmwoJyArIGltYWdlLnNyYyArICcpJzsKIAotICAgICAgICAgICAgdmFyIHRyaWNrID0gZWxlbWVu
dC5vZmZzZXRIZWlnaHQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7
IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5z
dHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CisgICAgICAgICAgICAgICAgLy8gRm9yY2Ug
bGF5b3V0IGFuZCBkaXNwbGF5IHNvIHRoZSBpbWFnZSBmcmFtZSBzdGFydHMgZGVjb2RpbmcuCisg
ICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7CisgICAgICAgICAgICAg
ICAgdGVzdFJ1bm5lci5kaXNwbGF5KCk7CisgCisgICAgICAgICAgICAgICAgZWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJ3ZWJraXRJbWFnZUZyYW1lUmVhZHkiLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICAgIH0sIGZhbHNlKTsKKyAg
ICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgdmFyIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaW1h
Z2UtYmFja2dyb3VuZCIpOwotCi0gICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykgewor
ICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LnRlc3RSdW5uZXIpIHsK
ICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuY2xlYXJNZW1vcnlDYWNoZSgpOworICAgICAgICAg
ICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRXZWJraXRJbWFnZVJlYWR5RXZlbnRFbmFibGVk
KHRydWUpOwogICAgICAgICAgICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRMYXJnZUltYWdl
QXN5bmNEZWNvZGluZ0VuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci53
YWl0VW50aWxEb25lKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikgewotICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OwotICAgICAgICAgICAgICAgIGZvcmNlUmVkcmF3KGVsZW1lbnRzKTsKLSAgICAgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBmb3JjZVJlZHJh
dyhlbGVtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OwotICAgICAgICAgICAgICAgIH0sIDUwKTsKKyAgICAgICAgICAgIHZhciBpbWFnZSA9IG5ldyBJ
bWFnZSgpOworICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgi
aW1hZ2UtYmFja2dyb3VuZCIpOworIAorICAgICAgICAgICAgICAgIC8vIENoYW5nZSB0aGUgYmFj
a2dyb3VuZCBvZiB0aGUgZWxlbWVudHMuCisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRl
cm5hbHMgJiYgd2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBy
b21pc2VzID0gW107CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBlbGVtZW50cy5sZW5ndGg7ICsraW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICBw
cm9taXNlcy5wdXNoKHNldEVsZW1lbnRJbWFnZUJhY2tncm91bmQoZWxlbWVudHNbaW5kZXhdLCBp
bWFnZSkpOworIAorICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhl
bigoKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGVsZW1lbnRzLmxl
bmd0aDsgKytpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2luZGV4XS5z
dHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcgKyBpbWFnZS5zcmMgKyAnKSc7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgICAgICBpbWFnZS5z
cmMgPSAicmVzb3VyY2VzL3Nwcml0ZS1zaGVldC1yZWQtZ3JlZW4tYmx1ZS5wbmciOworICAgICAg
ICB9KSgpOwogICAgIDwvc2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9pbWFnZXMvYXN5bmMtaW1hZ2UtYmFja2dyb3VuZC1pbWFnZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2FzeW5jLWltYWdlLWJhY2tncm91bmQtaW1h
Z2UuaHRtbAkocmV2aXNpb24gMjE2MjE5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvYXN5
bmMtaW1hZ2UtYmFja2dyb3VuZC1pbWFnZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYs
NyBAQAogICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgIH0KICAgICAuaW1hZ2UtYmFja2dyb3Vu
ZCB7Ci0gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChyZXNvdXJjZXMvcmVkLWdyZWVuLWJs
dWUtOTAwLTMwMC5wbmcpOworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIiIpOwogICAg
ICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzAwcHggMHB4OwogICAgIH0KICAgICBAbWVkaWEg
KC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMikgewpAQCAtMjMsMzAgKzIzLDM0IEBA
CiA8Ym9keT4KICAgICA8ZGl2IGNsYXNzPSJib3ggaW1hZ2UtYmFja2dyb3VuZCI+PC9kaXY+CiAg
ICAgPHNjcmlwdD4KLSAgICAgICAgZnVuY3Rpb24gZm9yY2VSZWRyYXcoZWxlbWVudCkgewotICAg
ICAgICAgICAgdmFyIGRpc3AgPSBlbGVtZW50LnN0eWxlLmRpc3BsYXk7Ci0gICAgICAgICAgICBl
bGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgICAgICAgICB2YXIgdHJpY2sgPSBl
bGVtZW50Lm9mZnNldEhlaWdodDsKLSAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9
IGRpc3A7Ci0gICAgICAgIH0KLQogICAgICAgICAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2
YXIgZGl2RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImltYWdlLWJh
Y2tncm91bmQiKVswXTsKLQotICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAg
ICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy50ZXN0UnVubmVyKSB7CiAg
ICAgICAgICAgICAgICAgaW50ZXJuYWxzLmNsZWFyTWVtb3J5Q2FjaGUoKTsKKyAgICAgICAgICAg
ICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0V2Via2l0SW1hZ2VSZWFkeUV2ZW50RW5hYmxlZCh0
cnVlKTsKICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0TGFyZ2VJbWFnZUFz
eW5jRGVjb2RpbmdFbmFibGVkKHRydWUpOworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpIHsKLSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsK
LSAgICAgICAgICAgICAgICBmb3JjZVJlZHJhdyhkaXZFbGVtZW50KTsKLSAgICAgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBmb3JjZVJlZHJh
dyhkaXZFbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7Ci0gICAgICAgICAgICAgICAgfSwgNTApOworICAgICAgICAgICAgdmFyIGltYWdlID0gbmV3
IEltYWdlKCk7CisgICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUo
ImltYWdlLWJhY2tncm91bmQiKVswXTsKKyAKKyAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdGhl
IGJhY2tncm91bmQgb2YgdGhlIGVsZW1lbnQuCisgICAgICAgICAgICAgICAgZWxlbWVudC5zdHls
ZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcgKyBpbWFnZS5zcmMgKyAnKSc7CisgCisgICAgICAg
ICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LnRlc3RSdW5uZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgbGF5b3V0IGFuZCBkaXNwbGF5IHNvIHRoZSBpbWFn
ZSBmcmFtZSBzdGFydHMgZGVjb2RpbmcuCisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJv
ZHkub2Zmc2V0SGVpZ2h0OworICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLmRpc3BsYXko
KTsKKyAKKyAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGltYWdlIGZyYW1lIHRv
IGZpbmlzaCBkZWNvZGluZyBiZWZvcmUgZmluaXNoaW5nIHRoZSB0ZXN0LgorICAgICAgICAgICAg
ICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdEltYWdlRnJhbWVSZWFkeSIs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGltYWdlLnNyYyA9ICJyZXNv
dXJjZXMvcmVkLWdyZWVuLWJsdWUtOTAwLTMwMC5wbmciOworICAgICAgICB9KSgpOwogICAgIDwv
c2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMv
c3ByaXRlLXNoZWV0LWltYWdlLWRyYXcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2ltYWdlcy9zcHJpdGUtc2hlZXQtaW1hZ2UtZHJhdy5odG1sCShyZXZpc2lvbiAyMTYyMTkp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9zcHJpdGUtc2hlZXQtaW1hZ2UtZHJhdy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC03LDcgKzcsNyBAQAogICAgICAgICBkaXNwbGF5OiBpbmxpbmUt
YmxvY2s7CiAgICAgfQogICAgIC5pbWFnZS1iYWNrZ3JvdW5kIHsKLSAgICAgICAgYmFja2dyb3Vu
ZC1pbWFnZTogdXJsKHJlc291cmNlcy9zcHJpdGUtc2hlZXQtcmVkLWdyZWVuLWJsdWUucG5nKTsK
KyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCIiKTsKICAgICAgICAgYmFja2dyb3VuZC1w
b3NpdGlvbjogMHB4IC0xMDAwcHg7CiAgICAgfQogICAgIEBtZWRpYSAoLXdlYmtpdC1taW4tZGV2
aWNlLXBpeGVsLXJhdGlvOiAyKSB7CkBAIC0yNCwzMCArMjQsMzQgQEAKIDxib2R5PgogICAgIDxk
aXYgY2xhc3M9ImJveCBpbWFnZS1iYWNrZ3JvdW5kIj48L2Rpdj4KICAgICA8c2NyaXB0PgotICAg
ICAgICBmdW5jdGlvbiBmb3JjZVJlZHJhdyhlbGVtZW50KSB7Ci0gICAgICAgICAgICB2YXIgZGlz
cCA9IGVsZW1lbnQuc3R5bGUuZGlzcGxheTsKLSAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlz
cGxheSA9ICdub25lJzsKLSAgICAgICAgICAgIHZhciB0cmljayA9IGVsZW1lbnQub2Zmc2V0SGVp
Z2h0OwotICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gZGlzcDsKLSAgICAgICAg
fQotCiAgICAgICAgIChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBkaXZFbGVtZW50ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaW1hZ2UtYmFja2dyb3VuZCIpWzBdOwot
Ci0gICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykgeworICAgICAgICAgICAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LnRlc3RSdW5uZXIpIHsKICAgICAgICAgICAgICAgICBp
bnRlcm5hbHMuY2xlYXJNZW1vcnlDYWNoZSgpOworICAgICAgICAgICAgICAgIGludGVybmFscy5z
ZXR0aW5ncy5zZXRXZWJraXRJbWFnZVJlYWR5RXZlbnRFbmFibGVkKHRydWUpOwogICAgICAgICAg
ICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRMYXJnZUltYWdlQXN5bmNEZWNvZGluZ0VuYWJs
ZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewotICAg
ICAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotICAgICAgICAgICAgICAg
IGZvcmNlUmVkcmF3KGRpdkVsZW1lbnQpOwotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcmNlUmVkcmF3KGRpdkVsZW1lbnQpOwot
ICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgICAg
ICAgICB9LCA1MCk7CisgICAgICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKKyAgICAg
ICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBl
bGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaW1hZ2UtYmFja2dyb3Vu
ZCIpWzBdOworIAorICAgICAgICAgICAgICAgIC8vIENoYW5nZSB0aGUgYmFja2dyb3VuZCBvZiB0
aGUgZWxlbWVudC4KKyAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmJhY2tncm91bmRJbWFn
ZSA9ICd1cmwoJyArIGltYWdlLnNyYyArICcpJzsKKyAKKyAgICAgICAgICAgICAgICBpZiAod2lu
ZG93LmludGVybmFscyAmJiB3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAgICAgICAg
ICAvLyBGb3JjZSBsYXlvdXQgYW5kIGRpc3BsYXkgc28gdGhlIGltYWdlIGZyYW1lIHN0YXJ0cyBk
ZWNvZGluZy4KKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7
CisgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIuZGlzcGxheSgpOworIAorICAgICAgICAg
ICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgaW1hZ2UgZnJhbWUgdG8gZmluaXNoIGRlY29kaW5n
IGJlZm9yZSBmaW5pc2hpbmcgdGhlIHRlc3QuCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigid2Via2l0SW1hZ2VGcmFtZVJlYWR5IiwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgfQorICAgICAgICAgICAgaW1hZ2Uuc3JjID0gInJlc291cmNlcy9zcHJpdGUtc2hl
ZXQtcmVkLWdyZWVuLWJsdWUucG5nIjsKKyAgICAgICAgfSkoKTsKICAgICA8L3NjcmlwdD4KIDwv
Ym9keT4KIDwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309122</attachid>
            <date>2017-05-04 18:12:30 -0700</date>
            <delta_ts>2017-05-04 18:53:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171634-20170504181229.patch</filename>
            <type>text/plain</type>
            <size>9652</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIxNjIxOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE3LTA1LTA0ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIHRoZSBhc3luY2hy
b25vdXMgaW1hZ2UgZGVjb2RpbmcgdGVzdHMgdG8gdXNlIHRoZSBldmVudCB3ZWJraXRJbWFnZUZy
YW1lUmVhZHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MTYzNAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICBU
byB0ZXN0IHRoZSBhc3luYyBpbWFnZSBkZWNvZGluZyByZWxpYWJseSB3ZSBuZWVkIHRvIGRvIHRo
ZSBmb2xsb3dpbmc6CisKKyAgICAgICAgLS0gTWFrZSBzdXJlIHRvIGxvYWQgdGhlIGltYWdlIGJl
Zm9yZSBzZXR0aW5nIGl0cyBzcmMgdG8gdGhlIGVsZW1lbnQuCisgICAgICAgIC0tIENhbGwgZG9j
dW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgdG8gZm9yY2UgbGF5b3V0LgorICAgICAgICAtLSBDYWxs
IHRlc3RSdW5uZXIuZGlzcGxheSgpIHRvIGZvcmNlIHRoZSBmaXJzdCBwYWludC4KKyAgICAgICAg
LS0gVXNlIHRoZSB3ZWJraXRJbWFnZUZyYW1lUmVhZHkgdG8gcmVsaWFibHkga25vdyB3aGVuIGFu
IGltYWdlIGZyYW1lIGlzIHJlYWR5LgorICAgICAgICAtLSBXaGVuIHdlYmtpdEltYWdlRnJhbWVS
ZWFkeSBpcyBmaXJlZCBjYWxsIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLiBUaGlzCisgICAgICAg
ICAgIHdpbGwgZm9yY2UgdGhlIHNlY29uZCBwYWludC4KKworICAgICAgICAqIGZhc3QvaW1hZ2Vz
L2FzeW5jLWltYWdlLWJhY2tncm91bmQtaW1hZ2UtcmVwZWF0ZWQuaHRtbDoKKyAgICAgICAgKiBm
YXN0L2ltYWdlcy9hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWw6CisgICAgICAgICog
ZmFzdC9pbWFnZXMvc3ByaXRlLXNoZWV0LWltYWdlLWRyYXcuaHRtbDoKKwogMjAxNy0wNS0wNCAg
U2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
bmFtZSB0ZXN0UnVubmVyLmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCkgdG8gdGVzdFJ1bm5lci5k
aXNwbGF5QW5kVHJhY2tSZXBhaW50cygpCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9h
c3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLXJlcGVhdGVkLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvYXN5bmMtaW1hZ2UtYmFja2dyb3VuZC1pbWFnZS1yZXBl
YXRlZC5odG1sCShyZXZpc2lvbiAyMTYyMTkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9h
c3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLXJlcGVhdGVkLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTE1LDcgKzE1LDYgQEAKICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14Owog
ICAgIH0KICAgICAuaW1hZ2UtYmFja2dyb3VuZCB7Ci0gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6
IHVybChyZXNvdXJjZXMvc3ByaXRlLXNoZWV0LXJlZC1ncmVlbi1ibHVlLnBuZyk7CiAgICAgfQog
ICAgIEBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSB7CiAgICAgICAg
IC5ib3ggewpAQCAtMzksMzMgKzM4LDQ4IEBACiAgICAgPGJyPgogICAgIDxkaXYgY2xhc3M9ImJv
eCByZXBlYXQtYm94IGltYWdlLWJhY2tncm91bmQiPjwvZGl2PgogICAgIDxzY3JpcHQ+Ci0gICAg
ICAgIGZ1bmN0aW9uIGZvcmNlUmVkcmF3KGVsZW1lbnRzKSB7Ci0gICAgICAgICAgICBmb3IodmFy
IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgZWxlbWVu
dHNbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgZnVuY3Rpb24gc2V0RWxlbWVu
dEltYWdlQmFja2dyb3VuZChlbGVtZW50LCBpbWFnZSkgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5i
YWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcgKyBpbWFnZS5zcmMgKyAnKSc7CiAKLSAgICAgICAgICAg
IHZhciB0cmljayA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0OwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAg
ICAgICAgZWxlbWVudHNbaV0uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOworICAgICAg
ICAgICAgICAgIC8vIEZvcmNlIGxheW91dCBhbmQgZGlzcGxheSBzbyB0aGUgaW1hZ2UgZnJhbWUg
c3RhcnRzIGRlY29kaW5nLgorICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVp
Z2h0OworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIuZGlzcGxheSgpOworIAorICAgICAgICAg
ICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0SW1hZ2VGcmFtZVJlYWR5Iiwg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAg
ICAgICB9LCBmYWxzZSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUoImltYWdlLWJhY2tncm91bmQiKTsKLQotICAgICAgICAgICAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzICYmIHdp
bmRvdy50ZXN0UnVubmVyKSB7CiAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLmNsZWFyTWVtb3J5
Q2FjaGUoKTsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0V2Via2l0SW1h
Z2VSZWFkeUV2ZW50RW5hYmxlZCh0cnVlKTsKICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuc2V0
dGluZ3Muc2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkKHRydWUpOworICAgICAgICAg
ICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKLSAgICAgICAgICAgICAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKLSAgICAgICAgICAgICAgICBmb3JjZVJlZHJhdyhlbGVtZW50
cyk7Ci0gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yY2VSZWRyYXcoZWxlbWVudHMpOwotICAgICAgICAgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgICAgICAgICB9LCA1MCk7CisgICAgICAgICAg
ICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoImltYWdlLWJhY2tncm91bmQiKTsKKyAKKyAgICAgICAgICAgICAg
ICAvLyBDaGFuZ2UgdGhlIGJhY2tncm91bmQgb2YgdGhlIGVsZW1lbnRzLgorICAgICAgICAgICAg
ICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgZWxlbWVudHMubGVuZ3RoOyArK2luZGV4KQorICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChzZXRFbGVtZW50SW1hZ2VCYWNrZ3JvdW5k
KGVsZW1lbnRzW2luZGV4XSwgaW1hZ2UpKTsKKyAKKyAgICAgICAgICAgICAgICAgICAgUHJvbWlz
ZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCBlbGVtZW50cy5sZW5ndGg7ICsraW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50c1tpbmRleF0uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gJ3VybCgnICsgaW1hZ2Uu
c3JjICsgJyknOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQor
ICAgICAgICAgICAgaW1hZ2Uuc3JjID0gInJlc291cmNlcy9zcHJpdGUtc2hlZXQtcmVkLWdyZWVu
LWJsdWUucG5nIjsKKyAgICAgICAgfSkoKTsKICAgICA8L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2FzeW5jLWltYWdlLWJhY2tncm91bmQt
aW1hZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9hc3luYy1p
bWFnZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwJKHJldmlzaW9uIDIxNjIxOSkKKysrIExheW91dFRl
c3RzL2Zhc3QvaW1hZ2VzL2FzeW5jLWltYWdlLWJhY2tncm91bmQtaW1hZ2UuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtNiw3ICs2LDYgQEAKICAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICB9CiAg
ICAgLmltYWdlLWJhY2tncm91bmQgewotICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwocmVz
b3VyY2VzL3JlZC1ncmVlbi1ibHVlLTkwMC0zMDAucG5nKTsKICAgICAgICAgYmFja2dyb3VuZC1w
b3NpdGlvbjogLTMwMHB4IDBweDsKICAgICB9CiAgICAgQG1lZGlhICgtd2Via2l0LW1pbi1kZXZp
Y2UtcGl4ZWwtcmF0aW86IDIpIHsKQEAgLTIzLDMwICsyMiwzNCBAQAogPGJvZHk+CiAgICAgPGRp
diBjbGFzcz0iYm94IGltYWdlLWJhY2tncm91bmQiPjwvZGl2PgogICAgIDxzY3JpcHQ+Ci0gICAg
ICAgIGZ1bmN0aW9uIGZvcmNlUmVkcmF3KGVsZW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBkaXNw
ID0gZWxlbWVudC5zdHlsZS5kaXNwbGF5OwotICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNw
bGF5ID0gJ25vbmUnOwotICAgICAgICAgICAgdmFyIHRyaWNrID0gZWxlbWVudC5vZmZzZXRIZWln
aHQ7Ci0gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBkaXNwOwotICAgICAgICB9
Ci0KICAgICAgICAgKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIGRpdkVsZW1lbnQgPSBk
b2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJpbWFnZS1iYWNrZ3JvdW5kIilbMF07Ci0K
LSAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmludGVybmFscyAmJiB3aW5kb3cudGVzdFJ1bm5lcikgewogICAgICAgICAgICAgICAgIGlu
dGVybmFscy5jbGVhck1lbW9yeUNhY2hlKCk7CisgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNl
dHRpbmdzLnNldFdlYmtpdEltYWdlUmVhZHlFdmVudEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldExhcmdlSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxl
ZCh0cnVlKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAg
ICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAgICAgICAgICAg
Zm9yY2VSZWRyYXcoZGl2RWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yY2VSZWRyYXcoZGl2RWxlbWVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgICAgICAgICAg
ICAgIH0sIDUwKTsKKyAgICAgICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOworICAgICAg
ICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJpbWFnZS1iYWNrZ3JvdW5k
IilbMF07CisgCisgICAgICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBiYWNrZ3JvdW5kIG9mIHRo
ZSBlbGVtZW50LgorICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZEltYWdl
ID0gJ3VybCgnICsgaW1hZ2Uuc3JjICsgJyknOworIAorICAgICAgICAgICAgICAgIGlmICh3aW5k
b3cuaW50ZXJuYWxzICYmIHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEZvcmNlIGxheW91dCBhbmQgZGlzcGxheSBzbyB0aGUgaW1hZ2UgZnJhbWUgc3RhcnRzIGRl
Y29kaW5nLgorICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDsK
KyAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5kaXNwbGF5KCk7CisgCisgICAgICAgICAg
ICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBpbWFnZSBmcmFtZSB0byBmaW5pc2ggZGVjb2Rpbmcg
YmVmb3JlIGZpbmlzaGluZyB0aGUgdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRJbWFnZUZyYW1lUmVhZHkiLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAg
ICAgICAgICAgICB9LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICB9CisgICAgICAgICAgICBpbWFnZS5zcmMgPSAicmVzb3VyY2VzL3JlZC1ncmVlbi1i
bHVlLTkwMC0zMDAucG5nIjsKKyAgICAgICAgfSkoKTsKICAgICA8L3NjcmlwdD4KIDwvYm9keT4K
IDwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Nwcml0ZS1zaGVldC1pbWFn
ZS1kcmF3Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvc3ByaXRl
LXNoZWV0LWltYWdlLWRyYXcuaHRtbAkocmV2aXNpb24gMjE2MjE5KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9pbWFnZXMvc3ByaXRlLXNoZWV0LWltYWdlLWRyYXcuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtNyw3ICs3LDYgQEAKICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgIH0KICAg
ICAuaW1hZ2UtYmFja2dyb3VuZCB7Ci0gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChyZXNv
dXJjZXMvc3ByaXRlLXNoZWV0LXJlZC1ncmVlbi1ibHVlLnBuZyk7CiAgICAgICAgIGJhY2tncm91
bmQtcG9zaXRpb246IDBweCAtMTAwMHB4OwogICAgIH0KICAgICBAbWVkaWEgKC13ZWJraXQtbWlu
LWRldmljZS1waXhlbC1yYXRpbzogMikgewpAQCAtMjQsMzAgKzIzLDM0IEBACiA8Ym9keT4KICAg
ICA8ZGl2IGNsYXNzPSJib3ggaW1hZ2UtYmFja2dyb3VuZCI+PC9kaXY+CiAgICAgPHNjcmlwdD4K
LSAgICAgICAgZnVuY3Rpb24gZm9yY2VSZWRyYXcoZWxlbWVudCkgewotICAgICAgICAgICAgdmFy
IGRpc3AgPSBlbGVtZW50LnN0eWxlLmRpc3BsYXk7Ci0gICAgICAgICAgICBlbGVtZW50LnN0eWxl
LmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgICAgICAgICB2YXIgdHJpY2sgPSBlbGVtZW50Lm9mZnNl
dEhlaWdodDsKLSAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IGRpc3A7Ci0gICAg
ICAgIH0KLQogICAgICAgICAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgZGl2RWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImltYWdlLWJhY2tncm91bmQiKVsw
XTsKLQotICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgIGlm
ICh3aW5kb3cuaW50ZXJuYWxzICYmIHdpbmRvdy50ZXN0UnVubmVyKSB7CiAgICAgICAgICAgICAg
ICAgaW50ZXJuYWxzLmNsZWFyTWVtb3J5Q2FjaGUoKTsKKyAgICAgICAgICAgICAgICBpbnRlcm5h
bHMuc2V0dGluZ3Muc2V0V2Via2l0SW1hZ2VSZWFkeUV2ZW50RW5hYmxlZCh0cnVlKTsKICAgICAg
ICAgICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdF
bmFibGVkKHRydWUpOworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
LSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLSAgICAgICAgICAg
ICAgICBmb3JjZVJlZHJhdyhkaXZFbGVtZW50KTsKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBmb3JjZVJlZHJhdyhkaXZFbGVtZW50
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgICAg
ICAgICAgICAgfSwgNTApOworICAgICAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Cisg
ICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2
YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImltYWdlLWJhY2tn
cm91bmQiKVswXTsKKyAKKyAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdGhlIGJhY2tncm91bmQg
b2YgdGhlIGVsZW1lbnQuCisgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5k
SW1hZ2UgPSAndXJsKCcgKyBpbWFnZS5zcmMgKyAnKSc7CisgCisgICAgICAgICAgICAgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRm9yY2UgbGF5b3V0IGFuZCBkaXNwbGF5IHNvIHRoZSBpbWFnZSBmcmFtZSBzdGFy
dHMgZGVjb2RpbmcuCisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVp
Z2h0OworICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLmRpc3BsYXkoKTsKKyAKKyAgICAg
ICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGltYWdlIGZyYW1lIHRvIGZpbmlzaCBkZWNv
ZGluZyBiZWZvcmUgZmluaXNoaW5nIHRoZSB0ZXN0LgorICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdEltYWdlRnJhbWVSZWFkeSIsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0sIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGltYWdlLnNyYyA9ICJyZXNvdXJjZXMvc3ByaXRl
LXNoZWV0LXJlZC1ncmVlbi1ibHVlLnBuZyI7CisgICAgICAgIH0pKCk7CiAgICAgPC9zY3JpcHQ+
CiA8L2JvZHk+CiA8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>