<?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>100513</bug_id>
          
          <creation_ts>2012-10-26 06:18:53 -0700</creation_ts>
          <short_desc>[EFL][WK2] Get rid of C&apos;ism in text checker API</short_desc>
          <delta_ts>2012-10-26 07:58:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>g.czajkowski</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>751967</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-26 06:18:53 -0700</bug_when>
    <thetext>The current text checker code (ewk_text_checker and WebKitTextChecker) is very C like although the rest of our Ewk code has been ported to C++ style already. We need to port the text checker code as well for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751976</commentid>
    <comment_count>1</comment_count>
      <attachid>170911</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-26 06:40:23 -0700</bug_when>
    <thetext>Created attachment 170911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751993</commentid>
    <comment_count>2</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-26 06:55:32 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=170911&amp;action=review

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:93
&gt; +    Ewk_Text_Checker::initialize();

do not see any instance of Ewk_Text_Checker, maybe it could be just set of functions in a namespace?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_settings.cpp:241
&gt; +    Vector&lt;String&gt; languages = Ewk_Text_Checker::availableSpellCheckingLanguages();

const ref here?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:116
&gt; +            WKRetainPtr&lt;WKStringRef&gt; suggestion(AdoptWK, WKStringCreateWithUTF8CString(static_cast&lt;char*&gt;(item)));

static_cast&lt;const char*&gt; ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:118
&gt; +            free(item);

could we use OwnPtr&lt;const char&gt; as scope pointer here instead?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:121
&gt; +        Vector&lt;String&gt; guesses = textCheckerEnchant()-&gt;getGuessesForWord(toImpl(word)-&gt;string());

const ref?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752004</commentid>
    <comment_count>3</comment_count>
      <attachid>170916</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-26 07:07:51 -0700</bug_when>
    <thetext>Created attachment 170916
Patch

Take Mikhail&apos;s feedback into consideration. I&apos;m using a namespace now.
Asking r? again since this is not a minor revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752009</commentid>
    <comment_count>4</comment_count>
      <attachid>170916</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-26 07:09:26 -0700</bug_when>
    <thetext>Comment on attachment 170916
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:211
&gt; +
&gt; +#define EWK_TEXT_CHECKER_CALLBACK_SET(TYPE_NAME, NAME)  \
&gt; +void ewk_text_checker_##NAME##_cb_set(TYPE_NAME cb)     \
&gt; +{                                                       \
&gt; +    clientCallbacks().NAME = cb;      \
&gt;  }

so these are all internal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752045</commentid>
    <comment_count>5</comment_count>
      <attachid>170916</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-26 07:49:29 -0700</bug_when>
    <thetext>Comment on attachment 170916
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_text_checker.cpp:211
&gt;&gt;  }
&gt; 
&gt; so these are all internal?

I&apos;m not sure I understand the question. This preexisting macro is used to generate the implementation for the public C API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752049</commentid>
    <comment_count>6</comment_count>
      <attachid>170916</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-26 07:50:48 -0700</bug_when>
    <thetext>Comment on attachment 170916
Patch

Yeah sure. my mistake</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752054</commentid>
    <comment_count>7</comment_count>
      <attachid>170916</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-26 07:58:49 -0700</bug_when>
    <thetext>Comment on attachment 170916
Patch

Clearing flags on attachment: 170916

Committed r132657: &lt;http://trac.webkit.org/changeset/132657&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752055</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-26 07:58:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170911</attachid>
            <date>2012-10-26 06:40:23 -0700</date>
            <delta_ts>2012-10-26 07:07:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>100513_text_checker_cpp.patch</filename>
            <type>text/plain</type>
            <size>23490</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyNjMzZGVkLi4yY2FlOTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDYg
QEAKIDIwMTItMTAtMjYgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KIAorICAgICAgICBbRUZMXVtXSzJdIEdldCByaWQgb2YgQydpc20gaW4gdGV4dCBjaGVj
a2VyIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAwNTEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TWFrZSBFd2tfVGV4dF9DaGVja2VyIGEgQysrIGNsYXNzIGFuZCBtb3ZlIHRoZQorICAgICAgICBX
ZWJLaXRUZXh0Q2hlY2tlciBjb2RlIHRvIHRoaXMgbmV3IGNsYXNzLiBUaGlzCisgICAgICAgIGdl
dHMgcmlkIG9mIHRoZSBDJ2lzbSBpbiB0aGUgdGV4dCBjaGVja2VyIGNvZGUKKyAgICAgICAgYW5k
IG1ha2UgaXQgY29uc2lzdGVudCB3aXRoIG90aGVyIEV3ayBjbGFzc2VzLgorCisgICAgICAgICog
UGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHQuY3BwOgorICAgICAgICAoRXdrX0NvbnRleHQ6OkV3a19Db250ZXh0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAoc3BlbGxDaGVja2lu
Z0xhbmd1YWdlc1NldFVwZGF0ZSk6CisgICAgICAgIChld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX3NldCk6CisgICAgICAgIChld2tfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQpOgorICAgICAgICAoZXdrX3NldHRpbmdz
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwOgorICAgICAgICAoQ2xpZW50Q2FsbGJhY2tzKToKKyAg
ICAgICAgKHRleHRDaGVja2VyRW5jaGFudCk6CisgICAgICAgIChjbGllbnRDYWxsYmFja3MpOgor
ICAgICAgICAoRXdrX1RleHRfQ2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQpOgorICAgICAgICAoRXdrX1RleHRfQ2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKToKKyAgICAgICAgKEV3a19UZXh0X0NoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1l
bnRUYWcpOgorICAgICAgICAoRXdrX1RleHRfQ2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0
aFRhZyk6CisgICAgICAgIChFd2tfVGV4dF9DaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcp
OgorICAgICAgICAoRXdrX1RleHRfQ2hlY2tlcjo6Z3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAo
RXdrX1RleHRfQ2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKEV3a19UZXh0X0NoZWNrZXI6
Omlnbm9yZVdvcmQpOgorICAgICAgICAoRXdrX1RleHRfQ2hlY2tlcjo6YXZhaWxhYmxlU3BlbGxD
aGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChFd2tfVGV4dF9DaGVja2VyOjp1cGRhdGVTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKEV3a19UZXh0X0NoZWNrZXI6OmxvYWRlZFNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoRXdrX1RleHRfQ2hlY2tlcjo6aW5pdGlh
bGl6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hlY2tlcl9wcml2
YXRlLmg6CisgICAgICAgIChFd2tfVGV4dF9DaGVja2VyKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1dlYktpdFRleHRDaGVja2VyLmg6IFJlbW92ZWQuCisKKzIwMTItMTAtMjYgIENocmlzdG9w
aGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KKwogICAgICAgICBbRUZMXVtX
SzJdIEluaXRpYWxpemUgRXdrX0NvbnRleHQgY2xhc3MgbWVtYmVycyBpbiBpbml0aWFsaXphdGlv
biBsaXN0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDA1MDMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBiYThhMjJlLi42Y2VkZWQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtODcsNyArODcsNiBAQCBMSVNUKEFQUEVORCBX
ZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRFZmwuY3BwCiAgICAg
VUlQcm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcAogICAgIFVJUHJv
Y2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCi0gICAgVUlQcm9jZXNzL2VmbC9XZWJL
aXRUZXh0Q2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAK
ICAgICBVSVByb2Nlc3MvZWZsL1dlYlBvcHVwTWVudVByb3h5RWZsLmNwcAogICAgIFVJUHJvY2Vz
cy9lZmwvV2ViUHJlZmVyZW5jZXNFZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKaW5kZXggMDJkNzU2ZC4uM2EwMDcxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAt
OTAsNyArOTAsNyBAQCBFd2tfQ29udGV4dDo6RXdrX0NvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIGV3a190ZXh0X2NoZWNr
ZXJfY2xpZW50X2F0dGFjaCgpOworICAgIEV3a19UZXh0X0NoZWNrZXI6OmluaXRpYWxpemUoKTsK
ICAgICBpZiAoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9n
ZXQoKSkgewogICAgICAgICAvLyBMb2FkIHRoZSBkZWZhdWx0IGxhbmd1YWdlLgogICAgICAgICBl
d2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldCgwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwCmluZGV4IDRiOWVj
MjcuLjljYTU0ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19zZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3NldHRpbmdzLmNwcApAQCAtMzUsNyArMzUsNyBAQAogCiAjaWYgRU5BQkxFKFNQRUxMQ0hF
Q0spCiAjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgotI2luY2x1ZGUgIldlYktpdFRleHRDaGVj
a2VyLmgiCisjaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCiAjaW5jbHVkZSA8
RWNvcmUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgRWluYV9Cb29sIG9uQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdJZGxlcih2b2lkKikKIHN0YXRpYyBFaW5hX0Jvb2wgc3BlbGxDaGVja2luZ0xh
bmd1YWdlc1NldFVwZGF0ZSh2b2lkKikKIHsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdG8gZGVs
ZWdhdGUgY2FsbGluZyBvZiB0aGlzIG1ldGhvZCBpbiBXZWJQcm9jZXNzIHRvIGRvIG5vdCBkZWxh
eS9ibG9jayBVSVByb2Nlc3MuCi0gICAgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhld2tU
ZXh0Q2hlY2tlclNldHRpbmdzLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOworICAgIEV3a19UZXh0
X0NoZWNrZXI6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoZXdrVGV4dENoZWNrZXJTZXR0
aW5ncy5zcGVsbENoZWNraW5nTGFuZ3VhZ2VzKTsKICAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tf
Q0FOQ0VMOwogfQogCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBld2tfc2V0dGluZ3NfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChFaW5hX0Jvb2wgZW5hYmxlKQogICAgICAg
ICBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2Vk
KGVuYWJsZSk7CiAKICAgICAgICAgLy8gU2V0cyB0aGUgZGVmYXVsdCBsYW5ndWFnZSBpZiB1c2Vy
IGRpZG4ndCBzcGVjaWZ5IGFueS4KLSAgICAgICAgaWYgKGVuYWJsZSAmJiBsb2FkZWRTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKCkuaXNFbXB0eSgpKQorICAgICAgICBpZiAoZW5hYmxlICYmIEV3a19U
ZXh0X0NoZWNrZXI6OmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKS5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICBzcGVsbENoZWNraW5nTGFuZ3VhZ2VzU2V0KFZlY3RvcjxTdHJpbmc+KCkpOwog
CiAgICAgICAgIGlmIChld2tUZXh0Q2hlY2tlclNldHRpbmdzLm9uQ29udGludW91c1NwZWxsQ2hl
Y2tpbmcpCkBAIC0yMzgsNyArMjM4LDcgQEAgRWluYV9MaXN0KiBld2tfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKQogewogICAgIEVpbmFfTGlzdCogbGlz
dE9mbGFuZ3VhZ2VzID0gMDsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBWZWN0b3I8U3Ry
aW5nPiBsYW5ndWFnZXMgPSBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAg
VmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzID0gRXdrX1RleHRfQ2hlY2tlcjo6YXZhaWxhYmxlU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcygpOwogICAgIHNpemVfdCBudW1iZXJPZkxhbnVhZ2VzID0gbGFu
Z3VhZ2VzLnNpemUoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZMYW51
YWdlczsgKytpKQpAQCAtMjYxLDcgKzI2MSw3IEBAIEVpbmFfTGlzdCogZXdrX3NldHRpbmdzX3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKQogewogICAgIEVpbmFfTGlzdCogbGlzdE9mbGFu
Z3VhZ2VzID0gMDsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBWZWN0b3I8U3RyaW5nPiBs
YW5ndWFnZXMgPSBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAgVmVjdG9yPFN0
cmluZz4gbGFuZ3VhZ2VzID0gRXdrX1RleHRfQ2hlY2tlcjo6bG9hZGVkU3BlbGxDaGVja2luZ0xh
bmd1YWdlcygpOwogICAgIHNpemVfdCBudW1iZXJPZkxhbnVhZ2VzID0gbGFuZ3VhZ2VzLnNpemUo
KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZMYW51YWdlczsgKytpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3RleHRfY2hl
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVj
a2VyLmNwcAppbmRleCA1MjVkNmQ0Li4xYTUxZGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29w
eXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI4LDM4ICsyOSwxNDcgQEAKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQog
CisjaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0Lmgi
CisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgor
I2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgotI2luY2x1
ZGUgIldlYktpdFRleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5j
bHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAi
ZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotLy8gSW5pdGlhbGl6
ZXMgdGhlIGNsaWVudCdzIGZ1bmN0aW9ucyB0byBAYyAwIHRvIGJlIHN1cmUgdGhhdCB0aGV5IGFy
ZSBub3QgZGVmaW5lZC4KLXN0YXRpYyBFd2tfVGV4dF9DaGVja2VyIGV3a1RleHRDaGVja2VyQ2Fs
bGJhY2tzID0gewotICAgIDAsIC8vIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0Ci0gICAg
MCwgLy8gdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZQotICAgIDAsIC8vIHN0cmluZ19z
cGVsbGluZ19jaGVjawotICAgIDAsIC8vIHdvcmRfZ3Vlc3Nlc19nZXQKLSAgICAwLCAvLyB3b3Jk
X2xlYXJuCi0gICAgMCAvLyB3b3JkX2lnbm9yZQorLyoqCisgKiBAYnJpZWYgU3RydWN0dXJlIHRv
IHN0b3JlIGNsaWVudCBjYWxsYmFjayBmdW5jdGlvbnMuCisgKgorICogQGludGVybmFsCisgKi8K
K3N0cnVjdCBDbGllbnRDYWxsYmFja3MgeworICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1Nw
ZWxsX0RvY3VtZW50X1RhZ19HZXRfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQ7Cisg
ICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3NlX0NiIHVu
aXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2U7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9TdHJp
bmdfU3BlbGxpbmdfQ2hlY2tfQ2Igc3RyaW5nX3NwZWxsaW5nX2NoZWNrOworICAgIEV3a19UZXh0
X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldF9DYiB3b3JkX2d1ZXNzZXNfZ2V0OworICAgIEV3a19U
ZXh0X0NoZWNrZXJfV29yZF9MZWFybl9DYiB3b3JkX2xlYXJuOworICAgIEV3a19UZXh0X0NoZWNr
ZXJfV29yZF9JZ25vcmVfQ2Igd29yZF9pZ25vcmU7CiB9OwogCi0jZGVmaW5lIEVXS19URVhUX0NI
RUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgIFwKLXZvaWQgZXdrX3RleHRfY2hl
Y2tlcl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1FIGNiKSAgICAgXAoteyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZXdrVGV4dENo
ZWNrZXJDYWxsYmFja3MuTkFNRSA9IGNiOyAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBpbmxp
bmUgVGV4dENoZWNrZXJFbmNoYW50KiB0ZXh0Q2hlY2tlckVuY2hhbnQoKQoreworICAgIHN0YXRp
YyBPd25QdHI8VGV4dENoZWNrZXJFbmNoYW50PiB0ZXh0Q2hlY2tlckVuY2hhbnQgPSBUZXh0Q2hl
Y2tlckVuY2hhbnQ6OmNyZWF0ZSgpOworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hhbnQuZ2V0
KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ2xpZW50Q2FsbGJhY2tzJiBjbGllbnRDYWxsYmFja3Mo
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2xpZW50Q2FsbGJhY2tzLCBjbGllbnRDYWxs
YmFja3MsICgpKTsKKyAgICByZXR1cm4gY2xpZW50Q2FsbGJhY2tzOworfQorCitib29sIEV3a19U
ZXh0X0NoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQq
KQoreworICAgIHJldHVybiBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19l
bmFibGVkX2dldCgpOworfQorCit2b2lkIEV3a19UZXh0X0NoZWNrZXI6OnNldENvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqKQoreworICAgIGV3
a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGVuYWJsZWQp
OworfQorCit1aW50NjRfdCBFd2tfVGV4dF9DaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFn
KFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoY2xpZW50Q2FsbGJhY2tz
KCkudW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCisgICAgICAgIHJldHVybiBjbGllbnRD
YWxsYmFja3MoKS51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCh0b0ltcGwocGFnZSktPnZp
ZXdXaWRnZXQoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBFd2tfVGV4dF9DaGVja2Vy
OjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCopCit7
CisgICAgaWYgKGNsaWVudENhbGxiYWNrcygpLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xv
c2UpCisgICAgICAgIGNsaWVudENhbGxiYWNrcygpLnVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdf
Y2xvc2UodGFnKTsKK30KKwordm9pZCBFd2tfVGV4dF9DaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZT
dHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGlu
Z0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCopCit7Cisg
ICAgaWYgKGNsaWVudENhbGxiYWNrcygpLnN0cmluZ19zcGVsbGluZ19jaGVjaykKKyAgICAgICAg
Y2xpZW50Q2FsbGJhY2tzKCkuc3RyaW5nX3NwZWxsaW5nX2NoZWNrKHRhZywgdG9JbXBsKHRleHQp
LT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGlu
Z0xlbmd0aCk7CisgICAgZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+Y2hlY2tT
cGVsbGluZ09mU3RyaW5nKHRvSW1wbCh0ZXh0KS0+c3RyaW5nKCksICptaXNzcGVsbGluZ0xvY2F0
aW9uLCAqbWlzc3BlbGxpbmdMZW5ndGgpOworfQorCitXS0FycmF5UmVmIEV3a19UZXh0X0NoZWNr
ZXI6Omd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qg
dm9pZCopCit7CisgICAgV0tNdXRhYmxlQXJyYXlSZWYgc3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKTsKKworICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS53b3JkX2d1
ZXNzZXNfZ2V0KSB7CisgICAgICAgIEVpbmFfTGlzdCogbGlzdCA9IGNsaWVudENhbGxiYWNrcygp
LndvcmRfZ3Vlc3Nlc19nZXQodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICB2b2lkKiBpdGVtOworCisgICAgICAgIEVJTkFfTElTVF9GUkVFKGxpc3Qs
IGl0ZW0pIHsKKyAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9u
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0YXRpY19jYXN0PGNoYXIq
PihpdGVtKSkpOworICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JX
b3JkLCBzdWdnZXN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGZyZWUoaXRlbSk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gdGV4dENo
ZWNrZXJFbmNoYW50KCktPmdldEd1ZXNzZXNGb3JXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkp
OworICAgICAgICBzaXplX3QgbnVtYmVyT2ZHdWVzc2VzID0gZ3Vlc3Nlcy5zaXplKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZHdWVzc2VzOyArK2kpIHsKKyAgICAg
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGd1ZXNzZXNbaV0udXRmOCgpLmRhdGEoKSkpOworICAg
ICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3JkLCBzdWdnZXN0aW9u
LmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdWdnZXN0aW9uc0Zvcldv
cmQ7Cit9CisKK3ZvaWQgRXdrX1RleHRfQ2hlY2tlcjo6bGVhcm5Xb3JkKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGNsaWVudENhbGxiYWNr
cygpLndvcmRfbGVhcm4pCisgICAgICAgIGNsaWVudENhbGxiYWNrcygpLndvcmRfbGVhcm4odGFn
LCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAg
ICAgdGV4dENoZWNrZXJFbmNoYW50KCktPmxlYXJuV29yZCh0b0ltcGwod29yZCktPnN0cmluZygp
KTsKK30KKwordm9pZCBFd2tfVGV4dF9DaGVja2VyOjppZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGNsaWVudENhbGxiYWNr
cygpLndvcmRfaWdub3JlKQorICAgICAgICBjbGllbnRDYWxsYmFja3MoKS53b3JkX2lnbm9yZSh0
YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAg
ICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+aWdub3JlV29yZCh0b0ltcGwod29yZCktPnN0cmlu
ZygpKTsKK30KKworVmVjdG9yPFN0cmluZz4gRXdrX1RleHRfQ2hlY2tlcjo6YXZhaWxhYmxlU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcygpCit7CisgICAgcmV0dXJuIHRleHRDaGVja2VyRW5jaGFudCgp
LT5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK3ZvaWQgRXdrX1RleHRf
Q2hlY2tlcjo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgbGFuZ3VhZ2VzKQoreworICAgIHRleHRDaGVja2VyRW5jaGFudCgpLT51cGRhdGVTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IEV3a19UZXh0
X0NoZWNrZXI6OmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKQoreworICAgIHJldHVybiB0
ZXh0Q2hlY2tlckVuY2hhbnQoKS0+bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwogfQog
CiAvKioKLSAqIEF0dGFjaGVzIHNwZWxsY2hlY2tlciBmZWF0dXJlLgorICogSW5pdGlhbGl6ZXMg
c3BlbGxjaGVjayBmZWF0dXJlLgogICoKICAqIEBpbnRlcm5hbAogICoKLSAqIFRoZSBkZWZhdWx0
IHNwZWxsY2hlY2tlciBmZWF0dXJlIGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KLSAqIENs
aWVudCBtYXkgdXNlIG93biBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGNoZWNrZXIgcHJldmlvdXNs
eSBzZXQKKyAqIFRoZSBkZWZhdWx0IHNwZWxsY2hlY2sgZmVhdHVyZSBpcyBiYXNlZCBvbiBFbmNo
YW50IGxpYnJhcnkuCisgKiBDbGllbnQgbWF5IHVzZSBvd24gc3BlbGxjaGVjayBpbXBsZW1lbnRh
dGlvbiBwcmV2aW91c2x5IHNldAogICogdGhyb3VnaCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLgog
ICovCi12b2lkIGV3a190ZXh0X2NoZWNrZXJfY2xpZW50X2F0dGFjaCgpCit2b2lkIEV3a19UZXh0
X0NoZWNrZXI6OmluaXRpYWxpemUoKQogewogICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVU
ZXh0Q2hlY2tlckNsaWVudCA9IGZhbHNlOwogICAgIGlmIChkaWRJbml0aWFsaXplVGV4dENoZWNr
ZXJDbGllbnQpCkBAIC05MCwyMSArMjAwLDEwIEBAIHZvaWQgZXdrX3RleHRfY2hlY2tlcl9jbGll
bnRfYXR0YWNoKCkKICAgICBkaWRJbml0aWFsaXplVGV4dENoZWNrZXJDbGllbnQgPSB0cnVlOwog
fQogCi0vKgotICogR2V0cyB0aGUgY2xpZW50J3MgY2FsbGJhY2tzLgotICoKLSAqIEBpbnRlcm5h
bAotICoKLSAqIFRoZSBjbGllbnQndCBjYWxsYmFja3MgYXJlIG5vdCBkZWZpbmVkIGJ5IGRlZmF1
bHQuCi0gKiBJZiB0aGUgY2xpZW50IGhhc24ndCBzZXQgdGhlIGNhbGxiYWNrLCB0aGUgY29ycmVz
cG9uZGluZyBjYWxsYmFjayB3aWxsCi0gKiByZXR1cm4gQGMgMCBhbmQgdGhlIGRlZmF1bHQgV2Vi
S2l0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBmb3IgdGhpcwotICogZnVuY3Rpb25hbGl0
eS4KLSAqCi0gKiBAcmV0dXJuIHRoZSBzdHJ1Y3Qgd2l0aCB0aGUgY2xpZW50J3MgY2FsbGJhY2tz
LgotICovCi1Fd2tfVGV4dF9DaGVja2VyKiBld2tfdGV4dF9jaGVja2VyX2NhbGxiYWNrc19nZXQo
KQotewotICAgIHJldHVybiAmZXdrVGV4dENoZWNrZXJDYWxsYmFja3M7CisjZGVmaW5lIEVXS19U
RVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgICAgICBcCit2b2lkIGV3
a190ZXh0X2NoZWNrZXJfIyNOQU1FIyNfY2Jfc2V0KFRZUEVfTkFNRSBjYikgICAgICAgICBcCit7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2xpZW50Q2FsbGJhY2tzKCkuTkFNRSA9IGNiOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCmluZGV4IGU3NDgxMDYu
LjgzOWQ3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsMjQgKzMxLDI4IEBACiAKICNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgiCiAKLS8q
KgotICogQGJyaWVmIFN0cnVjdHVyZSBrZWVwcyBjbGllbnQncyBjYWxsYmFjayBmdW5jdGlvbnMu
Ci0gKgotICogQGludGVybmFsCi0gKi8KLXN0cnVjdCBFd2tfVGV4dF9DaGVja2VyIHsKLSAgICBF
d2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0X0NiIHVuaXF1ZV9z
cGVsbF9kb2N1bWVudF90YWdfZ2V0OwotICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVlX1NwZWxs
X0RvY3VtZW50X1RhZ19DbG9zZV9DYiB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlOwot
ICAgIEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrX0NiIHN0cmluZ19zcGVs
bGluZ19jaGVjazsKLSAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXRfQ2Igd29y
ZF9ndWVzc2VzX2dldDsKLSAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm5fQ2Igd29yZF9s
ZWFybjsKLSAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlX0NiIHdvcmRfaWdub3JlOwot
fTsKK2NsYXNzIEV3a19UZXh0X0NoZWNrZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemUoKTsKIAotRXdrX1RleHRfQ2hlY2tlciogZXdrX3RleHRfY2hlY2tlcl9jYWxsYmFj
a3NfZ2V0KCk7CisgICAgLy8gRW5jaGFudCBoZWxwZXJzLgorICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAgc3RhdGljIHZvaWQg
dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3Vh
Z2VzKTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1
YWdlcygpOwogCi0vLyBNYWtlcyBpdCB2aXNpYmxlIGZvciBXVFIuCi1FQVBJIHZvaWQgZXdrX3Rl
eHRfY2hlY2tlcl9jbGllbnRfYXR0YWNoKCk7Citwcml2YXRlOgorICAgIC8vIFdLVGV4dENoZWNr
ZXIgY2xpZW50IGNhbGxiYWNrcy4KKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKworICAgIHN0YXRpYyB1aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50
VGFnKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQg
Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOworCisgICAgc3RhdGljIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90
IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0
YXRpYyBXS0FycmF5UmVmIGd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYg
d29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgbGVhcm5Xb3Jk
KHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7
CisgICAgc3RhdGljIHZvaWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdv
cmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworfTsKIAogI2VuZGlmIC8vIEVOQUJMRShTUEVM
TENIRUNLKQogI2VuZGlmIC8vIGV3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmYzOWM0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwot
ICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0VGV4dENoZWNrZXIuaCIKLQotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRl
ICJXS011dGFibGVBcnJheS5oIgotI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAiZXdrX3Nl
dHRpbmdzLmgiCi0jaW5jbHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCi0jaW5jbHVk
ZSA8RWluYS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgT3duUHRyPFdlYkNvcmU6
OlRleHRDaGVja2VyRW5jaGFudD4gdGV4dENoZWNrZXJFbmNoYW50ID0gV2ViQ29yZTo6VGV4dENo
ZWNrZXJFbmNoYW50OjpjcmVhdGUoKTsKLQotc3RhdGljIEV3a19UZXh0X0NoZWNrZXIqIGV3a1Rl
eHRDaGVja2VyQ2FsbGJhY2tzID0gZXdrX3RleHRfY2hlY2tlcl9jYWxsYmFja3NfZ2V0KCk7Ci0K
LWJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3Qgdm9pZCopCi17Ci0g
ICAgcmV0dXJuIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
Z2V0KCk7Ci19Ci0KLXZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCwgY29uc3Qgdm9pZCopCi17Ci0gICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3Bl
bGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoZW5hYmxlZCk7Ci19Ci0KLXVpbnQ2NF90IHVuaXF1ZVNw
ZWxsRG9jdW1lbnRUYWcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQotewotICAgIGlmIChl
d2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXQpCi0g
ICAgICAgIHJldHVybiBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+dW5pcXVlX3NwZWxsX2RvY3Vt
ZW50X3RhZ19nZXQodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpOwotCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLXZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0
IHZvaWQqKQotewotICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+dW5pcXVlX3NwZWxs
X2RvY3VtZW50X3RhZ19jbG9zZSkKLSAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPnVu
aXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2UodGFnKTsKLX0KLQotdm9pZCBjaGVja1NwZWxs
aW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCop
Ci17Ci0gICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT5zdHJpbmdfc3BlbGxpbmdfY2hl
Y2spCi0gICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT5zdHJpbmdfc3BlbGxpbmdfY2hl
Y2sodGFnLCB0b0ltcGwodGV4dCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1pc3NwZWxsaW5n
TG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRDaGVj
a2VyRW5jaGFudC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRvSW1wbCh0ZXh0KS0+c3RyaW5nKCks
ICptaXNzcGVsbGluZ0xvY2F0aW9uLCAqbWlzc3BlbGxpbmdMZW5ndGgpOwotfQotCi1XS0FycmF5
UmVmIGd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qg
dm9pZCopCi17Ci0gICAgV0tNdXRhYmxlQXJyYXlSZWYgc3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKTsKLQotICAgIGlmIChld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+
d29yZF9ndWVzc2VzX2dldCkgewotICAgICAgICBFaW5hX0xpc3QqIGxpc3QgPSBld2tUZXh0Q2hl
Y2tlckNhbGxiYWNrcy0+d29yZF9ndWVzc2VzX2dldCh0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHZvaWQqIGl0ZW07Ci0KLSAgICAgICAgRUlOQV9M
SVNUX0ZSRUUobGlzdCwgaXRlbSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3Rh
dGljX2Nhc3Q8Y2hhcio+KGl0ZW0pKSk7Ci0gICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShz
dWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOwotICAgICAgICAgICAgZnJlZShp
dGVtKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1
ZXNzZXMgPSB0ZXh0Q2hlY2tlckVuY2hhbnQtPmdldEd1ZXNzZXNGb3JXb3JkKHRvSW1wbCh3b3Jk
KS0+c3RyaW5nKCkpOwotICAgICAgICBzaXplX3QgbnVtYmVyT2ZHdWVzc2VzID0gZ3Vlc3Nlcy5z
aXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZHdWVzc2VzOyAr
K2kpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGd1ZXNzZXNbaV0udXRmOCgpLmRh
dGEoKSkpOwotICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNGb3JXb3Jk
LCBzdWdnZXN0aW9uLmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzdWdn
ZXN0aW9uc0ZvcldvcmQ7Ci19Ci0KLXZvaWQgbGVhcm5Xb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJp
bmdSZWYgd29yZCwgY29uc3Qgdm9pZCopCi17Ci0gICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJh
Y2tzLT53b3JkX2xlYXJuKQotICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+d29yZF9s
ZWFybih0YWcsIHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgZWxz
ZQotICAgICAgICB0ZXh0Q2hlY2tlckVuY2hhbnQtPmxlYXJuV29yZCh0b0ltcGwod29yZCktPnN0
cmluZygpKTsKLX0KLQotdm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYg
d29yZCwgY29uc3Qgdm9pZCopCi17Ci0gICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53
b3JkX2lnbm9yZSkKLSAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRfaWdub3Jl
KHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIHRleHRDaGVja2VyRW5jaGFudC0+aWdub3JlV29yZCh0b0ltcGwod29yZCktPnN0cmlu
ZygpKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlU3BlbGxDaGVja2luZ0xhbmd1YWdl
cygpCi17Ci0gICAgcmV0dXJuIHRleHRDaGVja2VyRW5jaGFudC0+YXZhaWxhYmxlU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcygpOwotfQotCi12b2lkIHVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcykKLXsKLSAgICB0ZXh0Q2hlY2tlckVuY2hh
bnQtPnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMobGFuZ3VhZ2VzKTsKLX0KLQotVmVjdG9y
PFN0cmluZz4gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpCi17Ci0gICAgcmV0dXJuIHRl
eHRDaGVja2VyRW5jaGFudC0+bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzFhZTZiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJv
bmljcwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwot
ICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdFRleHRDaGVja2VyX2gK
LSNkZWZpbmUgV2ViS2l0VGV4dENoZWNrZXJfaAotCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0K
LSNpbmNsdWRlICJUZXh0Q2hlY2tlckVuY2hhbnQuaCIKLSNpbmNsdWRlICJXS0FycmF5LmgiCi0j
aW5jbHVkZSAiV0tQYWdlLmgiCi0jaW5jbHVkZSAiV0tTdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLS8vIFRoZSBmdW5jdGlvbnMgbWFpbmx5IGNob29zZSBiZXR3ZWVuIGNsaWVudCdz
IGltcGxlbWVudGF0aW9uIG9mIHNwZWxsaW5nIGFuZCB0aGUgV2ViS2l0IG9uZS4KLQotLy8gQ2Fs
bGJhY2tzIHJlcXVpcmVkIGJ5IFdLVGV4dENoZWNrZXIuCi1ib29sIGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdm9pZCBzZXRDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKLQotdWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOwotdm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2
NF90IHRhZywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0KLXZvaWQgY2hlY2tTcGVsbGluZ09m
U3RyaW5nKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxp
bmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOwotV0tBcnJheVJlZiBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5n
UmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdm9pZCBsZWFybldvcmQodWludDY0
X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXZvaWQg
aWdub3JlV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOwotCi0vLyBFbmNoYW50J3MgaGVscGVyLgotVmVjdG9yPFN0cmluZz4gYXZhaWxh
YmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwotdm9pZCB1cGRhdGVTcGVsbENoZWNraW5nTGFu
Z3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpOwotVmVjdG9yPFN0cmluZz4g
bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIEVOQUJMRShTUEVMTENIRUNLKQotI2VuZGlmIC8vIFdlYktpdFRleHRDaGVj
a2VyX2gK
</data>
<flag name="review"
          id="184676"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170916</attachid>
            <date>2012-10-26 07:07:51 -0700</date>
            <delta_ts>2012-10-26 07:58:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>100513_text_checker_cpp.patch</filename>
            <type>text/plain</type>
            <size>22421</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyNjMzZGVkLi40NjEwMWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDcg
QEAKIDIwMTItMTAtMjYgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KIAorICAgICAgICBbRUZMXVtXSzJdIEdldCByaWQgb2YgQydpc20gaW4gdGV4dCBjaGVj
a2VyIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAwNTEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TWFrZSBFd2tfVGV4dF9DaGVja2VyIGEgQysrIGNsYXNzIGFuZCBtb3ZlIHRoZQorICAgICAgICBX
ZWJLaXRUZXh0Q2hlY2tlciBjb2RlIHRvIHRoaXMgbmV3IGNsYXNzLiBUaGlzCisgICAgICAgIGdl
dHMgcmlkIG9mIHRoZSBDJ2lzbSBpbiB0aGUgdGV4dCBjaGVja2VyIGNvZGUKKyAgICAgICAgYW5k
IG1ha2UgaXQgY29uc2lzdGVudCB3aXRoIG90aGVyIEV3ayBjbGFzc2VzLgorCisgICAgICAgICog
UGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHQuY3BwOgorICAgICAgICAoRXdrX0NvbnRleHQ6OkV3a19Db250ZXh0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAoc3BlbGxDaGVja2lu
Z0xhbmd1YWdlc1NldFVwZGF0ZSk6CisgICAgICAgIChld2tfc2V0dGluZ3NfY29udGludW91c19z
cGVsbF9jaGVja2luZ19lbmFibGVkX3NldCk6CisgICAgICAgIChld2tfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQpOgorICAgICAgICAoZXdrX3NldHRpbmdz
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXIuY3BwOgorICAgICAgICAoQ2xpZW50Q2FsbGJhY2tzKToKKyAg
ICAgICAgKHRleHRDaGVja2VyRW5jaGFudCk6CisgICAgICAgIChjbGllbnRDYWxsYmFja3MpOgor
ICAgICAgICAoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoc2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKHVuaXF1ZVNwZWxsRG9j
dW1lbnRUYWcpOgorICAgICAgICAoY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAg
IChjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoZ3Vlc3Nlc0ZvcldvcmQpOgorICAg
ICAgICAobGVhcm5Xb3JkKToKKyAgICAgICAgKGlnbm9yZVdvcmQpOgorICAgICAgICAoRXdrX1Rl
eHRfQ2hlY2tlcik6CisgICAgICAgIChFd2tfVGV4dF9DaGVja2VyOjphdmFpbGFibGVTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKToKKyAgICAgICAgKEV3a19UZXh0X0NoZWNrZXI6OnVwZGF0ZVNwZWxs
Q2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAoRXdrX1RleHRfQ2hlY2tlcjo6bG9hZGVkU3Bl
bGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAgICAgIChFd2tfVGV4dF9DaGVja2VyOjppbml0aWFs
aXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZh
dGUuaDoKKyAgICAgICAgKEV3a19UZXh0X0NoZWNrZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9l
ZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9l
ZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogUmVtb3ZlZC4KKworMjAxMi0xMC0yNiAgQ2hyaXN0b3Bo
ZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCiAgICAgICAgIFtFRkxdW1dL
Ml0gSW5pdGlhbGl6ZSBFd2tfQ29udGV4dCBjbGFzcyBtZW1iZXJzIGluIGluaXRpYWxpemF0aW9u
IGxpc3QKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MDUwMwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGJhOGEyMmUuLjZjZWRlZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC04Nyw3ICs4Nyw2IEBAIExJU1QoQVBQRU5EIFdl
YktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9lZmwvV2ViQ29udGV4dEVmbC5jcHAKICAgICBV
SVByb2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCiAgICAgVUlQcm9j
ZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKLSAgICBVSVByb2Nlc3MvZWZsL1dlYktp
dFRleHRDaGVja2VyLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcAog
ICAgIFVJUHJvY2Vzcy9lZmwvV2ViUG9wdXBNZW51UHJveHlFZmwuY3BwCiAgICAgVUlQcm9jZXNz
L2VmbC9XZWJQcmVmZXJlbmNlc0VmbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCAwMmQ3NTZkLi4zYTAwNzFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC05
MCw3ICs5MCw3IEBAIEV3a19Db250ZXh0OjpFd2tfQ29udGV4dChXS0NvbnRleHRSZWYgY29udGV4
dCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgZXdrX3RleHRfY2hlY2tl
cl9jbGllbnRfYXR0YWNoKCk7CisgICAgRXdrX1RleHRfQ2hlY2tlcjo6aW5pdGlhbGl6ZSgpOwog
ICAgIGlmIChld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dl
dCgpKSB7CiAgICAgICAgIC8vIExvYWQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UuCiAgICAgICAgIGV3
a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KDApOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKaW5kZXggNGI5ZWMy
Ny4uMGYzMGQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfc2V0dGluZ3MuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAKICNpZiBFTkFCTEUoU1BFTExDSEVD
SykKICNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCi0jaW5jbHVkZSAiV2ViS2l0VGV4dENoZWNr
ZXIuaCIKKyNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxF
Y29yZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgb25Db250aW51b3VzU3Bl
bGxDaGVja2luZ0lkbGVyKHZvaWQqKQogc3RhdGljIEVpbmFfQm9vbCBzcGVsbENoZWNraW5nTGFu
Z3VhZ2VzU2V0VXBkYXRlKHZvaWQqKQogewogICAgIC8vIEZJWE1FOiBDb25zaWRlciB0byBkZWxl
Z2F0ZSBjYWxsaW5nIG9mIHRoaXMgbWV0aG9kIGluIFdlYlByb2Nlc3MgdG8gZG8gbm90IGRlbGF5
L2Jsb2NrIFVJUHJvY2Vzcy4KLSAgICB1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGV3a1Rl
eHRDaGVja2VyU2V0dGluZ3Muc3BlbGxDaGVja2luZ0xhbmd1YWdlcyk7CisgICAgRXdrX1RleHRf
Q2hlY2tlcjo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhld2tUZXh0Q2hlY2tlclNldHRp
bmdzLnNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOwogICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19D
QU5DRUw7CiB9CiAKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KEVpbmFfQm9vbCBlbmFibGUpCiAgICAgICAg
IFdLVGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQo
ZW5hYmxlKTsKIAogICAgICAgICAvLyBTZXRzIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlmIHVzZXIg
ZGlkbid0IHNwZWNpZnkgYW55LgotICAgICAgICBpZiAoZW5hYmxlICYmIGxvYWRlZFNwZWxsQ2hl
Y2tpbmdMYW5ndWFnZXMoKS5pc0VtcHR5KCkpCisgICAgICAgIGlmIChlbmFibGUgJiYgRXdrX1Rl
eHRfQ2hlY2tlcjo6bG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHNwZWxsQ2hlY2tpbmdMYW5ndWFnZXNTZXQoVmVjdG9yPFN0cmluZz4oKSk7CiAK
ICAgICAgICAgaWYgKGV3a1RleHRDaGVja2VyU2V0dGluZ3Mub25Db250aW51b3VzU3BlbGxDaGVj
a2luZykKQEAgLTIzOCw3ICsyMzgsNyBAQCBFaW5hX0xpc3QqIGV3a19zZXR0aW5nc19zcGVsbF9j
aGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCgpCiB7CiAgICAgRWluYV9MaXN0KiBsaXN0
T2ZsYW5ndWFnZXMgPSAwOwogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFZlY3RvcjxTdHJp
bmc+IGxhbmd1YWdlcyA9IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKyAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzID0gRXdrX1RleHRfQ2hlY2tlcjo6YXZhaWxh
YmxlU3BlbGxDaGVja2luZ0xhbmd1YWdlcygpOwogICAgIHNpemVfdCBudW1iZXJPZkxhbnVhZ2Vz
ID0gbGFuZ3VhZ2VzLnNpemUoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZMYW51YWdlczsgKytpKQpAQCAtMjYxLDcgKzI2MSw3IEBAIEVpbmFfTGlzdCogZXdrX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKQogewogICAgIEVpbmFfTGlzdCogbGlz
dE9mbGFuZ3VhZ2VzID0gMDsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBWZWN0b3I8U3Ry
aW5nPiBsYW5ndWFnZXMgPSBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7CisgICAgVmVj
dG9yPFN0cmluZz4gbGFuZ3VhZ2VzID0gRXdrX1RleHRfQ2hlY2tlcjo6bG9hZGVkU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcygpOwogICAgIHNpemVfdCBudW1iZXJPZkxhbnVhZ2VzID0gbGFuZ3VhZ2Vz
LnNpemUoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZMYW51YWdlczsg
KytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Rl
eHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4
dF9jaGVja2VyLmNwcAppbmRleCA1MjVkNmQ0Li5lMTViOGZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyLmNwcApAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDM4ICsyOSwxNDkgQEAKIAogI2lmIEVOQUJMRShTUEVMTENI
RUNLKQogCisjaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50LmgiCisjaW5jbHVkZSAiV0tBUElD
YXN0LmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0
ci5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgot
I2luY2x1ZGUgIldlYktpdFRleHRDaGVja2VyLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCiAjaW5j
bHVkZSAiZXdrX3RleHRfY2hlY2tlcl9wcml2YXRlLmgiCisjaW5jbHVkZSA8RWluYS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotLy8gSW5p
dGlhbGl6ZXMgdGhlIGNsaWVudCdzIGZ1bmN0aW9ucyB0byBAYyAwIHRvIGJlIHN1cmUgdGhhdCB0
aGV5IGFyZSBub3QgZGVmaW5lZC4KLXN0YXRpYyBFd2tfVGV4dF9DaGVja2VyIGV3a1RleHRDaGVj
a2VyQ2FsbGJhY2tzID0gewotICAgIDAsIC8vIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0
Ci0gICAgMCwgLy8gdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZQotICAgIDAsIC8vIHN0
cmluZ19zcGVsbGluZ19jaGVjawotICAgIDAsIC8vIHdvcmRfZ3Vlc3Nlc19nZXQKLSAgICAwLCAv
LyB3b3JkX2xlYXJuCi0gICAgMCAvLyB3b3JkX2lnbm9yZQorLyoqCisgKiBAYnJpZWYgU3RydWN0
dXJlIHRvIHN0b3JlIGNsaWVudCBjYWxsYmFjayBmdW5jdGlvbnMuCisgKgorICogQGludGVybmFs
CisgKi8KK3N0cnVjdCBDbGllbnRDYWxsYmFja3MgeworICAgIEV3a19UZXh0X0NoZWNrZXJfVW5p
cXVlX1NwZWxsX0RvY3VtZW50X1RhZ19HZXRfQ2IgdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19n
ZXQ7CisgICAgRXdrX1RleHRfQ2hlY2tlcl9VbmlxdWVfU3BlbGxfRG9jdW1lbnRfVGFnX0Nsb3Nl
X0NiIHVuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2U7CisgICAgRXdrX1RleHRfQ2hlY2tl
cl9TdHJpbmdfU3BlbGxpbmdfQ2hlY2tfQ2Igc3RyaW5nX3NwZWxsaW5nX2NoZWNrOworICAgIEV3
a19UZXh0X0NoZWNrZXJfV29yZF9HdWVzc2VzX0dldF9DYiB3b3JkX2d1ZXNzZXNfZ2V0OworICAg
IEV3a19UZXh0X0NoZWNrZXJfV29yZF9MZWFybl9DYiB3b3JkX2xlYXJuOworICAgIEV3a19UZXh0
X0NoZWNrZXJfV29yZF9JZ25vcmVfQ2Igd29yZF9pZ25vcmU7CiB9OwogCi0jZGVmaW5lIEVXS19U
RVhUX0NIRUNLRVJfQ0FMTEJBQ0tfU0VUKFRZUEVfTkFNRSwgTkFNRSkgIFwKLXZvaWQgZXdrX3Rl
eHRfY2hlY2tlcl8jI05BTUUjI19jYl9zZXQoVFlQRV9OQU1FIGNiKSAgICAgXAoteyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZXdr
VGV4dENoZWNrZXJDYWxsYmFja3MuTkFNRSA9IGNiOyAgICAgICAgICAgICAgICAgIFwKK3N0YXRp
YyBpbmxpbmUgVGV4dENoZWNrZXJFbmNoYW50KiB0ZXh0Q2hlY2tlckVuY2hhbnQoKQoreworICAg
IHN0YXRpYyBPd25QdHI8VGV4dENoZWNrZXJFbmNoYW50PiB0ZXh0Q2hlY2tlckVuY2hhbnQgPSBU
ZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpOworICAgIHJldHVybiB0ZXh0Q2hlY2tlckVuY2hh
bnQuZ2V0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ2xpZW50Q2FsbGJhY2tzJiBjbGllbnRDYWxs
YmFja3MoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2xpZW50Q2FsbGJhY2tzLCBjbGll
bnRDYWxsYmFja3MsICgpKTsKKyAgICByZXR1cm4gY2xpZW50Q2FsbGJhY2tzOworfQorCitzdGF0
aWMgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKikKK3sK
KyAgICByZXR1cm4gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZF9nZXQoKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCopCit7CisgICAgZXdrX3NldHRpbmdzX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoZW5hYmxlZCk7Cit9CisKK3N0YXRpYyB1
aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lk
KikKK3sKKyAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkudW5pcXVlX3NwZWxsX2RvY3VtZW50X3Rh
Z19nZXQpCisgICAgICAgIHJldHVybiBjbGllbnRDYWxsYmFja3MoKS51bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2dldCh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSk7CisKKyAgICByZXR1cm4g
MDsKK30KKworc3RhdGljIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0
YWcsIGNvbnN0IHZvaWQqKQoreworICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS51bmlxdWVfc3Bl
bGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQorICAgICAgICBjbGllbnRDYWxsYmFja3MoKS51bmlxdWVf
c3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKHRhZyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrU3Bl
bGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1p
c3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lk
KikKK3sKKyAgICBpZiAoY2xpZW50Q2FsbGJhY2tzKCkuc3RyaW5nX3NwZWxsaW5nX2NoZWNrKQor
ICAgICAgICBjbGllbnRDYWxsYmFja3MoKS5zdHJpbmdfc3BlbGxpbmdfY2hlY2sodGFnLCB0b0lt
cGwodGV4dCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1p
c3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIHRleHRDaGVja2VyRW5jaGFudCgp
LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxs
aW5nTG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3N0YXRpYyBXS0FycmF5UmVm
IGd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9p
ZCopCit7CisgICAgV0tNdXRhYmxlQXJyYXlSZWYgc3VnZ2VzdGlvbnNGb3JXb3JkID0gV0tNdXRh
YmxlQXJyYXlDcmVhdGUoKTsKKworICAgIGlmIChjbGllbnRDYWxsYmFja3MoKS53b3JkX2d1ZXNz
ZXNfZ2V0KSB7CisgICAgICAgIEVpbmFfTGlzdCogbGlzdCA9IGNsaWVudENhbGxiYWNrcygpLndv
cmRfZ3Vlc3Nlc19nZXQodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICB2b2lkKiBpdGVtOworCisgICAgICAgIEVJTkFfTElTVF9GUkVFKGxpc3QsIGl0
ZW0pIHsKKyAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWdnZXN0aW9uKEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihpdGVtKSkpOworICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oc3VnZ2VzdGlvbnNG
b3JXb3JkLCBzdWdnZXN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGZyZWUoaXRlbSk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nl
cyA9IHRleHRDaGVja2VyRW5jaGFudCgpLT5nZXRHdWVzc2VzRm9yV29yZCh0b0ltcGwod29yZCkt
PnN0cmluZygpKTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mR3Vlc3NlcyA9IGd1ZXNzZXMuc2l6
ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mR3Vlc3NlczsgKytp
KSB7CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhndWVzc2VzW2ldLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwg
c3VnZ2VzdGlvbi5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3VnZ2Vz
dGlvbnNGb3JXb3JkOworfQorCitzdGF0aWMgdm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBX
S1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoY2xpZW50Q2FsbGJhY2tz
KCkud29yZF9sZWFybikKKyAgICAgICAgY2xpZW50Q2FsbGJhY2tzKCkud29yZF9sZWFybih0YWcs
IHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAg
ICB0ZXh0Q2hlY2tlckVuY2hhbnQoKS0+bGVhcm5Xb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkp
OworfQorCitzdGF0aWMgdm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYg
d29yZCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGNsaWVudENhbGxiYWNrcygpLndvcmRfaWdu
b3JlKQorICAgICAgICBjbGllbnRDYWxsYmFja3MoKS53b3JkX2lnbm9yZSh0YWcsIHRvSW1wbCh3
b3JkKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICB0ZXh0Q2hl
Y2tlckVuY2hhbnQoKS0+aWdub3JlV29yZCh0b0ltcGwod29yZCktPnN0cmluZygpKTsKK30KKwor
bmFtZXNwYWNlIEV3a19UZXh0X0NoZWNrZXIgeworCitWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKK3sKKyAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50
KCktPmF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK30KKwordm9pZCB1cGRhdGVT
cGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCit7
CisgICAgdGV4dENoZWNrZXJFbmNoYW50KCktPnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMo
bGFuZ3VhZ2VzKTsKK30KKworVmVjdG9yPFN0cmluZz4gbG9hZGVkU3BlbGxDaGVja2luZ0xhbmd1
YWdlcygpCit7CisgICAgcmV0dXJuIHRleHRDaGVja2VyRW5jaGFudCgpLT5sb2FkZWRTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKCk7CiB9CiAKIC8qKgotICogQXR0YWNoZXMgc3BlbGxjaGVja2VyIGZl
YXR1cmUuCisgKiBJbml0aWFsaXplcyBzcGVsbGNoZWNrIGZlYXR1cmUuCiAgKgogICogQGludGVy
bmFsCiAgKgotICogVGhlIGRlZmF1bHQgc3BlbGxjaGVja2VyIGZlYXR1cmUgaXMgYmFzZWQgb24g
RW5jaGFudCBsaWJyYXJ5LgotICogQ2xpZW50IG1heSB1c2Ugb3duIGltcGxlbWVudGF0aW9uIG9m
IHNwZWxsY2hlY2tlciBwcmV2aW91c2x5IHNldAorICogVGhlIGRlZmF1bHQgc3BlbGxjaGVjayBm
ZWF0dXJlIGlzIGJhc2VkIG9uIEVuY2hhbnQgbGlicmFyeS4KKyAqIENsaWVudCBtYXkgdXNlIG93
biBzcGVsbGNoZWNrIGltcGxlbWVudGF0aW9uIHByZXZpb3VzbHkgc2V0CiAgKiB0aHJvdWdoIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbnMuCiAgKi8KLXZvaWQgZXdrX3RleHRfY2hlY2tlcl9jbGllbnRf
YXR0YWNoKCkKK3ZvaWQgaW5pdGlhbGl6ZSgpCiB7CiAgICAgc3RhdGljIGJvb2wgZGlkSW5pdGlh
bGl6ZVRleHRDaGVja2VyQ2xpZW50ID0gZmFsc2U7CiAgICAgaWYgKGRpZEluaXRpYWxpemVUZXh0
Q2hlY2tlckNsaWVudCkKQEAgLTkwLDIxICsyMDIsMTIgQEAgdm9pZCBld2tfdGV4dF9jaGVja2Vy
X2NsaWVudF9hdHRhY2goKQogICAgIGRpZEluaXRpYWxpemVUZXh0Q2hlY2tlckNsaWVudCA9IHRy
dWU7CiB9CiAKLS8qCi0gKiBHZXRzIHRoZSBjbGllbnQncyBjYWxsYmFja3MuCi0gKgotICogQGlu
dGVybmFsCi0gKgotICogVGhlIGNsaWVudCd0IGNhbGxiYWNrcyBhcmUgbm90IGRlZmluZWQgYnkg
ZGVmYXVsdC4KLSAqIElmIHRoZSBjbGllbnQgaGFzbid0IHNldCB0aGUgY2FsbGJhY2ssIHRoZSBj
b3JyZXNwb25kaW5nIGNhbGxiYWNrIHdpbGwKLSAqIHJldHVybiBAYyAwIGFuZCB0aGUgZGVmYXVs
dCBXZWJLaXQgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGlzCi0gKiBmdW5jdGlv
bmFsaXR5LgotICoKLSAqIEByZXR1cm4gdGhlIHN0cnVjdCB3aXRoIHRoZSBjbGllbnQncyBjYWxs
YmFja3MuCi0gKi8KLUV3a19UZXh0X0NoZWNrZXIqIGV3a190ZXh0X2NoZWNrZXJfY2FsbGJhY2tz
X2dldCgpCi17Ci0gICAgcmV0dXJuICZld2tUZXh0Q2hlY2tlckNhbGxiYWNrczsKK30gLy8gbmFt
ZXNwYWNlIEV3a19UZXh0X0NoZWNrZXIKKworI2RlZmluZSBFV0tfVEVYVF9DSEVDS0VSX0NBTExC
QUNLX1NFVChUWVBFX05BTUUsIE5BTUUpICBcCit2b2lkIGV3a190ZXh0X2NoZWNrZXJfIyNOQU1F
IyNfY2Jfc2V0KFRZUEVfTkFNRSBjYikgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaWVudENhbGxiYWNrcygpLk5B
TUUgPSBjYjsgICAgICBcCiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCmluZGV4IGU3
NDgxMDYuLjQ2MmQzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a190ZXh0X2NoZWNrZXJfcHJpdmF0ZS5oCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsMjQgKzMxLDE2IEBACiAKICNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyLmgi
CiAKLS8qKgotICogQGJyaWVmIFN0cnVjdHVyZSBrZWVwcyBjbGllbnQncyBjYWxsYmFjayBmdW5j
dGlvbnMuCi0gKgotICogQGludGVybmFsCi0gKi8KLXN0cnVjdCBFd2tfVGV4dF9DaGVja2VyIHsK
LSAgICBFd2tfVGV4dF9DaGVja2VyX1VuaXF1ZV9TcGVsbF9Eb2N1bWVudF9UYWdfR2V0X0NiIHVu
aXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0OwotICAgIEV3a19UZXh0X0NoZWNrZXJfVW5pcXVl
X1NwZWxsX0RvY3VtZW50X1RhZ19DbG9zZV9DYiB1bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Ns
b3NlOwotICAgIEV3a19UZXh0X0NoZWNrZXJfU3RyaW5nX1NwZWxsaW5nX0NoZWNrX0NiIHN0cmlu
Z19zcGVsbGluZ19jaGVjazsKLSAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfR3Vlc3Nlc19HZXRf
Q2Igd29yZF9ndWVzc2VzX2dldDsKLSAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfTGVhcm5fQ2Ig
d29yZF9sZWFybjsKLSAgICBFd2tfVGV4dF9DaGVja2VyX1dvcmRfSWdub3JlX0NiIHdvcmRfaWdu
b3JlOwotfTsKLQotRXdrX1RleHRfQ2hlY2tlciogZXdrX3RleHRfY2hlY2tlcl9jYWxsYmFja3Nf
Z2V0KCk7Ci0KLS8vIE1ha2VzIGl0IHZpc2libGUgZm9yIFdUUi4KLUVBUEkgdm9pZCBld2tfdGV4
dF9jaGVja2VyX2NsaWVudF9hdHRhY2goKTsKK25hbWVzcGFjZSBFd2tfVGV4dF9DaGVja2VyIHsK
Kwordm9pZCBpbml0aWFsaXplKCk7CisKKy8vIEVuY2hhbnQgaGVscGVycy4KK1ZlY3RvcjxTdHJp
bmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK3ZvaWQgdXBkYXRlU3BlbGxD
aGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKK1ZlY3Rv
cjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKKworfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFNQRUxMQ0hFQ0spCiAjZW5kaWYgLy8gZXdrX3RleHRfY2hlY2tlcl9wcml2YXRl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViS2l0VGV4dENo
ZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJLaXRUZXh0Q2hlY2tl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZjM5YzQuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HCi0gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgotCi0jaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIldLQVBJQ2Fz
dC5oIgotI2luY2x1ZGUgIldLTXV0YWJsZUFycmF5LmgiCi0jaW5jbHVkZSAiV0tSZXRhaW5QdHIu
aCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKLSNp
bmNsdWRlICJld2tfc2V0dGluZ3MuaCIKLSNpbmNsdWRlICJld2tfdGV4dF9jaGVja2VyX3ByaXZh
dGUuaCIKLSNpbmNsdWRlIDxFaW5hLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBP
d25QdHI8V2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50PiB0ZXh0Q2hlY2tlckVuY2hhbnQgPSBX
ZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpOwotCi1zdGF0aWMgRXdrX1RleHRf
Q2hlY2tlciogZXdrVGV4dENoZWNrZXJDYWxsYmFja3MgPSBld2tfdGV4dF9jaGVja2VyX2NhbGxi
YWNrc19nZXQoKTsKLQotYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25z
dCB2b2lkKikKLXsKLSAgICByZXR1cm4gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZF9nZXQoKTsKLX0KLQotdm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKikKLXsKLSAgICBld2tfc2V0dGluZ3Nf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChlbmFibGVkKTsKLX0KLQotdWlu
dDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCop
Ci17Ci0gICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1l
bnRfdGFnX2dldCkKLSAgICAgICAgcmV0dXJuIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT51bmlx
dWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSk7Ci0K
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2
NF90IHRhZywgY29uc3Qgdm9pZCopCi17Ci0gICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tz
LT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQotICAgICAgICBld2tUZXh0Q2hlY2tl
ckNhbGxiYWNrcy0+dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZSh0YWcpOwotfQotCi12
b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQs
IGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3Ro
LCBjb25zdCB2b2lkKikKLXsKLSAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPnN0cmlu
Z19zcGVsbGluZ19jaGVjaykKLSAgICAgICAgZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPnN0cmlu
Z19zcGVsbGluZ19jaGVjayh0YWcsIHRvSW1wbCh0ZXh0KS0+c3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotICAgIGVsc2UKLSAg
ICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRl
eHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxsaW5nTG9jYXRpb24sICptaXNzcGVsbGluZ0xlbmd0aCk7
Ci19Ci0KLVdLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1Jl
ZiB3b3JkLCBjb25zdCB2b2lkKikKLXsKLSAgICBXS011dGFibGVBcnJheVJlZiBzdWdnZXN0aW9u
c0ZvcldvcmQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOwotCi0gICAgaWYgKGV3a1RleHRDaGVj
a2VyQ2FsbGJhY2tzLT53b3JkX2d1ZXNzZXNfZ2V0KSB7Ci0gICAgICAgIEVpbmFfTGlzdCogbGlz
dCA9IGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3JkX2d1ZXNzZXNfZ2V0KHRhZywgdG9JbXBs
KHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgdm9pZCogaXRlbTsKLQot
ICAgICAgICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7Ci0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4oaXRlbSkpKTsKLSAgICAgICAgICAgIFdLQXJy
YXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlvbi5nZXQoKSk7Ci0gICAg
ICAgICAgICBmcmVlKGl0ZW0pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVmVj
dG9yPFN0cmluZz4gZ3Vlc3NlcyA9IHRleHRDaGVja2VyRW5jaGFudC0+Z2V0R3Vlc3Nlc0Zvcldv
cmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZkd1ZXNz
ZXMgPSBndWVzc2VzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZkd1ZXNzZXM7ICsraSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ3Vlc3Nl
c1tpXS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShzdWdn
ZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHN1Z2dlc3Rpb25zRm9yV29yZDsKLX0KLQotdm9pZCBsZWFybldvcmQodWludDY0
X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKLXsKLSAgICBpZiAoZXdrVGV4
dENoZWNrZXJDYWxsYmFja3MtPndvcmRfbGVhcm4pCi0gICAgICAgIGV3a1RleHRDaGVja2VyQ2Fs
bGJhY2tzLT53b3JkX2xlYXJuKHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRDaGVja2VyRW5jaGFudC0+bGVhcm5Xb3JkKHRv
SW1wbCh3b3JkKS0+c3RyaW5nKCkpOwotfQotCi12b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFn
LCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKLXsKLSAgICBpZiAoZXdrVGV4dENoZWNr
ZXJDYWxsYmFja3MtPndvcmRfaWdub3JlKQotICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNr
cy0+d29yZF9pZ25vcmUodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotICAgIGVsc2UKLSAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5pZ25vcmVXb3JkKHRvSW1w
bCh3b3JkKS0+c3RyaW5nKCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVTcGVsbENo
ZWNraW5nTGFuZ3VhZ2VzKCkKLXsKLSAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LT5hdmFp
bGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci19Ci0KLXZvaWQgdXBkYXRlU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQotewotICAgIHRl
eHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhsYW5ndWFnZXMp
OwotfQotCi1WZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKLXsK
LSAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LT5sb2FkZWRTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFNQ
RUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYktp
dFRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYktpdFRleHRD
aGVja2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMWFlNmIuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HCi0gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViS2l0
VGV4dENoZWNrZXJfaAotI2RlZmluZSBXZWJLaXRUZXh0Q2hlY2tlcl9oCi0KLSNpZiBFTkFCTEUo
U1BFTExDSEVDSykKLQotI2luY2x1ZGUgIlRleHRDaGVja2VyRW5jaGFudC5oIgotI2luY2x1ZGUg
IldLQXJyYXkuaCIKLSNpbmNsdWRlICJXS1BhZ2UuaCIKLSNpbmNsdWRlICJXS1N0cmluZy5oIgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8gVGhlIGZ1bmN0aW9ucyBtYWlubHkgY2hvb3NlIGJl
dHdlZW4gY2xpZW50J3MgaW1wbGVtZW50YXRpb24gb2Ygc3BlbGxpbmcgYW5kIHRoZSBXZWJLaXQg
b25lLgotCi0vLyBDYWxsYmFja3MgcmVxdWlyZWQgYnkgV0tUZXh0Q2hlY2tlci4KLWJvb2wgaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci12
b2lkIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOwotCi11aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdL
UGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci12b2lkIGNsb3NlU3BlbGxEb2N1bWVu
dFdpdGhUYWcodWludDY0X3QgdGFnLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLQotdm9pZCBj
aGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQz
Ml90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7Ci1XS0FycmF5UmVmIGd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90
IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci12b2lkIGxl
YXJuV29yZCh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOwotdm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0KLS8vIEVuY2hhbnQncyBoZWxwZXIuCi1WZWN0b3I8
U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci12b2lkIHVwZGF0ZVNw
ZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdlcyk7Ci1W
ZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCi0jZW5kaWYgLy8g
V2ViS2l0VGV4dENoZWNrZXJfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>