<?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>146350</bug_id>
          
          <creation_ts>2015-06-26 10:47:09 -0700</creation_ts>
          <short_desc>Add support for image previews</short_desc>
          <delta_ts>2015-06-26 16:51:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>enrica</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
    
    <cc>yongjun_zhang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1104974</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-06-26 10:47:09 -0700</bug_when>
    <thetext>Add support for image previews

rdar://problem/20640234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104975</commentid>
    <comment_count>1</comment_count>
      <attachid>255647</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-06-26 10:49:57 -0700</bug_when>
    <thetext>Created attachment 255647
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104978</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-26 10:52:25 -0700</bug_when>
    <thetext>Attachment 255647 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:59:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:83:  Extra space after (  [whitespace/parens] [2]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104981</commentid>
    <comment_count>3</comment_count>
      <attachid>255647</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-06-26 10:58:29 -0700</bug_when>
    <thetext>Comment on attachment 255647
Patch

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

&gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.h:32
&gt; +@interface WKImagePreviewViewController : UIViewController {

no need for the curly braces

&gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:53
&gt; +    _imageView = [[UIImageView alloc] initWithFrame:CGRectZero];

This is leaking, no?

&gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:54
&gt; +    [_imageView setImage:[[UIImage alloc] initWithCGImage:_image.get()]];

This too, probably?

&gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:56
&gt; +    CGSize screenSize = [[[UIApplication sharedApplication] delegate] window].bounds.size;

More dots, less square brackets.

&gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:70
&gt; +    CGRect bounds = self.view.bounds;
&gt; +    _imageView.frame = bounds;

No need for the temporary.

&gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:73
&gt; +static CGSize _scaleSizeWithinSize(CGSize source, CGSize destination)

Is this one of those GeometryUtilities (or whatever) things? If not, can it be?

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:3146
&gt; +        SFSafariViewController *previewViewController = [allocSFSafariViewControllerInstance() initWithURL:targetURL];

Seems likely that this leaks too?

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:3157
&gt; +        return [[WKImagePreviewViewController alloc] initWithCGImage:_positionInformation.image-&gt;makeCGImageCopy()];

And this?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:2142
&gt; +                            RefPtr&lt;ShareableBitmap&gt; sharedBitmap = ShareableBitmap::createShareable(IntSize(image-&gt;size()), ShareableBitmap::SupportsAlpha);

Please always null-check the result of ShareableBitmap::ctreateShareable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105024</commentid>
    <comment_count>4</comment_count>
      <attachid>255661</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-06-26 12:35:42 -0700</bug_when>
    <thetext>Created attachment 255661
Patch

Patch that addresses Tim&apos;s feedback!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105026</commentid>
    <comment_count>5</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-06-26 12:37:01 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 255647 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=255647&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.h:32
&gt; &gt; +@interface WKImagePreviewViewController : UIViewController {
&gt; 
&gt; no need for the curly braces
&gt; 
Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:53
&gt; &gt; +    _imageView = [[UIImageView alloc] initWithFrame:CGRectZero];
&gt; 
&gt; This is leaking, no?
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:54
&gt; &gt; +    [_imageView setImage:[[UIImage alloc] initWithCGImage:_image.get()]];
&gt; 
&gt; This too, probably?
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:56
&gt; &gt; +    CGSize screenSize = [[[UIApplication sharedApplication] delegate] window].bounds.size;
&gt; 
&gt; More dots, less square brackets.
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:70
&gt; &gt; +    CGRect bounds = self.view.bounds;
&gt; &gt; +    _imageView.frame = bounds;
&gt; 
&gt; No need for the temporary.
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:73
&gt; &gt; +static CGSize _scaleSizeWithinSize(CGSize source, CGSize destination)
&gt; 
&gt; Is this one of those GeometryUtilities (or whatever) things? If not, can it
&gt; be?
&gt; 

Sort of, but this will be easier to explain in person.

&gt; &gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:3146
&gt; &gt; +        SFSafariViewController *previewViewController = [allocSFSafariViewControllerInstance() initWithURL:targetURL];
&gt; 
&gt; Seems likely that this leaks too?
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:3157
&gt; &gt; +        return [[WKImagePreviewViewController alloc] initWithCGImage:_positionInformation.image-&gt;makeCGImageCopy()];
&gt; 
&gt; And this?
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:2142
&gt; &gt; +                            RefPtr&lt;ShareableBitmap&gt; sharedBitmap = ShareableBitmap::createShareable(IntSize(image-&gt;size()), ShareableBitmap::SupportsAlpha);
&gt; 
&gt; Please always null-check the result of ShareableBitmap::ctreateShareable.

Fixed.

Thanks Tim!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105047</commentid>
    <comment_count>6</comment_count>
      <attachid>255661</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-06-26 14:04:09 -0700</bug_when>
    <thetext>Comment on attachment 255661
Patch

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

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:3139
&gt; +        NSURL *targetURL = [NSURL URLWithString:_positionInformation.url];

This probably should use _web_URLWithWTFString?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:2142
&gt; +                            if (RefPtr&lt;ShareableBitmap&gt; sharedBitmap = ShareableBitmap::createShareable(IntSize(image-&gt;size()), ShareableBitmap::SupportsAlpha)) {

Wonder if we should have a cap too (screen size?).

Also should consider what should happen with animated images.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105059</commentid>
    <comment_count>7</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-06-26 14:25:15 -0700</bug_when>
    <thetext>Thanks Tim!

http://trac.webkit.org/changeset/186008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105070</commentid>
    <comment_count>8</comment_count>
      <attachid>255661</attachid>
    <who name="">mitz</who>
    <bug_when>2015-06-26 15:02:19 -0700</bug_when>
    <thetext>Comment on attachment 255661
Patch

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

&gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:57
&gt; +    CGSize screenSize = UIApplication.sharedApplication.delegate.window.bounds.size;

-window is an optional method in the UIApplicationDelegate protocol. Invoking it without checking if the delegate responds to it first could lead to a crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105081</commentid>
    <comment_count>9</comment_count>
      <attachid>255661</attachid>
    <who name="">mitz</who>
    <bug_when>2015-06-26 15:46:33 -0700</bug_when>
    <thetext>Comment on attachment 255661
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:57
&gt;&gt; +    CGSize screenSize = UIApplication.sharedApplication.delegate.window.bounds.size;
&gt; 
&gt; -window is an optional method in the UIApplicationDelegate protocol. Invoking it without checking if the delegate responds to it first could lead to a crash.

Also, -delegate itself may return nil. And also, we normally don’t use dot notation to invoke class methods, so this should begin [UIApplication sharedApplication]. It’s also misleading to call something that is the size of a window screenSize. If we want the size of a screen we can use UIScreen API to get it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105093</commentid>
    <comment_count>10</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-06-26 16:51:51 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 255661 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=255661&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/WKImagePreviewViewController.mm:57
&gt; &gt;&gt; +    CGSize screenSize = UIApplication.sharedApplication.delegate.window.bounds.size;
&gt; &gt; 
&gt; &gt; -window is an optional method in the UIApplicationDelegate protocol. Invoking it without checking if the delegate responds to it first could lead to a crash.
&gt; 
&gt; Also, -delegate itself may return nil. And also, we normally don’t use dot
&gt; notation to invoke class methods, so this should begin [UIApplication
&gt; sharedApplication]. It’s also misleading to call something that is the size
&gt; of a window screenSize. If we want the size of a screen we can use UIScreen
&gt; API to get it.

Thanks, Dan! http://trac.webkit.org/changeset/186019</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255647</attachid>
            <date>2015-06-26 10:49:57 -0700</date>
            <delta_ts>2015-06-26 12:35:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>19815</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjAwMikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE1LTA2LTI2ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgaW1hZ2Ug
cHJldmlld3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NjM1MAorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9i
bGVtLzIwNjQwMjM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRm9yIGltYWdlcywgdXNlIHRoZSBhY3R1YWwgaW1hZ2UgaW5zdGVhZCBvZiBhIHNuYXBz
aG90LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisKKyAgICAg
ICAgVmlld0NvbnRyb2xsZXIgZm9yIGltYWdlIHByZXZpZXcuCisgICAgICAgICogVUlQcm9jZXNz
L1dLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1dLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW06IEFkZGVkLgorICAgICAgICAoLVtX
S0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyIGxvYWRWaWV3XSk6CisgICAgICAgICgtW1dLSW1h
Z2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIgaW5pdFdpdGhDR0ltYWdlOl0pOgorICAgICAgICAoLVtX
S0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyIHZpZXdEaWRMYXlvdXRTdWJ2aWV3c10pOgorICAg
ICAgICAoX3NjYWxlU2l6ZVdpdGhpblNpemUpOgorCisgICAgICAgIE5ldyBlbnVtIGFuZCBtZW1i
ZXIgdmFyaWFibGUgdG8ga2VlcCB0cmFjayBvZiBwcmV2aWV3IHR5cGUuCisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKworICAgICAgICBPbmx5IGFwcGx5
IHRoZSBodHRwIHJlc3RyaWN0aW9uIHRvIG5vbi1pbWFnZSBsaW5rcyBzaW5jZSB3ZSBjYW4gc3Rp
bGwgcHJldmlldyB0aGUgCisgICAgICAgIGltYWdlIG9mIGEgbm9uLWh0dHAgaW1hZ2UgbGluay4K
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBnZXN0dXJlUmVjb2duaXplclNob3VsZEJlZ2luOl0p
OgorCisgICAgICAgIEhhbmRsZSBsaW5rcyBhbmQgaW1hZ2VzLgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxlckZvclBvc2l0aW9uOmluU291cmNlVmlldzpdKToK
KworICAgICAgICBSZXR1cm4gZWFybHkgZm9yIG5vbi1saW5rIHByZXZpZXdzLgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNvbW1pdFByZXZpZXdWaWV3Q29udHJvbGxlcjpdKToKKworICAgICAg
ICBOZXcgZmlsZXMuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorCisgICAgICAgIEp1c3QgdXNlIHRoZSBhY3R1YWwgaW1hZ2UgaW4gdGhlIFBvc2l0aW9uSW5m
b3JtYXRpb24gZm9yIGltYWdlIGVsZW1lbnRzIHJhdGhlciAKKyAgICAgICAgdGhhbiB0YWtpbmcg
YSBzY3JlZW4gc2hvdC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24p
OgorCiAyMDE1LTA2LTI2ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXaXJlbGVzcyBQbGF5YmFjayBUYXJnZXQtcmVsYXRlZCAjaW1wb3J0IHNob3VsZCBiZSBhICNp
bmNsdWRlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XS0lt
YWdlUHJldmlld1ZpZXdDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1w
b3J0IDxVSUtpdC9VSUtpdC5oPgorCisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbnRl
cmZhY2UgV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlciA6IFVJVmlld0NvbnRyb2xsZXIgewor
fQorLSAoaWQpaW5pdFdpdGhDR0ltYWdlOihSZXRhaW5QdHI8Q0dJbWFnZVJlZj4paW1hZ2U7CitA
ZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XS0ltYWdlUHJldmlld1ZpZXdD
b250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xs
ZXIuaCIKKworI2ltcG9ydCA8V2ViQ29yZS9JbnRTaXplLmg+CisKKyNpZiBQTEFURk9STShJT1Mp
CisKK0BpbXBsZW1lbnRhdGlvbiBXS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyIHsKKyAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gX2ltYWdlOworICAgIFVJSW1hZ2VWaWV3ICpfaW1hZ2VWaWV3
OworfQorCistICh2b2lkKWxvYWRWaWV3Cit7CisgICAgW3N1cGVyIGxvYWRWaWV3XTsKKyAgICBz
ZWxmLnZpZXcuYmFja2dyb3VuZENvbG9yID0gW1VJQ29sb3Igd2hpdGVDb2xvcl07CisgICAgW3Nl
bGYudmlldyBhZGRTdWJ2aWV3Ol9pbWFnZVZpZXddOworfQorCistIChpZClpbml0V2l0aENHSW1h
Z2U6KFJldGFpblB0cjxDR0ltYWdlUmVmPilpbWFnZQoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhOaWJOYW1lOm5pbCBidW5kbGU6bmlsXTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBfaW1hZ2UgPSBpbWFnZTsKKworICAgIF9pbWFnZVZpZXcgPSBbW1VJ
SW1hZ2VWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm9dOworICAgIFtfaW1hZ2VW
aWV3IHNldEltYWdlOltbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9pbWFnZS5nZXQo
KV1dOworCisgICAgQ0dTaXplIHNjcmVlblNpemUgPSBbW1tVSUFwcGxpY2F0aW9uIHNoYXJlZEFw
cGxpY2F0aW9uXSBkZWxlZ2F0ZV0gd2luZG93XS5ib3VuZHMuc2l6ZTsKKyAgICBDR1NpemUgaW1h
Z2VTaXplID0gX3NjYWxlU2l6ZVdpdGhpblNpemUoQ0dTaXplTWFrZShDR0ltYWdlR2V0V2lkdGgo
X2ltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChfaW1hZ2UuZ2V0KCkpKSwgc2NyZWVuU2l6
ZSk7CisgICAgX2ltYWdlVmlldy5mcmFtZSA9IENHUmVjdE1ha2UoX2ltYWdlVmlldy5mcmFtZS5v
cmlnaW4ueCwgX2ltYWdlVmlldy5mcmFtZS5vcmlnaW4ueSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW1hZ2VTaXplLndpZHRoLCBpbWFnZVNpemUuaGVpZ2h0KTsKKyAgICBbc2VsZiBz
ZXRQcmVmZXJyZWRDb250ZW50U2l6ZTppbWFnZVNpemVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpdmlld0RpZExheW91dFN1YnZpZXdzCit7CisgICAgW3N1cGVyIHZpZXdEaWRM
YXlvdXRTdWJ2aWV3c107CisKKyAgICBDR1JlY3QgYm91bmRzID0gc2VsZi52aWV3LmJvdW5kczsK
KyAgICBfaW1hZ2VWaWV3LmZyYW1lID0gYm91bmRzOworfQorCitzdGF0aWMgQ0dTaXplIF9zY2Fs
ZVNpemVXaXRoaW5TaXplKENHU2l6ZSBzb3VyY2UsIENHU2l6ZSBkZXN0aW5hdGlvbikKK3sKKyAg
ICBDR1NpemUgc2l6ZSA9IGRlc3RpbmF0aW9uOworICAgIENHRmxvYXQgc291cmNlQXNwZWN0UmF0
aW8gPSAoc291cmNlLndpZHRoIC8gc291cmNlLmhlaWdodCk7CisgICAgQ0dGbG9hdCBkZXN0aW5h
dGlvbkFzcGVjdFJhdGlvID0gKGRlc3RpbmF0aW9uLndpZHRoIC8gZGVzdGluYXRpb24uaGVpZ2h0
KTsKKyAgICAKKyAgICBpZiAoc291cmNlQXNwZWN0UmF0aW8gPiBkZXN0aW5hdGlvbkFzcGVjdFJh
dGlvKSB7CisgICAgICAgIHNpemUud2lkdGggPSBkZXN0aW5hdGlvbi53aWR0aDsKKyAgICAgICAg
c2l6ZS5oZWlnaHQgPSAoc291cmNlLmhlaWdodCAqIChkZXN0aW5hdGlvbi53aWR0aCAvIHNvdXJj
ZS53aWR0aCkpOworICAgIH0gZWxzZSBpZiAoc291cmNlQXNwZWN0UmF0aW8gPCBkZXN0aW5hdGlv
bkFzcGVjdFJhdGlvKSB7CisgICAgICAgIHNpemUud2lkdGggPSAoc291cmNlLndpZHRoICogKCBk
ZXN0aW5hdGlvbi5oZWlnaHQgLyBzb3VyY2UuaGVpZ2h0KSk7CisgICAgICAgIHNpemUuaGVpZ2h0
ID0gZGVzdGluYXRpb24uaGVpZ2h0OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gc2l6ZTsKK30K
KworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAkocmV2aXNpb24gMTg1OTYyKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsMTMgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rp
b25EYXRhIHsKICAgICBVSVdLQXV0b2NvcnJlY3Rpb25Db21wbGV0aW9uSGFuZGxlciBhdXRvY29y
cmVjdGlvbkhhbmRsZXI7CiAgICAgVUlXS0F1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRsZXIgYXV0
b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxlcjsKIH07CisKK2VudW0gY2xhc3MgUHJldmlld0VsZW1l
bnRUeXBlIHsKKyAgICBOb25lID0gMCwKKyAgICBMaW5rLAorICAgIEltYWdlCit9OworCiB9CiAK
IEBpbnRlcmZhY2UgV0tDb250ZW50VmlldyAoKSB7CkBAIC0xMjAsNiArMTI3LDcgQEAgc3RydWN0
IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKICAgICBSZXRhaW5QdHI8V0tGb3JtSW5wdXRTZXNzaW9u
PiBfZm9ybUlucHV0U2Vzc2lvbjsKICAgICBSZXRhaW5QdHI8V0tGaWxlVXBsb2FkUGFuZWw+IF9m
aWxlVXBsb2FkUGFuZWw7CiAgICAgUmV0YWluUHRyPFVJR2VzdHVyZVJlY29nbml6ZXI+IF9wcmV2
aWV3R2VzdHVyZVJlY29nbml6ZXI7CisgICAgV2ViS2l0OjpQcmV2aWV3RWxlbWVudFR5cGUgX3By
ZXZpZXdUeXBlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6U21hcnRNYWduaWZpY2F0
aW9uQ29udHJvbGxlcj4gX3NtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXI7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLm1tCShyZXZpc2lvbiAxODU5NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsNyBAQAogI2ltcG9ydCAiV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oIgogI2ltcG9ydCAi
V0tGb3JtSW5wdXRDb250cm9sLmgiCiAjaW1wb3J0ICJXS0Zvcm1TZWxlY3RDb250cm9sLmgiCisj
aW1wb3J0ICJXS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXS0luc3Bl
Y3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oIgogI2ltcG9ydCAiV0tVSURlbGVnYXRl
UHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oIgpAQCAtOTU4LDcg
Kzk1OSw3IEBAIC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXJTaG91bGRCZWdpbjooVUkKICAgICAg
ICAgICAgIHJldHVybiBOTzsKIAogICAgICAgICBTdHJpbmcgYWJzb2x1dGVMaW5rVVJMID0gX3Bv
c2l0aW9uSW5mb3JtYXRpb24udXJsOwotICAgICAgICBpZiAoYWJzb2x1dGVMaW5rVVJMLmlzRW1w
dHkoKSB8fCAhV2ViQ29yZTo6cHJvdG9jb2xJc0luSFRUUEZhbWlseShhYnNvbHV0ZUxpbmtVUkwp
KQorICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uY2xpY2thYmxlRWxlbWVudE5hbWUg
PT0gIkEiICYmIChhYnNvbHV0ZUxpbmtVUkwuaXNFbXB0eSgpIHx8ICFXZWJDb3JlOjpwcm90b2Nv
bElzSW5IVFRQRmFtaWx5KGFic29sdXRlTGlua1VSTCkpKQogICAgICAgICAgICAgcmV0dXJuIE5P
OwogICAgIH0KIApAQCAtMzExOCwzMiArMzExOSw1MiBAQCAtIChVSVZpZXdDb250cm9sbGVyICop
cHJldmlld1ZpZXdDb250cm9sCiB7CiAgICAgQVNTRVJUKHNlbGYgPT0gc291cmNlVmlldyk7CiAK
LSAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uY2xpY2thYmxlRWxlbWVudE5hbWUgIT0gIkEi
ICYmIF9wb3NpdGlvbkluZm9ybWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lICE9ICJJTUciKQot
ICAgICAgICByZXR1cm4gbmlsOworICAgIF9wcmV2aWV3VHlwZSA9IFByZXZpZXdFbGVtZW50VHlw
ZTo6Tm9uZTsKIAotICAgIFN0cmluZyBhYnNvbHV0ZUxpbmtVUkwgPSBfcG9zaXRpb25JbmZvcm1h
dGlvbi51cmw7Ci0gICAgaWYgKGFic29sdXRlTGlua1VSTC5pc0VtcHR5KCkgfHwgIVdlYkNvcmU6
OnByb3RvY29sSXNJbkhUVFBGYW1pbHkoYWJzb2x1dGVMaW5rVVJMKSkKKyAgICBCT09MIGNhblNo
b3dJbWFnZVByZXZpZXcgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFt
ZSA9PSAiSU1HIjsKKyAgICBCT09MIGNhblNob3dMaW5rUHJldmlldyA9IF9wb3NpdGlvbkluZm9y
bWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lID09ICJBIiB8fCBjYW5TaG93SW1hZ2VQcmV2aWV3
OworCisgICAgaWYgKCFjYW5TaG93TGlua1ByZXZpZXcgJiYgIWNhblNob3dJbWFnZVByZXZpZXcp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW05TVVJMIFVS
TFdpdGhTdHJpbmc6X3Bvc2l0aW9uSW5mb3JtYXRpb24udXJsXTsKLSAgICBpZDxXS1VJRGVsZWdh
dGVQcml2YXRlPiB1aURlbGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+PihbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0pOwotICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZpZXdWaWV3Q29udHJvbGxlckZvclVS
TDopXSkgewotICAgICAgICBfaGlnaGxpZ2h0TG9uZ1ByZXNzQ2FuQ2xpY2sgPSBOTzsKLSAgICAg
ICAgcmV0dXJuIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJv
bGxlckZvclVSTDp0YXJnZXRVUkxdOworICAgIFN0cmluZyBhYnNvbHV0ZUxpbmtVUkwgPSBfcG9z
aXRpb25JbmZvcm1hdGlvbi51cmw7CisgICAgaWYgKGFic29sdXRlTGlua1VSTC5pc0VtcHR5KCkg
fHwgIVdlYkNvcmU6OnByb3RvY29sSXNJbkhUVFBGYW1pbHkoYWJzb2x1dGVMaW5rVVJMKSkgewor
ICAgICAgICBpZiAoY2FuU2hvd0xpbmtQcmV2aWV3ICYmICFjYW5TaG93SW1hZ2VQcmV2aWV3KQor
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgY2FuU2hvd0xpbmtQcmV2aWV3ID0gTk87
CiAgICAgfQogCisgICAgaWYgKGNhblNob3dMaW5rUHJldmlldykgeworICAgICAgICBfcHJldmll
d1R5cGUgPSBQcmV2aWV3RWxlbWVudFR5cGU6Okxpbms7CisgICAgICAgIE5TVVJMICp0YXJnZXRV
UkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpfcG9zaXRpb25JbmZvcm1hdGlvbi51cmxdOworICAg
ICAgICBpZDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0pOworICAgICAgICBp
ZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpwcmV2
aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6KV0pIHsKKyAgICAgICAgICAgIF9oaWdobGlnaHRMb25n
UHJlc3NDYW5DbGljayA9IE5POworICAgICAgICAgICAgcmV0dXJuIFt1aURlbGVnYXRlIF93ZWJW
aWV3Ol93ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxlckZvclVSTDp0YXJnZXRVUkxdOworICAg
ICAgICB9CiAjaWYgSEFWRShTQUZBUklfU0VSVklDRVNfRlJBTUVXT1JLKQotICAgIFNGU2FmYXJp
Vmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxlciA9IFthbGxvY1NGU2FmYXJpVmll
d0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRXaXRoVVJMOnRhcmdldFVSTF07Ci0gICAgcHJldmll
d1ZpZXdDb250cm9sbGVyLl9zaG93aW5nTGlua1ByZXZpZXcgPSBZRVM7Ci0gICAgX2hpZ2hsaWdo
dExvbmdQcmVzc0NhbkNsaWNrID0gTk87Ci0gICAgcmV0dXJuIHByZXZpZXdWaWV3Q29udHJvbGxl
cjsKKyAgICAgICAgU0ZTYWZhcmlWaWV3Q29udHJvbGxlciAqcHJldmlld1ZpZXdDb250cm9sbGVy
ID0gW2FsbG9jU0ZTYWZhcmlWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdFdpdGhVUkw6dGFy
Z2V0VVJMXTsKKyAgICAgICAgcHJldmlld1ZpZXdDb250cm9sbGVyLl9zaG93aW5nTGlua1ByZXZp
ZXcgPSBZRVM7CisgICAgICAgIF9oaWdobGlnaHRMb25nUHJlc3NDYW5DbGljayA9IE5POworICAg
ICAgICByZXR1cm4gcHJldmlld1ZpZXdDb250cm9sbGVyOwogI2Vsc2UKLSAgICByZXR1cm4gbmls
OworICAgICAgICByZXR1cm4gbmlsOwogI2VuZGlmCisgICAgfQorCisgICAgaWYgKGNhblNob3dJ
bWFnZVByZXZpZXcpIHsKKyAgICAgICAgX3ByZXZpZXdUeXBlID0gUHJldmlld0VsZW1lbnRUeXBl
OjpJbWFnZTsKKyAgICAgICAgcmV0dXJuIFtbV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlciBh
bGxvY10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdlLT5tYWtlQ0dJ
bWFnZUNvcHkoKV07CisgICAgfQorCisgICAgcmV0dXJuIG5pbDsKIH0KIAogLSAodm9pZCljb21t
aXRQcmV2aWV3Vmlld0NvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIgKil2aWV3Q29udHJvbGxl
cgogeworICAgIGlmIChfcHJldmlld1R5cGUgIT0gUHJldmlld0VsZW1lbnRUeXBlOjpMaW5rKQor
ICAgICAgICByZXR1cm47CisKICAgICBpZDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRl
ID0gc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihbX3dlYlZpZXcgVUlEZWxl
Z2F0ZV0pOwogICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KF93ZWJWaWV3OmNvbW1pdFByZXZpZXdlZFZpZXdDb250cm9sbGVyOildKSB7CiAgICAgICAgIFt1
aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGNvbW1pdFByZXZpZXdlZFZpZXdDb250cm9sbGVy
OnZpZXdDb250cm9sbGVyXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NTk2MikKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTE4Niw2ICsxMTg2LDggQEAKIAkJOTMyMUQ1ODgxQTM4RUU3NDAwODA1MkJFIC8qIFdLSW1tZWRp
YXRlQWN0aW9uQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzMjFENTg3MUEzOEVFNzQwMDgwNTJCRSAvKiBXS0ltbWVkaWF0ZUFjdGlv
bkNvbnRyb2xsZXIubW0gKi87IH07CiAJCTkzMjFENThBMUEzOEYxOTYwMDgwNTJCRSAvKiBXS0lt
bWVkaWF0ZUFjdGlvblR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzIxRDU4OTFBMzhGMTk2MDA4MDUyQkUgLyogV0tJbW1lZGlhdGVBY3Rpb25U
eXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzMjM2MTFFMUIwMTVEQTgwMEZBOTIzMiAvKiBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMjM2MTFEMUIw
MTVEQTgwMEZBOTIzMiAvKiBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5MzNERjgyRTFCM0JDMDkwMDBB
RUE5RTMgLyogV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzREY4MkQxQjNCQzA5MDAwQUVBOUUzIC8q
IFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKKwkJOTMzREY4MzAxQjNCQzBC
NDAwQUVBOUUzIC8qIFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNERjgyRjFCM0JDMEI0MDBBRUE5
RTMgLyogV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbSAqLzsgfTsKIAkJOTM0QjcyNDQx
OUY1QjlCRTAwQUU5NkQ2IC8qIFdLQWN0aW9uTWVudUl0ZW1UeXBlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0QjcyNDMxOUY1QjlCRTAwQUU5NkQ2
IC8qIFdLQWN0aW9uTWVudUl0ZW1UeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzNUVFQjlCMTI3NzYxN0MwMDMzMjJCOCAvKiBXS0J1bmRs
ZUJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzNUVFQjk4MTI3NzYxNkQwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3
YXJkTGlzdEl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk5MzVFRUI5RTEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExp
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1
RUVCOTUxMjc3NjE2RDAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcCAqLzsg
fTsKQEAgLTMzNzQsNiArMzM3Niw4IEBACiAJCTkzMjFENTg3MUEzOEVFNzQwMDgwNTJCRSAvKiBX
S0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzMjFENTg5MUEzOEYxOTYwMDgwNTJCRSAvKiBXS0ltbWVkaWF0
ZUFjdGlvblR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLSW1tZWRp
YXRlQWN0aW9uVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMyMzYxMUQx
QjAxNURBODAwRkE5MjMyIC8qIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzREY4MkQxQjNCQzA5MDAwQUVBOUUzIC8qIFdLSW1h
Z2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5MzNERjgyRjFCM0JDMEI0MDBBRUE5RTMgLyogV0tJbWFnZVByZXZpZXdWaWV3Q29u
dHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLSW1h
Z2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzNEI3MjQzMTlGNUI5QkUwMEFFOTZENiAvKiBXS0FjdGlvbk1lbnVJdGVtVHlwZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tBY3Rpb25NZW51SXRlbVR5cGVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUVFQjhGMTI3NzYxNUQwMDMzMjJCOCAvKiBJ
bmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUVFQjkwMTI3NzYxNUQwMDMzMjJCOCAvKiBJbmplY3Rl
ZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTE0MCw2ICs1MTQ0LDggQEAKIAkJCQkwRkNCNEUzRjE4QkJFMDQ0MDAwRkNGQzkg
LyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmggKi8sCiAJCQkJMEZDQjRFNDAxOEJCRTA0NDAw
MEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbSAqLywKIAkJCQkwRkNCNEU0MTE4
QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3Jp
Z2luLm1tICovLAorCQkJCTkzM0RGODJEMUIzQkMwOTAwMEFFQTlFMyAvKiBXS0ltYWdlUHJldmll
d1ZpZXdDb250cm9sbGVyLmggKi8sCisJCQkJOTMzREY4MkYxQjNCQzBCNDAwQUVBOUUzIC8qIFdL
SW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW0gKi8sCiAJCQkJMEYzQzcyNTkxOTZGNUY2ODAw
QUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oICovLAogCQkJCTBGM0M3MjU3MTk2
RjVGNTAwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0gKi8sCiAJCQkJQTU0
MjkzQTIxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNv
Z25pemVyLmggKi8sCkBAIC04MDIyLDYgKzgwMjgsNyBAQAogCQkJCTFBMDQzRjZBMTI1MTREOEIw
MEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzMwNjgyNDEyNUE2Qjk0MDBFNzEyNzggLyogV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRCOUM0QUMxQjMyNTFCRDAwNzBGMjdGIC8qIFNh
ZmFyaVNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQk5MzNERjgyRTFCM0JDMDkwMDBB
RUE5RTMgLyogV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFGQTRCOTAxQTY1QTlFMjAwNkM0QUI0IC8qIFdlYlByb2Nlc3NMaWZldGltZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZBNEI4QzFBNjVBMUQwMDA2QzRBQjQgLyogV2ViUHJv
Y2Vzc0xpZmV0aW1lVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzMDY2QkYxMjVBNDQy
MTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTYz
LDYgKzk1NzAsNyBAQAogCQkJCTBGQ0I0RTQ3MThCQkUwNDQwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50
SW1wbElPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQzc1MzdCMTgzQTlGREIwMDcyQ0IxNSAv
KiBQYWdlTG9hZFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1NzRBNTgyMTJFNjY2ODEw
MDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQk5MzNERjgz
MDFCM0JDMEI0MDBBRUE5RTMgLyogV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUUxOTU4MkQ2MTUzQ0MwNTQwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRz
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ4NzBEMTAxNjIzNEZGRTAwMEEzRjIwIC8qIFBERlBs
dWdpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEMkFERjBCMTYzNjJEREIwMDE5N0U0NyAvKiBQ
REZQbHVnaW5Bbm5vdGF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCShyZXZpc2lv
biAxODU5NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTIxMzEsOSArMjEzMSwyMSBAQCB2b2lkIFdlYlBh
Z2U6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24oY29uCiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGlmIChlbGVtZW50SXNMaW5rT3JJbWFnZSkgewotICAgICAgICAgICAgICAgIC8vIEVuc3Vy
ZSB0aGF0IHRoZSBpbWFnZSBjb250YWlucyBhdCBtb3N0IDYwMEsgcGl4ZWxzLCBzbyB0aGF0IGl0
IGlzIG5vdCB0b28gYmlnLgotICAgICAgICAgICAgICAgIGlmIChSZWZQdHI8V2ViSW1hZ2U+IHNu
YXBzaG90ID0gc25hcHNob3ROb2RlKCplbGVtZW50LCBTbmFwc2hvdE9wdGlvbnNTaGFyZWFibGUs
IDYwMCAqIDEwMjQpKQotICAgICAgICAgICAgICAgICAgICBpbmZvLmltYWdlID0gc25hcHNob3Qt
PmJpdG1hcCgpOworICAgICAgICAgICAgICAgIGlmIChsaW5rRWxlbWVudCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaW1hZ2UgY29udGFpbnMgYXQgbW9zdCA2MDBL
IHBpeGVscywgc28gdGhhdCBpdCBpcyBub3QgdG9vIGJpZy4KKyAgICAgICAgICAgICAgICAgICAg
aWYgKFJlZlB0cjxXZWJJbWFnZT4gc25hcHNob3QgPSBzbmFwc2hvdE5vZGUoKmVsZW1lbnQsIFNu
YXBzaG90T3B0aW9uc1NoYXJlYWJsZSwgNjAwICogMTAyNCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvLmltYWdlID0gc25hcHNob3QtPmJpdG1hcCgpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5pc1Jl
bmRlckltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVuZGVySW1hZ2UgPSBk
b3duY2FzdDxSZW5kZXJJbWFnZT4oKihlbGVtZW50LT5yZW5kZXJlcigpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChyZW5kZXJJbWFnZS5jYWNoZWRJbWFnZSgpICYmICFyZW5kZXJJbWFnZS5j
YWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChJbWFnZSogaW1hZ2UgPSByZW5kZXJJbWFnZS5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJl
bmRlcmVyKCZyZW5kZXJJbWFnZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBzaGFyZWRCaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZVNoYXJlYWJsZShJbnRTaXplKGltYWdlLT5zaXplKCkpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBv
cnRzQWxwaGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZ3JhcGhpY3NDb250
ZXh0ID0gc2hhcmVkQml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JT
cGFjZURldmljZVJHQiwgRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby5pbWFnZSA9IHNoYXJlZEJpdG1hcDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChsaW5rRWxlbWVudCkKICAgICAgICAgICAgICAgICBpbmZvLnVy
bCA9IFsoTlNVUkwgKilsaW5rRWxlbWVudC0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExl
YWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhyZWZBdHRyKSkpIGFic29sdXRlU3RyaW5nXTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255661</attachid>
            <date>2015-06-26 12:35:42 -0700</date>
            <delta_ts>2015-06-26 14:04:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>19916</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjAwMikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE1LTA2LTI2ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgaW1hZ2Ug
cHJldmlld3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NjM1MAorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9i
bGVtLzIwNjQwMjM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRm9yIGltYWdlcywgdXNlIHRoZSBhY3R1YWwgaW1hZ2UgaW5zdGVhZCBvZiBhIHNuYXBz
aG90LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisKKyAgICAg
ICAgVmlld0NvbnRyb2xsZXIgZm9yIGltYWdlIHByZXZpZXcuCisgICAgICAgICogVUlQcm9jZXNz
L1dLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1dLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW06IEFkZGVkLgorICAgICAgICAoLVtX
S0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyIGxvYWRWaWV3XSk6CisgICAgICAgICgtW1dLSW1h
Z2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIgaW5pdFdpdGhDR0ltYWdlOl0pOgorICAgICAgICAoLVtX
S0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyIHZpZXdEaWRMYXlvdXRTdWJ2aWV3c10pOgorICAg
ICAgICAoX3NjYWxlU2l6ZVdpdGhpblNpemUpOgorCisgICAgICAgIE5ldyBlbnVtIGFuZCBtZW1i
ZXIgdmFyaWFibGUgdG8ga2VlcCB0cmFjayBvZiBwcmV2aWV3IHR5cGUuCisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKworICAgICAgICBPbmx5IGFwcGx5
IHRoZSBodHRwIHJlc3RyaWN0aW9uIHRvIG5vbi1pbWFnZSBsaW5rcyBzaW5jZSB3ZSBjYW4gc3Rp
bGwgcHJldmlldyB0aGUgCisgICAgICAgIGltYWdlIG9mIGEgbm9uLWh0dHAgaW1hZ2UgbGluay4K
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBnZXN0dXJlUmVjb2duaXplclNob3VsZEJlZ2luOl0p
OgorCisgICAgICAgIEhhbmRsZSBsaW5rcyBhbmQgaW1hZ2VzLgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxlckZvclBvc2l0aW9uOmluU291cmNlVmlldzpdKToK
KworICAgICAgICBSZXR1cm4gZWFybHkgZm9yIG5vbi1saW5rIHByZXZpZXdzLgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNvbW1pdFByZXZpZXdWaWV3Q29udHJvbGxlcjpdKToKKworICAgICAg
ICBOZXcgZmlsZXMuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorCisgICAgICAgIEp1c3QgdXNlIHRoZSBhY3R1YWwgaW1hZ2UgaW4gdGhlIFBvc2l0aW9uSW5m
b3JtYXRpb24gZm9yIGltYWdlIGVsZW1lbnRzIHJhdGhlciAKKyAgICAgICAgdGhhbiB0YWtpbmcg
YSBzY3JlZW4gc2hvdC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24p
OgorCiAyMDE1LTA2LTI2ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXaXJlbGVzcyBQbGF5YmFjayBUYXJnZXQtcmVsYXRlZCAjaW1wb3J0IHNob3VsZCBiZSBhICNp
bmNsdWRlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XS0lt
YWdlUHJldmlld1ZpZXdDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1w
b3J0IDxVSUtpdC9VSUtpdC5oPgorCisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbnRl
cmZhY2UgV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlciA6IFVJVmlld0NvbnRyb2xsZXIKKwor
LSAoaWQpaW5pdFdpdGhDR0ltYWdlOihSZXRhaW5QdHI8Q0dJbWFnZVJlZj4paW1hZ2U7CitAZW5k
CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbQkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XS0ltYWdlUHJldmlld1ZpZXdDb250
cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIu
aCIKKworI2ltcG9ydCA8V2ViQ29yZS9JbnRTaXplLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisK
K0BpbXBsZW1lbnRhdGlvbiBXS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyIHsKKyAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gX2ltYWdlOworICAgIFJldGFpblB0cjxVSUltYWdlVmlldz4gX2lt
YWdlVmlldzsKK30KKworLSAodm9pZClsb2FkVmlldworeworICAgIFtzdXBlciBsb2FkVmlld107
CisgICAgc2VsZi52aWV3LmJhY2tncm91bmRDb2xvciA9IFtVSUNvbG9yIHdoaXRlQ29sb3JdOwor
ICAgIFtzZWxmLnZpZXcgYWRkU3VidmlldzpfaW1hZ2VWaWV3LmdldCgpXTsKK30KKworLSAoaWQp
aW5pdFdpdGhDR0ltYWdlOihSZXRhaW5QdHI8Q0dJbWFnZVJlZj4paW1hZ2UKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRXaXRoTmliTmFtZTpuaWwgYnVuZGxlOm5pbF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2ltYWdlID0gaW1hZ2U7CisKKyAgICBfaW1h
Z2VWaWV3ID0gYWRvcHROUyhbW1VJSW1hZ2VWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dFplcm9dKTsKKyAgICBSZXRhaW5QdHI8VUlJbWFnZT4gdWlJbWFnZSA9IGFkb3B0TlMoW1tVSUlt
YWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X2ltYWdlLmdldCgpXSk7CisgICAgW19pbWFnZVZp
ZXcgc2V0SW1hZ2U6dWlJbWFnZS5nZXQoKV07CisKKyAgICBDR1NpemUgc2NyZWVuU2l6ZSA9IFVJ
QXBwbGljYXRpb24uc2hhcmVkQXBwbGljYXRpb24uZGVsZWdhdGUud2luZG93LmJvdW5kcy5zaXpl
OworICAgIENHU2l6ZSBpbWFnZVNpemUgPSBfc2NhbGVTaXplV2l0aGluU2l6ZShDR1NpemVNYWtl
KENHSW1hZ2VHZXRXaWR0aChfaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KF9pbWFnZS5n
ZXQoKSkpLCBzY3JlZW5TaXplKTsKKyAgICBbX2ltYWdlVmlldyBzZXRGcmFtZTpDR1JlY3RNYWtl
KFtfaW1hZ2VWaWV3IGZyYW1lXS5vcmlnaW4ueCwgW19pbWFnZVZpZXcgZnJhbWVdLm9yaWdpbi55
LCBpbWFnZVNpemUud2lkdGgsIGltYWdlU2l6ZS5oZWlnaHQpXTsKKyAgICBbc2VsZiBzZXRQcmVm
ZXJyZWRDb250ZW50U2l6ZTppbWFnZVNpemVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpdmlld0RpZExheW91dFN1YnZpZXdzCit7CisgICAgW3N1cGVyIHZpZXdEaWRMYXlvdXRT
dWJ2aWV3c107CisKKyAgICBbX2ltYWdlVmlldyBzZXRGcmFtZTpzZWxmLnZpZXcuYm91bmRzXTsK
K30KKworc3RhdGljIENHU2l6ZSBfc2NhbGVTaXplV2l0aGluU2l6ZShDR1NpemUgc291cmNlLCBD
R1NpemUgZGVzdGluYXRpb24pCit7CisgICAgQ0dTaXplIHNpemUgPSBkZXN0aW5hdGlvbjsKKyAg
ICBDR0Zsb2F0IHNvdXJjZUFzcGVjdFJhdGlvID0gKHNvdXJjZS53aWR0aCAvIHNvdXJjZS5oZWln
aHQpOworICAgIENHRmxvYXQgZGVzdGluYXRpb25Bc3BlY3RSYXRpbyA9IChkZXN0aW5hdGlvbi53
aWR0aCAvIGRlc3RpbmF0aW9uLmhlaWdodCk7CisgICAgCisgICAgaWYgKHNvdXJjZUFzcGVjdFJh
dGlvID4gZGVzdGluYXRpb25Bc3BlY3RSYXRpbykgeworICAgICAgICBzaXplLndpZHRoID0gZGVz
dGluYXRpb24ud2lkdGg7CisgICAgICAgIHNpemUuaGVpZ2h0ID0gKHNvdXJjZS5oZWlnaHQgKiAo
ZGVzdGluYXRpb24ud2lkdGggLyBzb3VyY2Uud2lkdGgpKTsKKyAgICB9IGVsc2UgaWYgKHNvdXJj
ZUFzcGVjdFJhdGlvIDwgZGVzdGluYXRpb25Bc3BlY3RSYXRpbykgeworICAgICAgICBzaXplLndp
ZHRoID0gKHNvdXJjZS53aWR0aCAqIChkZXN0aW5hdGlvbi5oZWlnaHQgLyBzb3VyY2UuaGVpZ2h0
KSk7CisgICAgICAgIHNpemUuaGVpZ2h0ID0gZGVzdGluYXRpb24uaGVpZ2h0OworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gc2l6ZTsKK30KKworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24uaAkocmV2aXNpb24gMTg1OTYyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsMTMg
QEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKICAgICBVSVdLQXV0b2NvcnJlY3Rpb25D
b21wbGV0aW9uSGFuZGxlciBhdXRvY29ycmVjdGlvbkhhbmRsZXI7CiAgICAgVUlXS0F1dG9jb3Jy
ZWN0aW9uQ29udGV4dEhhbmRsZXIgYXV0b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxlcjsKIH07CisK
K2VudW0gY2xhc3MgUHJldmlld0VsZW1lbnRUeXBlIHsKKyAgICBOb25lID0gMCwKKyAgICBMaW5r
LAorICAgIEltYWdlCit9OworCiB9CiAKIEBpbnRlcmZhY2UgV0tDb250ZW50VmlldyAoKSB7CkBA
IC0xMjAsNiArMTI3LDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKICAgICBSZXRh
aW5QdHI8V0tGb3JtSW5wdXRTZXNzaW9uPiBfZm9ybUlucHV0U2Vzc2lvbjsKICAgICBSZXRhaW5Q
dHI8V0tGaWxlVXBsb2FkUGFuZWw+IF9maWxlVXBsb2FkUGFuZWw7CiAgICAgUmV0YWluUHRyPFVJ
R2VzdHVyZVJlY29nbml6ZXI+IF9wcmV2aWV3R2VzdHVyZVJlY29nbml6ZXI7CisgICAgV2ViS2l0
OjpQcmV2aWV3RWxlbWVudFR5cGUgX3ByZXZpZXdUeXBlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYktpdDo6U21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlcj4gX3NtYXJ0TWFnbmlmaWNhdGlv
bkNvbnRyb2xsZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAxODU5NjIpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCAiV0tBY3Rpb25TaGVl
dEFzc2lzdGFudC5oIgogI2ltcG9ydCAiV0tGb3JtSW5wdXRDb250cm9sLmgiCiAjaW1wb3J0ICJX
S0Zvcm1TZWxlY3RDb250cm9sLmgiCisjaW1wb3J0ICJXS0ltYWdlUHJldmlld1ZpZXdDb250cm9s
bGVyLmgiCiAjaW1wb3J0ICJXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5o
IgogI2ltcG9ydCAiV0tVSURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbi5oIgpAQCAtOTU4LDcgKzk1OSw3IEBAIC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6
ZXJTaG91bGRCZWdpbjooVUkKICAgICAgICAgICAgIHJldHVybiBOTzsKIAogICAgICAgICBTdHJp
bmcgYWJzb2x1dGVMaW5rVVJMID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24udXJsOwotICAgICAgICBp
ZiAoYWJzb2x1dGVMaW5rVVJMLmlzRW1wdHkoKSB8fCAhV2ViQ29yZTo6cHJvdG9jb2xJc0luSFRU
UEZhbWlseShhYnNvbHV0ZUxpbmtVUkwpKQorICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRp
b24uY2xpY2thYmxlRWxlbWVudE5hbWUgPT0gIkEiICYmIChhYnNvbHV0ZUxpbmtVUkwuaXNFbXB0
eSgpIHx8ICFXZWJDb3JlOjpwcm90b2NvbElzSW5IVFRQRmFtaWx5KGFic29sdXRlTGlua1VSTCkp
KQogICAgICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KIApAQCAtMzExOCwzMiArMzExOSw1MiBA
QCAtIChVSVZpZXdDb250cm9sbGVyICopcHJldmlld1ZpZXdDb250cm9sCiB7CiAgICAgQVNTRVJU
KHNlbGYgPT0gc291cmNlVmlldyk7CiAKLSAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uY2xp
Y2thYmxlRWxlbWVudE5hbWUgIT0gIkEiICYmIF9wb3NpdGlvbkluZm9ybWF0aW9uLmNsaWNrYWJs
ZUVsZW1lbnROYW1lICE9ICJJTUciKQotICAgICAgICByZXR1cm4gbmlsOworICAgIF9wcmV2aWV3
VHlwZSA9IFByZXZpZXdFbGVtZW50VHlwZTo6Tm9uZTsKIAotICAgIFN0cmluZyBhYnNvbHV0ZUxp
bmtVUkwgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi51cmw7Ci0gICAgaWYgKGFic29sdXRlTGlua1VS
TC5pc0VtcHR5KCkgfHwgIVdlYkNvcmU6OnByb3RvY29sSXNJbkhUVFBGYW1pbHkoYWJzb2x1dGVM
aW5rVVJMKSkKKyAgICBCT09MIGNhblNob3dJbWFnZVByZXZpZXcgPSBfcG9zaXRpb25JbmZvcm1h
dGlvbi5jbGlja2FibGVFbGVtZW50TmFtZSA9PSAiSU1HIjsKKyAgICBCT09MIGNhblNob3dMaW5r
UHJldmlldyA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lID09ICJB
IiB8fCBjYW5TaG93SW1hZ2VQcmV2aWV3OworCisgICAgaWYgKCFjYW5TaG93TGlua1ByZXZpZXcg
JiYgIWNhblNob3dJbWFnZVByZXZpZXcpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBOU1VS
TCAqdGFyZ2V0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6X3Bvc2l0aW9uSW5mb3JtYXRpb24u
dXJsXTsKLSAgICBpZDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRlID0gc3RhdGljX2Nh
c3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0pOwotICAg
IGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnBy
ZXZpZXdWaWV3Q29udHJvbGxlckZvclVSTDopXSkgewotICAgICAgICBfaGlnaGxpZ2h0TG9uZ1By
ZXNzQ2FuQ2xpY2sgPSBOTzsKLSAgICAgICAgcmV0dXJuIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93
ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxlckZvclVSTDp0YXJnZXRVUkxdOworICAgIFN0cmlu
ZyBhYnNvbHV0ZUxpbmtVUkwgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi51cmw7CisgICAgaWYgKGFi
c29sdXRlTGlua1VSTC5pc0VtcHR5KCkgfHwgIVdlYkNvcmU6OnByb3RvY29sSXNJbkhUVFBGYW1p
bHkoYWJzb2x1dGVMaW5rVVJMKSkgeworICAgICAgICBpZiAoY2FuU2hvd0xpbmtQcmV2aWV3ICYm
ICFjYW5TaG93SW1hZ2VQcmV2aWV3KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAg
Y2FuU2hvd0xpbmtQcmV2aWV3ID0gTk87CiAgICAgfQogCisgICAgaWYgKGNhblNob3dMaW5rUHJl
dmlldykgeworICAgICAgICBfcHJldmlld1R5cGUgPSBQcmV2aWV3RWxlbWVudFR5cGU6Okxpbms7
CisgICAgICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpfcG9zaXRp
b25JbmZvcm1hdGlvbi51cmxdOworICAgICAgICBpZDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURl
bGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihbX3dlYlZpZXcg
VUlEZWxlZ2F0ZV0pOworICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6KV0pIHsKKyAg
ICAgICAgICAgIF9oaWdobGlnaHRMb25nUHJlc3NDYW5DbGljayA9IE5POworICAgICAgICAgICAg
cmV0dXJuIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxl
ckZvclVSTDp0YXJnZXRVUkxdOworICAgICAgICB9CiAjaWYgSEFWRShTQUZBUklfU0VSVklDRVNf
RlJBTUVXT1JLKQotICAgIFNGU2FmYXJpVmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJv
bGxlciA9IFthbGxvY1NGU2FmYXJpVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRXaXRoVVJM
OnRhcmdldFVSTF07Ci0gICAgcHJldmlld1ZpZXdDb250cm9sbGVyLl9zaG93aW5nTGlua1ByZXZp
ZXcgPSBZRVM7Ci0gICAgX2hpZ2hsaWdodExvbmdQcmVzc0NhbkNsaWNrID0gTk87Ci0gICAgcmV0
dXJuIHByZXZpZXdWaWV3Q29udHJvbGxlcjsKKyAgICAgICAgU0ZTYWZhcmlWaWV3Q29udHJvbGxl
ciAqcHJldmlld1ZpZXdDb250cm9sbGVyID0gW2FsbG9jU0ZTYWZhcmlWaWV3Q29udHJvbGxlcklu
c3RhbmNlKCkgaW5pdFdpdGhVUkw6dGFyZ2V0VVJMXTsKKyAgICAgICAgcHJldmlld1ZpZXdDb250
cm9sbGVyLl9zaG93aW5nTGlua1ByZXZpZXcgPSBZRVM7CisgICAgICAgIF9oaWdobGlnaHRMb25n
UHJlc3NDYW5DbGljayA9IE5POworICAgICAgICByZXR1cm4gW3ByZXZpZXdWaWV3Q29udHJvbGxl
ciBhdXRvcmVsZWFzZV07CiAjZWxzZQotICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBu
aWw7CiAjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoY2FuU2hvd0ltYWdlUHJldmlldykgeworICAg
ICAgICBfcHJldmlld1R5cGUgPSBQcmV2aWV3RWxlbWVudFR5cGU6OkltYWdlOworICAgICAgICBy
ZXR1cm4gW1tbV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhDR0lt
YWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdlLT5tYWtlQ0dJbWFnZUNvcHkoKV0gYXV0b3Jl
bGVhc2VdOworICAgIH0KKworICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKHZvaWQpY29tbWl0UHJl
dmlld1ZpZXdDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICopdmlld0NvbnRyb2xsZXIKIHsK
KyAgICBpZiAoX3ByZXZpZXdUeXBlICE9IFByZXZpZXdFbGVtZW50VHlwZTo6TGluaykKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgaWQ8V0tVSURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZSA9IHN0
YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oW193ZWJWaWV3IFVJRGVsZWdhdGVd
KTsKICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2Vi
Vmlldzpjb21taXRQcmV2aWV3ZWRWaWV3Q29udHJvbGxlcjopXSkgewogICAgICAgICBbdWlEZWxl
Z2F0ZSBfd2ViVmlldzpfd2ViVmlldyBjb21taXRQcmV2aWV3ZWRWaWV3Q29udHJvbGxlcjp2aWV3
Q29udHJvbGxlcl07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODU5NjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExODYs
NiArMTE4Niw4IEBACiAJCTkzMjFENTg4MUEzOEVFNzQwMDgwNTJCRSAvKiBXS0ltbWVkaWF0ZUFj
dGlvbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzIxRDU4NzFBMzhFRTc0MDA4MDUyQkUgLyogV0tJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyLm1tICovOyB9OwogCQk5MzIxRDU4QTFBMzhGMTk2MDA4MDUyQkUgLyogV0tJbW1lZGlh
dGVBY3Rpb25UeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMyMUQ1ODkxQTM4RjE5NjAwODA1MkJFIC8qIFdLSW1tZWRpYXRlQWN0aW9uVHlwZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzIz
NjExRTFCMDE1REE4MDBGQTkyMzIgLyogX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzIzNjExRDFCMDE1REE4
MDBGQTkyMzIgLyogX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTMzREY4MkUxQjNCQzA5MDAwQUVBOUUz
IC8qIFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0RGODJEMUIzQkMwOTAwMEFFQTlFMyAvKiBXS0lt
YWdlUHJldmlld1ZpZXdDb250cm9sbGVyLmggKi87IH07CisJCTkzM0RGODMwMUIzQkMwQjQwMEFF
QTlFMyAvKiBXS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzREY4MkYxQjNCQzBCNDAwQUVBOUUzIC8q
IFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW0gKi87IH07CiAJCTkzNEI3MjQ0MTlGNUI5
QkUwMEFFOTZENiAvKiBXS0FjdGlvbk1lbnVJdGVtVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNEI3MjQzMTlGNUI5QkUwMEFFOTZENiAvKiBX
S0FjdGlvbk1lbnVJdGVtVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzVFRUI5QjEyNzc2MTdDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNr
Rm9yd2FyZExpc3RJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzVFRUI5ODEyNzc2MTZEMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExp
c3RJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTM1RUVCOUUxMjc3NjFBQzAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUVFQjk1
MTI3NzYxNkQwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgKi87IH07CkBA
IC0zMzc0LDYgKzMzNzYsOCBAQAogCQk5MzIxRDU4NzFBMzhFRTc0MDA4MDUyQkUgLyogV0tJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzIxRDU4OTFBMzhGMTk2MDA4MDUyQkUgLyogV0tJbW1lZGlhdGVBY3Rp
b25UeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0ltbWVkaWF0ZUFj
dGlvblR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMjM2MTFEMUIwMTVE
QTgwMEZBOTIzMiAvKiBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTkzM0RGODJEMUIzQkMwOTAwMEFFQTlFMyAvKiBXS0ltYWdlUHJl
dmlld1ZpZXdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
SW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTMzREY4MkYxQjNCQzBCNDAwQUVBOUUzIC8qIFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xs
ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0ltYWdlUHJl
dmlld1ZpZXdDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzRC
NzI0MzE5RjVCOUJFMDBBRTk2RDYgLyogV0tBY3Rpb25NZW51SXRlbVR5cGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQWN0aW9uTWVudUl0ZW1UeXBlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5MzVFRUI4RjEyNzc2MTVEMDAzMzIyQjggLyogSW5qZWN0
ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzVFRUI5MDEyNzc2MTVEMDAzMzIyQjggLyogSW5qZWN0ZWRCdW5k
bGVCYWNrRm9yd2FyZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5q
ZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUxNDAsNiArNTE0NCw4IEBACiAJCQkJMEZDQjRFM0YxOEJCRTA0NDAwMEZDRkM5IC8qIFdL
R2VvbG9jYXRpb25Qcm92aWRlcklPUy5oICovLAogCQkJCTBGQ0I0RTQwMThCQkUwNDQwMDBGQ0ZD
OSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MubW0gKi8sCiAJCQkJMEZDQjRFNDExOEJCRTA0
NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5t
bSAqLywKKwkJCQk5MzNERjgyRDFCM0JDMDkwMDBBRUE5RTMgLyogV0tJbWFnZVByZXZpZXdWaWV3
Q29udHJvbGxlci5oICovLAorCQkJCTkzM0RGODJGMUIzQkMwQjQwMEFFQTlFMyAvKiBXS0ltYWdl
UHJldmlld1ZpZXdDb250cm9sbGVyLm1tICovLAogCQkJCTBGM0M3MjU5MTk2RjVGNjgwMEFFREQw
QyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCAqLywKIAkJCQkwRjNDNzI1NzE5NkY1RjUw
MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tICovLAogCQkJCUE1NDI5M0Ey
MTk1QTQzQzYwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXpl
ci5oICovLApAQCAtODAyMiw2ICs4MDI4LDcgQEAKIAkJCQkxQTA0M0Y2QTEyNTE0RDhCMDBGRkJG
QjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMzMDY4MjQxMjVBNkI5NDAwRTcxMjc4IC8qIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJEQjlDNEFDMUIzMjUxQkQwMDcwRjI3RiAvKiBTYWZhcmlT
ZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTMzREY4MkUxQjNCQzA5MDAwQUVBOUUz
IC8qIFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
RkE0QjkwMUE2NUE5RTIwMDZDNEFCNCAvKiBXZWJQcm9jZXNzTGlmZXRpbWVPYnNlcnZlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUFGQTRCOEMxQTY1QTFEMDAwNkM0QUI0IC8qIFdlYlByb2Nlc3NM
aWZldGltZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA2NkJGMTI1QTQ0MjEwMEU3
MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTU2Myw2ICs5
NTcwLDcgQEAKIAkJCQkwRkNCNEU0NzE4QkJFMDQ0MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGxJ
T1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUM3NTM3QjE4M0E5RkRCMDA3MkNCMTUgLyogUGFn
ZUxvYWRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZF
OTggLyogUGFzdGVib2FyZFR5cGVzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTMzREY4MzAxQjNC
QzBCNDAwQUVBOUUzIC8qIFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW0gaW4gU291cmNl
cyAqLywKIAkJCQlFMTk1ODJENjE1M0NDMDU0MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTJEODcwRDEwMTYyMzRGRkUwMDBBM0YyMCAvKiBQREZQbHVnaW4u
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDJBREYwQjE2MzYyRERCMDAxOTdFNDcgLyogUERGUGx1
Z2luQW5ub3RhdGlvbi5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTg1
OTYyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMxLDkgKzIxMzEsMjIgQEAgdm9pZCBXZWJQYWdlOjpn
ZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBp
ZiAoZWxlbWVudElzTGlua09ySW1hZ2UpIHsKLSAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhh
dCB0aGUgaW1hZ2UgY29udGFpbnMgYXQgbW9zdCA2MDBLIHBpeGVscywgc28gdGhhdCBpdCBpcyBu
b3QgdG9vIGJpZy4KLSAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPFdlYkltYWdlPiBzbmFwc2hv
dCA9IHNuYXBzaG90Tm9kZSgqZWxlbWVudCwgU25hcHNob3RPcHRpb25zU2hhcmVhYmxlLCA2MDAg
KiAxMDI0KSkKLSAgICAgICAgICAgICAgICAgICAgaW5mby5pbWFnZSA9IHNuYXBzaG90LT5iaXRt
YXAoKTsKKyAgICAgICAgICAgICAgICBpZiAobGlua0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGltYWdlIGNvbnRhaW5zIGF0IG1vc3QgNjAwSyBwaXhl
bHMsIHNvIHRoYXQgaXQgaXMgbm90IHRvbyBiaWcuCisgICAgICAgICAgICAgICAgICAgIGlmIChS
ZWZQdHI8V2ViSW1hZ2U+IHNuYXBzaG90ID0gc25hcHNob3ROb2RlKCplbGVtZW50LCBTbmFwc2hv
dE9wdGlvbnNTaGFyZWFibGUsIDYwMCAqIDEwMjQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
aW5mby5pbWFnZSA9IHNuYXBzaG90LT5iaXRtYXAoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJ
bWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlbmRlckltYWdlID0gZG93bmNh
c3Q8UmVuZGVySW1hZ2U+KCooZWxlbWVudC0+cmVuZGVyZXIoKSkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocmVuZGVySW1hZ2UuY2FjaGVkSW1hZ2UoKSAmJiAhcmVuZGVySW1hZ2UuY2FjaGVk
SW1hZ2UoKS0+ZXJyb3JPY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
SW1hZ2UqIGltYWdlID0gcmVuZGVySW1hZ2UuY2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJl
cigmcmVuZGVySW1hZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IHNoYXJlZEJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
U2hhcmVhYmxlKEludFNpemUoaW1hZ2UtPnNpemUoKSksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9y
dHNBbHBoYSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBncmFwaGlj
c0NvbnRleHQgPSBzaGFyZWRCaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFn
ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxvYXRQb2ludCgwLCAwKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZm8uaW1hZ2UgPSBzaGFyZWRCaXRtYXA7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGxpbmtFbGVtZW50KQogICAgICAgICAgICAgICAgIGluZm8udXJsID0gWyhOU1VSTCAq
KWxpbmtFbGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWls
aW5nSFRNTFNwYWNlcyhsaW5rRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0
dHIpKSkgYWJzb2x1dGVTdHJpbmddOwo=
</data>
<flag name="review"
          id="280741"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>