<?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>45716</bug_id>
          
          <creation_ts>2010-09-13 15:56:47 -0700</creation_ts>
          <short_desc>[BREWMP] Port unicode</short_desc>
          <delta_ts>2010-10-20 02:52:24 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</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>
          
          <blocked>33564</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Kwang Yul Seo">skyul</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>paroga</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>278546</commentid>
    <comment_count>0</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-13 15:56:47 -0700</bug_when>
    <thetext>Port unicode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278552</commentid>
    <comment_count>1</comment_count>
      <attachid>67485</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-13 16:07:12 -0700</bug_when>
    <thetext>Created attachment 67485
Patch

Brew MP port uses only the subset of ICU library to reduce the binary size. Follow the WinCE&apos;s implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278553</commentid>
    <comment_count>2</comment_count>
      <attachid>67486</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-13 16:08:17 -0700</bug_when>
    <thetext>Created attachment 67486
Patch

Oops. Uploaded the wrong patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278569</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-13 16:42:50 -0700</bug_when>
    <thetext>Attachment 67486 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/wtf/unicode/brew/UnicodeBrew.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 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>278577</commentid>
    <comment_count>4</comment_count>
      <attachid>67490</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-13 16:55:39 -0700</bug_when>
    <thetext>Created attachment 67490
Patch

Fix style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280937</commentid>
    <comment_count>5</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-17 15:40:49 -0700</bug_when>
    <thetext>CC&apos;ing Eric Seidel who reviewed bug 27305. This patch follows the WinCE approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293829</commentid>
    <comment_count>6</comment_count>
      <attachid>67490</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-10-13 17:11:34 -0700</bug_when>
    <thetext>Comment on attachment 67490
Patch

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

r- because of style errors.

&gt; JavaScriptCore/wtf/unicode/brew/UnicodeBrew.cpp:84
&gt; +    int remainingCharacters = 0;

remainingCharacters should be declared just before it is used.

&gt; JavaScriptCore/wtf/unicode/brew/UnicodeBrew.cpp:85
&gt; +    if (sourceLength &lt;= resultLength)

You should enclose this block with {} because the block contains two physical lines.

&gt; JavaScriptCore/wtf/unicode/brew/UnicodeBrew.cpp:88
&gt; +    else

ditto.

&gt; JavaScriptCore/wtf/unicode/brew/UnicodeBrew.cpp:101
&gt; +int toUpper(UChar* result, int resultLength, const UChar* source, int sourceLength, bool* isError)

Same comments as toLower().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293850</commentid>
    <comment_count>7</comment_count>
      <attachid>70689</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-10-13 17:37:52 -0700</bug_when>
    <thetext>Created attachment 70689
Patch

Fix style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293853</commentid>
    <comment_count>8</comment_count>
      <attachid>70690</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-10-13 17:39:02 -0700</bug_when>
    <thetext>Created attachment 70690
Patch

Oops. Remove duplicated ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293859</commentid>
    <comment_count>9</comment_count>
      <attachid>70690</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-10-13 17:44:55 -0700</bug_when>
    <thetext>Comment on attachment 70690
Patch

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

&gt; JavaScriptCore/wtf/unicode/brew/UnicodeBrew.cpp:94
&gt; +        remainingCharacters += sourceEnd - sourceIterator;

+= looks curious here.
  int remainingCharacters = sourceIterator &lt; sourceEnd ? sourceEnd - sourceIterator : 0;
would be better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293876</commentid>
    <comment_count>10</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-10-13 18:02:36 -0700</bug_when>
    <thetext>Manually committed r69723: http://trac.webkit.org/changeset/69723</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293879</commentid>
    <comment_count>11</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-10-13 18:03:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294745</commentid>
    <comment_count>12</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-10-15 07:23:29 -0700</bug_when>
    <thetext>Do you think we can share the implementation between BREWMP and WinCE?
Do you have an example of &quot;UnicodeFromICU.h&quot;? Is it a &quot;copy&quot; of ce_unicode.h|cpp?
(I&apos;m not very happy with the current WinCE implementation, maybe we can do it better)

IMHO we can share the implementaions as a &quot;UnicodeMinimalCopyOfICU&quot;. I don&apos;t think that there&apos;s something BREW specific in this files.

PS: Use &quot;svn cp&quot; if you copy UnicodeBrew from UnicodeWinCE. This helps when looking at the history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296561</commentid>
    <comment_count>13</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-10-19 17:51:27 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Do you think we can share the implementation between BREWMP and WinCE?

Yes, I just copied the implementation of WinCE only with minor style changes.

&gt; Do you have an example of &quot;UnicodeFromICU.h&quot;? Is it a &quot;copy&quot; of ce_unicode.h|cpp?
&gt; (I&apos;m not very happy with the current WinCE implementation, maybe we can do it better)

Yes, it is just a copy of ce_unicode.h|cpp with slight changes.

&gt; 
&gt; IMHO we can share the implementaions as a &quot;UnicodeMinimalCopyOfICU&quot;. I don&apos;t think that there&apos;s something BREW specific in this files.
&gt; 

I agree. There is no Brew MP specific code in these files.

&gt; PS: Use &quot;svn cp&quot; if you copy UnicodeBrew from UnicodeWinCE. This helps when looking at the history.

Thanks for the tip.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296717</commentid>
    <comment_count>14</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-10-20 02:52:24 -0700</bug_when>
    <thetext>Created bug 47977 for merging the unicode implementations.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67485</attachid>
            <date>2010-09-13 16:07:12 -0700</date>
            <delta_ts>2010-09-13 16:08:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>icu.patch</filename>
            <type>text/plain</type>
            <size>10508</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3NDEzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDktMTMgIEt3YW5nIFl1
bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTaGFyZSBVbmljb2RlTWFjcm9zRnJvbUlDVS5oCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTcxMAorCisgICAg
ICAgIGdsaWIsIHF0NCBhbmQgd2luY2UgdXNlIHRoZSBzYW1lIG1hY3JvcyBmcm9tIElDVS4KKyAg
ICAgICAgUmVtb3ZlIHRoZSBjb2RlIGR1cGxpY2F0aW9uIGFuZCB1c2UgdGhlIHNhbWUgaGVhZGVy
IGZpbGUuCisKKyAgICAgICAgKiB3dGYvdW5pY29kZS9Vbmljb2RlTWFjcm9zRnJvbUlDVS5oOiBD
b3BpZWQgZnJvbSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVNYWNyb3NG
cm9tSUNVLmguCisgICAgICAgICogd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlTWFjcm9zRnJvbUlD
VS5oOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91bmljb2RlL3F0NC9Vbmljb2RlUXQ0Lmg6Cisg
ICAgICAgICogd3RmL3VuaWNvZGUvd2luY2UvVW5pY29kZVdpbmNlLmg6CisKIDIwMTAtMDktMTMg
IERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXZpZCBMZXZpbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGVN
YWNyb3NGcm9tSUNVLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUv
VW5pY29kZU1hY3Jvc0Zyb21JQ1UuaAkocmV2aXNpb24gNjc0MDQpCShmcm9tIEphdmFTY3JpcHRD
b3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaDo2NzQwNCkKKysrIEph
dmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgR2Vvcmdl
IFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5
IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4
IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNv
bT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgVW5pY29kZU1hY3Jvc0Zyb21JQ1VfaAorI2RlZmlu
ZSBVbmljb2RlTWFjcm9zRnJvbUlDVV9oCisKKy8vIHNvbWUgZGVmaW5lcyBmcm9tIElDVQorCisj
ZGVmaW5lIFVfSVNfQk1QKGMpICgoVUNoYXIzMikoYyk8PTB4ZmZmZikKKyNkZWZpbmUgVTE2X0lT
X0xFQUQoYykgKCgoYykmMHhmZmZmZmMwMCk9PTB4ZDgwMCkKKyNkZWZpbmUgVTE2X0lTX1RSQUlM
KGMpICgoKGMpJjB4ZmZmZmZjMDApPT0weGRjMDApCisjZGVmaW5lIFUxNl9TVVJST0dBVEVfT0ZG
U0VUICgoMHhkODAwPDwxMFVMKSsweGRjMDAtMHgxMDAwMCkKKyNkZWZpbmUgVTE2X0dFVF9TVVBQ
TEVNRU5UQVJZKGxlYWQsIHRyYWlsKSBcCisgICAgKCgoVUNoYXIzMikobGVhZCk8PDEwVUwpKyhV
Q2hhcjMyKSh0cmFpbCktVTE2X1NVUlJPR0FURV9PRkZTRVQpCisKKyNkZWZpbmUgVTE2X0xFQUQo
c3VwcGxlbWVudGFyeSkgKFVDaGFyKSgoKHN1cHBsZW1lbnRhcnkpPj4xMCkrMHhkN2MwKQorI2Rl
ZmluZSBVMTZfVFJBSUwoc3VwcGxlbWVudGFyeSkgKFVDaGFyKSgoKHN1cHBsZW1lbnRhcnkpJjB4
M2ZmKXwweGRjMDApCisjZGVmaW5lIFUxNl9MRU5HVEgoYykgKCh1aW50MzJfdCkoYykgPD0gMHhm
ZmZmID8gMSA6IDIpCisKKyNkZWZpbmUgVV9JU19TVVJST0dBVEUoYykgKCgoYykmMHhmZmZmZjgw
MCk9PTB4ZDgwMCkKKyNkZWZpbmUgVTE2X0lTX1NJTkdMRShjKSAhVV9JU19TVVJST0dBVEUoYykK
KyNkZWZpbmUgVTE2X0lTX1NVUlJPR0FURShjKSBVX0lTX1NVUlJPR0FURShjKQorI2RlZmluZSBV
MTZfSVNfU1VSUk9HQVRFX0xFQUQoYykgKCgoYykmMHg0MDApPT0wKQorCisjZGVmaW5lIFUxNl9Q
UkVWKHMsIHN0YXJ0LCBpLCBjKSB7IFwKKyAgICAoYyk9KHMpWy0tKGkpXTsgXAorICAgIGlmKFUx
Nl9JU19UUkFJTChjKSkgeyBcCisgICAgICAgIHVpbnQxNl90IF9fYzI7IFwKKyAgICAgICAgaWYo
KGkpPihzdGFydCkgJiYgVTE2X0lTX0xFQUQoX19jMj0ocylbKGkpLTFdKSkgeyBcCisgICAgICAg
ICAgICAtLShpKTsgXAorICAgICAgICAgICAgKGMpPVUxNl9HRVRfU1VQUExFTUVOVEFSWShfX2My
LCAoYykpOyBcCisgICAgICAgIH0gXAorICAgIH0gXAorfQorCisjZGVmaW5lIFUxNl9ORVhUKHMs
IGksIGxlbmd0aCwgYykgeyBcCisgICAgKGMpPShzKVsoaSkrK107IFwKKyAgICBpZihVMTZfSVNf
TEVBRChjKSkgeyBcCisgICAgICAgIHVpbnQxNl90IF9fYzI7IFwKKyAgICAgICAgaWYoKGkpPChs
ZW5ndGgpICYmIFUxNl9JU19UUkFJTChfX2MyPShzKVsoaSldKSkgeyBcCisgICAgICAgICAgICAr
KyhpKTsgXAorICAgICAgICAgICAgKGMpPVUxNl9HRVRfU1VQUExFTUVOVEFSWSgoYyksIF9fYzIp
OyBcCisgICAgICAgIH0gXAorICAgIH0gXAorfQorCisjZGVmaW5lIFVfTUFTSyh4KSAoKHVpbnQz
Ml90KTE8PCh4KSkKKworI2VuZGlmCisKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2Rl
L2dsaWIvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmgJKHJldmlzaW9uIDY3NDA0
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlTWFjcm9zRnJvbUlD
VS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+Ci0gKiAgQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgotICogIENvcHly
aWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nl
c3MtY29tcGFueS5jb20+Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFVuaWNvZGVNYWNyb3NGcm9t
SUNVX2gKLSNkZWZpbmUgVW5pY29kZU1hY3Jvc0Zyb21JQ1VfaAotCi0vLyBzb21lIGRlZmluZXMg
ZnJvbSBJQ1UKLQotI2RlZmluZSBVX0lTX0JNUChjKSAoKFVDaGFyMzIpKGMpPD0weGZmZmYpCi0j
ZGVmaW5lIFUxNl9JU19MRUFEKGMpICgoKGMpJjB4ZmZmZmZjMDApPT0weGQ4MDApCi0jZGVmaW5l
IFUxNl9JU19UUkFJTChjKSAoKChjKSYweGZmZmZmYzAwKT09MHhkYzAwKQotI2RlZmluZSBVMTZf
U1VSUk9HQVRFX09GRlNFVCAoKDB4ZDgwMDw8MTBVTCkrMHhkYzAwLTB4MTAwMDApCi0jZGVmaW5l
IFUxNl9HRVRfU1VQUExFTUVOVEFSWShsZWFkLCB0cmFpbCkgXAotICAgICgoKFVDaGFyMzIpKGxl
YWQpPDwxMFVMKSsoVUNoYXIzMikodHJhaWwpLVUxNl9TVVJST0dBVEVfT0ZGU0VUKQotCi0jZGVm
aW5lIFUxNl9MRUFEKHN1cHBsZW1lbnRhcnkpIChVQ2hhcikoKChzdXBwbGVtZW50YXJ5KT4+MTAp
KzB4ZDdjMCkKLSNkZWZpbmUgVTE2X1RSQUlMKHN1cHBsZW1lbnRhcnkpIChVQ2hhcikoKChzdXBw
bGVtZW50YXJ5KSYweDNmZil8MHhkYzAwKQotI2RlZmluZSBVMTZfTEVOR1RIKGMpICgodWludDMy
X3QpKGMpIDw9IDB4ZmZmZiA/IDEgOiAyKQotCi0jZGVmaW5lIFVfSVNfU1VSUk9HQVRFKGMpICgo
KGMpJjB4ZmZmZmY4MDApPT0weGQ4MDApCi0jZGVmaW5lIFUxNl9JU19TSU5HTEUoYykgIVVfSVNf
U1VSUk9HQVRFKGMpCi0jZGVmaW5lIFUxNl9JU19TVVJST0dBVEUoYykgVV9JU19TVVJST0dBVEUo
YykKLSNkZWZpbmUgVTE2X0lTX1NVUlJPR0FURV9MRUFEKGMpICgoKGMpJjB4NDAwKT09MCkKLQot
I2RlZmluZSBVMTZfUFJFVihzLCBzdGFydCwgaSwgYykgeyBcCi0gICAgKGMpPShzKVstLShpKV07
IFwKLSAgICBpZihVMTZfSVNfVFJBSUwoYykpIHsgXAotICAgICAgICB1aW50MTZfdCBfX2MyOyBc
Ci0gICAgICAgIGlmKChpKT4oc3RhcnQpICYmIFUxNl9JU19MRUFEKF9fYzI9KHMpWyhpKS0xXSkp
IHsgXAotICAgICAgICAgICAgLS0oaSk7IFwKLSAgICAgICAgICAgIChjKT1VMTZfR0VUX1NVUFBM
RU1FTlRBUlkoX19jMiwgKGMpKTsgXAotICAgICAgICB9IFwKLSAgICB9IFwKLX0KLQotI2RlZmlu
ZSBVMTZfTkVYVChzLCBpLCBsZW5ndGgsIGMpIHsgXAotICAgIChjKT0ocylbKGkpKytdOyBcCi0g
ICAgaWYoVTE2X0lTX0xFQUQoYykpIHsgXAotICAgICAgICB1aW50MTZfdCBfX2MyOyBcCi0gICAg
ICAgIGlmKChpKTwobGVuZ3RoKSAmJiBVMTZfSVNfVFJBSUwoX19jMj0ocylbKGkpXSkpIHsgXAot
ICAgICAgICAgICAgKysoaSk7IFwKLSAgICAgICAgICAgIChjKT1VMTZfR0VUX1NVUFBMRU1FTlRB
UlkoKGMpLCBfX2MyKTsgXAotICAgICAgICB9IFwKLSAgICB9IFwKLX0KLQotI2RlZmluZSBVX01B
U0soeCkgKCh1aW50MzJfdCkxPDwoeCkpCi0KLSNlbmRpZgotCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS93dGYvdW5pY29kZS9xdDQvVW5pY29kZVF0NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3d0Zi91bmljb2RlL3F0NC9Vbmljb2RlUXQ0LmgJKHJldmlzaW9uIDY3NDA0KQorKysgSmF2
YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvcXQ0L1VuaWNvZGVRdDQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNiArMjMsOCBAQAogI2lmbmRlZiBXVEZfVU5JQ09ERV9RVDRfSAogI2RlZmluZSBXVEZf
VU5JQ09ERV9RVDRfSAogCisjaW5jbHVkZSAiVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaCIKKwogI2lu
Y2x1ZGUgPFFDaGFyPgogI2luY2x1ZGUgPFFTdHJpbmc+CiAKQEAgLTYzLDQ5ICs2NSw2IEBAIHR5
cGVkZWYgdWludDE2X3QgVUNoYXI7CiAjZW5kaWYKIHR5cGVkZWYgdWludDMyX3QgVUNoYXIzMjsK
IAotLy8gc29tZSBkZWZpbmVzIGZyb20gSUNVCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIFVu
aWNvZGVNYWNyb3NGcm9tSUNVLmggaW5zdGVhZCEKLQotI2RlZmluZSBVX0lTX0JNUChjKSAoKFVD
aGFyMzIpKGMpPD0weGZmZmYpCi0jZGVmaW5lIFUxNl9JU19MRUFEKGMpICgoKGMpJjB4ZmZmZmZj
MDApPT0weGQ4MDApCi0jZGVmaW5lIFUxNl9JU19UUkFJTChjKSAoKChjKSYweGZmZmZmYzAwKT09
MHhkYzAwKQotI2RlZmluZSBVMTZfU1VSUk9HQVRFX09GRlNFVCAoKDB4ZDgwMDw8MTBVTCkrMHhk
YzAwLTB4MTAwMDApCi0jZGVmaW5lIFUxNl9HRVRfU1VQUExFTUVOVEFSWShsZWFkLCB0cmFpbCkg
XAotICAgICgoKFVDaGFyMzIpKGxlYWQpPDwxMFVMKSsoVUNoYXIzMikodHJhaWwpLVUxNl9TVVJS
T0dBVEVfT0ZGU0VUKQotCi0jZGVmaW5lIFUxNl9MRUFEKHN1cHBsZW1lbnRhcnkpIChVQ2hhciko
KChzdXBwbGVtZW50YXJ5KT4+MTApKzB4ZDdjMCkKLSNkZWZpbmUgVTE2X1RSQUlMKHN1cHBsZW1l
bnRhcnkpIChVQ2hhcikoKChzdXBwbGVtZW50YXJ5KSYweDNmZil8MHhkYzAwKQotI2RlZmluZSBV
MTZfTEVOR1RIKGMpICgodWludDMyX3QpKGMpIDw9IDB4ZmZmZiA/IDEgOiAyKQotCi0jZGVmaW5l
IFVfSVNfU1VSUk9HQVRFKGMpICgoKGMpJjB4ZmZmZmY4MDApPT0weGQ4MDApCi0jZGVmaW5lIFUx
Nl9JU19TSU5HTEUoYykgIVVfSVNfU1VSUk9HQVRFKGMpCi0jZGVmaW5lIFUxNl9JU19TVVJST0dB
VEUoYykgVV9JU19TVVJST0dBVEUoYykKLSNkZWZpbmUgVTE2X0lTX1NVUlJPR0FURV9MRUFEKGMp
ICgoKGMpJjB4NDAwKT09MCkKLQotI2RlZmluZSBVMTZfTkVYVChzLCBpLCBsZW5ndGgsIGMpIHsg
XAotICAgIChjKT0ocylbKGkpKytdOyBcCi0gICAgaWYoVTE2X0lTX0xFQUQoYykpIHsgXAotICAg
ICAgICB1aW50MTZfdCBfX2MyOyBcCi0gICAgICAgIGlmKChpKTwobGVuZ3RoKSAmJiBVMTZfSVNf
VFJBSUwoX19jMj0ocylbKGkpXSkpIHsgXAotICAgICAgICAgICAgKysoaSk7IFwKLSAgICAgICAg
ICAgIChjKT1VMTZfR0VUX1NVUFBMRU1FTlRBUlkoKGMpLCBfX2MyKTsgXAotICAgICAgICB9IFwK
LSAgICB9IFwKLX0KLQotI2RlZmluZSBVMTZfUFJFVihzLCBzdGFydCwgaSwgYykgeyBcCi0gICAg
KGMpPShzKVstLShpKV07IFwKLSAgICBpZihVMTZfSVNfVFJBSUwoYykpIHsgXAotICAgICAgICB1
aW50MTZfdCBfX2MyOyBcCi0gICAgICAgIGlmKChpKT4oc3RhcnQpICYmIFUxNl9JU19MRUFEKF9f
YzI9KHMpWyhpKS0xXSkpIHsgXAotICAgICAgICAgICAgLS0oaSk7IFwKLSAgICAgICAgICAgIChj
KT1VMTZfR0VUX1NVUFBMRU1FTlRBUlkoX19jMiwgKGMpKTsgXAotICAgICAgICB9IFwKLSAgICB9
IFwKLX0KLQotI2RlZmluZSBVX01BU0soeCkgKCh1aW50MzJfdCkxPDwoeCkpCi0KIG5hbWVzcGFj
ZSBXVEYgewogbmFtZXNwYWNlIFVuaWNvZGUgewogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYv
dW5pY29kZS93aW5jZS9Vbmljb2RlV2luY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvdW5pY29kZS93aW5jZS9Vbmljb2RlV2luY2UuaAkocmV2aXNpb24gNjc0MDQpCisrKyBK
YXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS93aW5jZS9Vbmljb2RlV2luY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNTIgKzI0LDEyIEBACiAjaWZuZGVmIFVOSUNPREVfV0lOQ0VfSAogI2RlZmlu
ZSBVTklDT0RFX1dJTkNFX0gKIAorI2luY2x1ZGUgIlVuaWNvZGVNYWNyb3NGcm9tSUNVLmgiCisK
ICNpbmNsdWRlICJjZV91bmljb2RlLmgiCiAKICNkZWZpbmUgVE9fTUFTSyh4KSAoMSA8PCAoeCkp
CiAKLS8vIHNvbWUgZGVmaW5lcyBmcm9tIElDVSBuZWVkZWQgb25lIG9yIHR3byBwbGFjZXMKLS8v
IEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaCBpbnN0ZWFkIQot
Ci0jZGVmaW5lIFVfSVNfQk1QKGMpICgoVUNoYXIzMikoYyk8PTB4ZmZmZikKLSNkZWZpbmUgVTE2
X0lTX0xFQUQoYykgKCgoYykgJiAweGZmZmZmYzAwKSA9PSAweGQ4MDApCi0jZGVmaW5lIFUxNl9J
U19UUkFJTChjKSAoKChjKSAmIDB4ZmZmZmZjMDApID09IDB4ZGMwMCkKLSNkZWZpbmUgVTE2X1NV
UlJPR0FURV9PRkZTRVQgKCgweGQ4MDAgPDwgMTBVTCkgKyAweGRjMDAgLSAweDEwMDAwKQotI2Rl
ZmluZSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpIFwKLSAgICAoKChVQ2hhcjMy
KShsZWFkKSA8PCAxMFVMKSArIChVQ2hhcjMyKSh0cmFpbCkgLSBVMTZfU1VSUk9HQVRFX09GRlNF
VCkKLQotI2RlZmluZSBVMTZfTEVBRChzdXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVu
dGFyeSkgPj4gMTApICsgMHhkN2MwKQotI2RlZmluZSBVMTZfVFJBSUwoc3VwcGxlbWVudGFyeSkg
KFVDaGFyKSgoKHN1cHBsZW1lbnRhcnkpICYgMHgzZmYpIHwgMHhkYzAwKQotI2RlZmluZSBVMTZf
TEVOR1RIKGMpICgodWludDMyX3QpKGMpIDw9IDB4ZmZmZiA/IDEgOiAyKQotCi0jZGVmaW5lIFVf
SVNfU1VSUk9HQVRFKGMpICgoKGMpICYgMHhmZmZmZjgwMCkgPT0gMHhkODAwKQotI2RlZmluZSBV
MTZfSVNfU1VSUk9HQVRFKGMpIFVfSVNfU1VSUk9HQVRFKGMpCi0jZGVmaW5lIFUxNl9JU19TVVJS
T0dBVEVfTEVBRChjKSAoKChjKSAmIDB4NDAwKSA9PSAwKQotCi0jZGVmaW5lIFUxNl9ORVhUKHMs
IGksIGxlbmd0aCwgYykgeyBcCi0gICAgKGMpPShzKVsoaSkrK107IFwKLSAgICBpZiAoVTE2X0lT
X0xFQUQoYykpIHsgXAotICAgICAgICB1aW50MTZfdCBfX2MyOyBcCi0gICAgICAgIGlmICgoaSkg
PCAobGVuZ3RoKSAmJiBVMTZfSVNfVFJBSUwoX19jMiA9IChzKVsoaSldKSkgeyBcCi0gICAgICAg
ICAgICArKyhpKTsgXAotICAgICAgICAgICAgKGMpID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKChj
KSwgX19jMik7IFwKLSAgICAgICAgfSBcCi0gICAgfSBcCi19Ci0KLSNkZWZpbmUgVTE2X1BSRVYo
cywgc3RhcnQsIGksIGMpIHsgXAotICAgIChjKT0ocylbLS0oaSldOyBcCi0gICAgaWYgKFUxNl9J
U19UUkFJTChjKSkgeyBcCi0gICAgICAgIHVpbnQxNl90IF9fYzI7IFwKLSAgICAgICAgaWYgKChp
KSA+IChzdGFydCkgJiYgVTE2X0lTX0xFQUQoX19jMiA9IChzKVsoaSkgLSAxXSkpIHsgXAotICAg
ICAgICAgICAgLS0oaSk7IFwKLSAgICAgICAgICAgIChjKSA9IFUxNl9HRVRfU1VQUExFTUVOVEFS
WShfX2MyLCAoYykpOyBcCi0gICAgICAgIH0gXAotICAgIH0gXAotfQotCi0jZGVmaW5lIFUxNl9J
U19TSU5HTEUoYykgIVVfSVNfU1VSUk9HQVRFKGMpCi0KIG5hbWVzcGFjZSBXVEYgewogCiAgICAg
bmFtZXNwYWNlIFVuaWNvZGUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67486</attachid>
            <date>2010-09-13 16:08:17 -0700</date>
            <delta_ts>2010-09-13 16:55:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>unicode.patch</filename>
            <type>text/plain</type>
            <size>14121</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3NDE4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMDktMTMgIEt3YW5nIFl1
bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbQlJFV01QXSBQb3J0IHVuaWNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE2CisKKyAgICAgICAgQnJl
dyBNUCBwb3J0IHVzZXMgb25seSB0aGUgc3Vic2V0IG9mIElDVSBsaWJyYXJ5IHRvIHJlZHVjZSB0
aGUgYmluYXJ5IHNpemUuCisgICAgICAgIEZvbGxvdyB0aGUgV2luQ0UncyBpbXBsZW1lbnRhdGlv
bi4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi91bmljb2RlL1Vu
aWNvZGUuaDoKKyAgICAgICAgKiB3dGYvdW5pY29kZS9icmV3L1VuaWNvZGVCcmV3LmNwcDogQWRk
ZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvTG93ZXIpOgorICAgICAgICAoV1RGOjpVbmlj
b2RlOjp0b1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Zm9sZENhc2UpOgorICAgICAg
ICAoV1RGOjpVbmljb2RlOjppc1ByaW50YWJsZUNoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2Rl
Ojppc1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNMb3dlcik6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmlzRGlnaXQpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1B1bmN0KToK
KyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNBbHBoYW51bWVyaWMpOgorICAgICAgICAoV1RGOjpV
bmljb2RlOjp0b1RpdGxlQ2FzZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbik6
CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNhdGVnb3J5KToKKyAgICAgICAgKFdURjo6VW5pY29k
ZTo6ZGVjb21wb3NpdGlvblR5cGUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpjb21iaW5pbmdD
bGFzcyk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6Om1pcnJvcmVkQ2hhcik6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmRpZ2l0VmFsdWUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1NwYWNl
KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNMZXR0ZXIpOgorICAgICAgICAqIHd0Zi91bmlj
b2RlL2JyZXcvVW5pY29kZUJyZXcuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6Omlz
QXJhYmljQ2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjpoYXNMaW5lQnJlYWtpbmdQcm9wZXJ0eUNvbXBsZXhDb250
ZXh0KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aGFzTGluZUJyZWFraW5nUHJvcGVydHlDb21w
bGV4Q29udGV4dE9ySWRlb2dyYXBoaWMpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp1bWVtY2Fz
ZWNtcCk6CisKIDIwMTAtMDktMTMgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oCShyZXZpc2lvbiA2NzQwNCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NzQsNiArNTc0LDggQEAKICNkZWZpbmUgV1RGX1VTRV9RVDRfVU5J
Q09ERSAxCiAjZWxpZiBPUyhXSU5DRSkKICNkZWZpbmUgV1RGX1VTRV9XSU5DRV9VTklDT0RFIDEK
KyNlbGlmIFBMQVRGT1JNKEJSRVdNUCkKKyNkZWZpbmUgV1RGX1VTRV9CUkVXTVBfVU5JQ09ERSAx
CiAjZWxpZiBQTEFURk9STShHVEspCiAvKiBUaGUgR1RLKyBVbmljb2RlIGJhY2tlbmQgaXMgY29u
ZmlndXJhYmxlICovCiAjZWxzZQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5p
Y29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUu
aAkocmV2aXNpb24gNjc0MDQpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9nbGliL1VuaWNvZGVHTGliLmg+CiAjZWxpZiBVU0UoV0lOQ0VfVU5JQ09ERSkKICNpbmNsdWRl
IDx3dGYvdW5pY29kZS93aW5jZS9Vbmljb2RlV2luY2UuaD4KKyNlbGlmIFVTRShCUkVXTVBfVU5J
Q09ERSkKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9icmV3L1VuaWNvZGVCcmV3Lmg+CiAjZWxzZQog
I2Vycm9yICJVbmtub3duIFVuaWNvZGUgaW1wbGVtZW50YXRpb24iCiAjZW5kaWYKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuY3BwCShyZXZp
c2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvYnJldy9Vbmljb2RlQnJldy5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChD
KSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIENv
bXBhbnkgMTAwLCBJbmMuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJVbmljb2RlQnJldy5oIgorCisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUu
aD4KKworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgVW5pY29kZSB7CisKK1VDaGFyIHRvTG93
ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gdG93bG93ZXIoYyk7Cit9CisKK1VDaGFyIHRvVXBw
ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gdG93dXBwZXIoYyk7Cit9CisKK1VDaGFyIGZvbGRD
YXNlKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIHRvd2xvd2VyKGMpOworfQorCitib29sIGlzUHJp
bnRhYmxlQ2hhcihVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd3ByaW50KGMpOworfQorCiti
b29sIGlzVXBwZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gISFpc3d1cHBlcihjKTsKK30KKwor
Ym9vbCBpc0xvd2VyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuICEhaXN3bG93ZXIoYyk7Cit9CisK
K2Jvb2wgaXNEaWdpdChVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd2RpZ2l0KGMpOworfQor
Citib29sIGlzUHVuY3QoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gISFpc3dwdW5jdChjKTsKK30K
KworYm9vbCBpc0FscGhhbnVtZXJpYyhVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd2FsbnVt
KGMpOworfQorCitpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBj
b25zdCBVQ2hhciogc291cmNlLCBpbnQgc291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKQorewor
ICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VJdGVyYXRvciA9IHNvdXJjZTsKKyAgICBjb25zdCBVQ2hh
ciogc291cmNlRW5kID0gc291cmNlICsgc291cmNlTGVuZ3RoOworICAgIFVDaGFyKiByZXN1bHRJ
dGVyYXRvciA9IHJlc3VsdDsKKyAgICBVQ2hhciogcmVzdWx0RW5kID0gcmVzdWx0ICsgcmVzdWx0
TGVuZ3RoOworCisgICAgaW50IHJlbWFpbmluZ0NoYXJhY3RlcnMgPSAwOworICAgIGlmIChzb3Vy
Y2VMZW5ndGggPD0gcmVzdWx0TGVuZ3RoKQorICAgICAgICB3aGlsZSAoc291cmNlSXRlcmF0b3Ig
PCBzb3VyY2VFbmQpCisgICAgICAgICAgICAqcmVzdWx0SXRlcmF0b3IrKyA9IHRvd2xvd2VyKCpz
b3VyY2VJdGVyYXRvcisrKTsKKyAgICBlbHNlCisgICAgICAgIHdoaWxlIChyZXN1bHRJdGVyYXRv
ciA8IHJlc3VsdEVuZCkKKyAgICAgICAgICAgICpyZXN1bHRJdGVyYXRvcisrID0gdG93bG93ZXIo
KnNvdXJjZUl0ZXJhdG9yKyspOworCisgICAgaWYgKHNvdXJjZUl0ZXJhdG9yIDwgc291cmNlRW5k
KQorICAgICAgICByZW1haW5pbmdDaGFyYWN0ZXJzICs9IHNvdXJjZUVuZCAtIHNvdXJjZUl0ZXJh
dG9yOworICAgICppc0Vycm9yID0gISFyZW1haW5pbmdDaGFyYWN0ZXJzOworICAgIGlmIChyZXN1
bHRJdGVyYXRvciA8IHJlc3VsdEVuZCkKKyAgICAgICAgKnJlc3VsdEl0ZXJhdG9yID0gMDsKKwor
ICAgIHJldHVybiAocmVzdWx0SXRlcmF0b3IgLSByZXN1bHQpICsgcmVtYWluaW5nQ2hhcmFjdGVy
czsKK30KKworaW50IHRvVXBwZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29u
c3QgVUNoYXIqIHNvdXJjZSwgaW50IHNvdXJjZUxlbmd0aCwgYm9vbCogaXNFcnJvcikKK3sKKyAg
ICBjb25zdCBVQ2hhciogc291cmNlSXRlcmF0b3IgPSBzb3VyY2U7CisgICAgY29uc3QgVUNoYXIq
IHNvdXJjZUVuZCA9IHNvdXJjZSArIHNvdXJjZUxlbmd0aDsKKyAgICBVQ2hhciogcmVzdWx0SXRl
cmF0b3IgPSByZXN1bHQ7CisgICAgVUNoYXIqIHJlc3VsdEVuZCA9IHJlc3VsdCArIHJlc3VsdExl
bmd0aDsKKworICAgIGludCByZW1haW5pbmdDaGFyYWN0ZXJzID0gMDsKKyAgICBpZiAoc291cmNl
TGVuZ3RoIDw9IHJlc3VsdExlbmd0aCkKKyAgICAgICAgd2hpbGUgKHNvdXJjZUl0ZXJhdG9yIDwg
c291cmNlRW5kKQorICAgICAgICAgICAgKnJlc3VsdEl0ZXJhdG9yKysgPSB0b3d1cHBlcigqc291
cmNlSXRlcmF0b3IrKyk7CisgICAgZWxzZQorICAgICAgICB3aGlsZSAocmVzdWx0SXRlcmF0b3Ig
PCByZXN1bHRFbmQpCisgICAgICAgICAgICAqcmVzdWx0SXRlcmF0b3IrKyA9IHRvd3VwcGVyKCpz
b3VyY2VJdGVyYXRvcisrKTsKKworICAgIGlmIChzb3VyY2VJdGVyYXRvciA8IHNvdXJjZUVuZCkK
KyAgICAgICAgcmVtYWluaW5nQ2hhcmFjdGVycyArPSBzb3VyY2VFbmQgLSBzb3VyY2VJdGVyYXRv
cjsKKyAgICAqaXNFcnJvciA9ICEhcmVtYWluaW5nQ2hhcmFjdGVyczsKKyAgICBpZiAocmVzdWx0
SXRlcmF0b3IgPCByZXN1bHRFbmQpCisgICAgICAgICpyZXN1bHRJdGVyYXRvciA9IDA7CisKKyAg
ICByZXR1cm4gKHJlc3VsdEl0ZXJhdG9yIC0gcmVzdWx0KSArIHJlbWFpbmluZ0NoYXJhY3RlcnM7
Cit9CisKK2ludCBmb2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25z
dCBVQ2hhciogc291cmNlLCBpbnQgc291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKQoreworICAg
ICppc0Vycm9yID0gZmFsc2U7CisgICAgaWYgKHJlc3VsdExlbmd0aCA8IHNvdXJjZUxlbmd0aCkg
eworICAgICAgICAqaXNFcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybiBzb3VyY2VMZW5ndGg7
CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCisgICAg
ICAgIHJlc3VsdFtpXSA9IGZvbGRDYXNlKHNvdXJjZVtpXSk7CisgICAgcmV0dXJuIHNvdXJjZUxl
bmd0aDsKK30KKworVUNoYXIgdG9UaXRsZUNhc2UoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gdG93
dXBwZXIoYyk7Cit9CisKK0RpcmVjdGlvbiBkaXJlY3Rpb24oVUNoYXIzMiBjKQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxEaXJlY3Rpb24+KElDVTo6ZGlyZWN0aW9uKGMpKTsKK30KKworQ2hh
ckNhdGVnb3J5IGNhdGVnb3J5KHVuc2lnbmVkIGludCBjKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDaGFyQ2F0ZWdvcnk+KFRPX01BU0soKGludDhfdCkgSUNVOjpjYXRlZ29yeShjKSkpOwor
fQorCitEZWNvbXBvc2l0aW9uVHlwZSBkZWNvbXBvc2l0aW9uVHlwZShVQ2hhcjMyIGMpCit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PERlY29tcG9zaXRpb25UeXBlPihJQ1U6OmRlY29tcG9zaXRp
b25UeXBlKGMpKTsKK30KKwordW5zaWduZWQgY2hhciBjb21iaW5pbmdDbGFzcyhVQ2hhcjMyIGMp
Cit7CisgICAgcmV0dXJuIElDVTo6Y29tYmluaW5nQ2xhc3MoYyk7Cit9CisKK1VDaGFyIG1pcnJv
cmVkQ2hhcihVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJuIElDVTo6bWlycm9yZWRDaGFyKGMpOwor
fQorCitpbnQgZGlnaXRWYWx1ZShVQ2hhciBjKQoreworICAgIHJldHVybiBJQ1U6OmRpZ2l0VmFs
dWUoYyk7Cit9CisKK2Jvb2wgaXNTcGFjZShVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd3Nw
YWNlKGMpOworfQorCitib29sIGlzTGV0dGVyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuICEhaXN3
YWxwaGEoYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVuaWNvZGUKK30gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvYnJldy9Vbmljb2RlQnJldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcu
aAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcvVW5pY29k
ZUJyZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMTAgQ29tcGFueSAxMDAsIEluYy4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgVW5p
Y29kZUJyZXdfaAorI2RlZmluZSBVbmljb2RlQnJld19oCisKKyNpbmNsdWRlICJVbmljb2RlTWFj
cm9zRnJvbUlDVS5oIgorI2luY2x1ZGUgIlVuaWNvZGVGcm9tSUNVLmgiCisKK25hbWVzcGFjZSBX
VEYgeworbmFtZXNwYWNlIFVuaWNvZGUgeworCitlbnVtIERpcmVjdGlvbiB7CisgICAgTGVmdFRv
UmlnaHQgPSBJQ1U6OlVfTEVGVF9UT19SSUdIVCwKKyAgICBSaWdodFRvTGVmdCA9IElDVTo6VV9S
SUdIVF9UT19MRUZULAorICAgIEV1cm9wZWFuTnVtYmVyID0gSUNVOjpVX0VVUk9QRUFOX05VTUJF
UiwKKyAgICBFdXJvcGVhbk51bWJlclNlcGFyYXRvciA9IElDVTo6VV9FVVJPUEVBTl9OVU1CRVJf
U0VQQVJBVE9SLAorICAgIEV1cm9wZWFuTnVtYmVyVGVybWluYXRvciA9IElDVTo6VV9FVVJPUEVB
Tl9OVU1CRVJfVEVSTUlOQVRPUiwKKyAgICBBcmFiaWNOdW1iZXIgPSBJQ1U6OlVfQVJBQklDX05V
TUJFUiwKKyAgICBDb21tb25OdW1iZXJTZXBhcmF0b3IgPSBJQ1U6OlVfQ09NTU9OX05VTUJFUl9T
RVBBUkFUT1IsCisgICAgQmxvY2tTZXBhcmF0b3IgPSBJQ1U6OlVfQkxPQ0tfU0VQQVJBVE9SLAor
ICAgIFNlZ21lbnRTZXBhcmF0b3IgPSBJQ1U6OlVfU0VHTUVOVF9TRVBBUkFUT1IsCisgICAgV2hp
dGVTcGFjZU5ldXRyYWwgPSBJQ1U6OlVfV0hJVEVfU1BBQ0VfTkVVVFJBTCwKKyAgICBPdGhlck5l
dXRyYWwgPSBJQ1U6OlVfT1RIRVJfTkVVVFJBTCwKKyAgICBMZWZ0VG9SaWdodEVtYmVkZGluZyA9
IElDVTo6VV9MRUZUX1RPX1JJR0hUX0VNQkVERElORywKKyAgICBMZWZ0VG9SaWdodE92ZXJyaWRl
ID0gSUNVOjpVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUsCisgICAgUmlnaHRUb0xlZnRBcmFiaWMg
PSBJQ1U6OlVfUklHSFRfVE9fTEVGVF9BUkFCSUMsCisgICAgUmlnaHRUb0xlZnRFbWJlZGRpbmcg
PSBJQ1U6OlVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcsCisgICAgUmlnaHRUb0xlZnRPdmVycmlk
ZSA9IElDVTo6VV9SSUdIVF9UT19MRUZUX09WRVJSSURFLAorICAgIFBvcERpcmVjdGlvbmFsRm9y
bWF0ID0gSUNVOjpVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQsCisgICAgTm9uU3BhY2luZ01hcmsg
PSBJQ1U6OlVfRElSX05PTl9TUEFDSU5HX01BUkssCisgICAgQm91bmRhcnlOZXV0cmFsID0gSUNV
OjpVX0JPVU5EQVJZX05FVVRSQUwKK307CisKK2VudW0gRGVjb21wb3NpdGlvblR5cGUgeworICAg
IERlY29tcG9zaXRpb25Ob25lID0gSUNVOjpVX0RUX05PTkUsCisgICAgRGVjb21wb3NpdGlvbkNh
bm9uaWNhbCA9IElDVTo6VV9EVF9DQU5PTklDQUwsCisgICAgRGVjb21wb3NpdGlvbkNvbXBhdCA9
IElDVTo6VV9EVF9DT01QQVQsCisgICAgRGVjb21wb3NpdGlvbkNpcmNsZSA9IElDVTo6VV9EVF9D
SVJDTEUsCisgICAgRGVjb21wb3NpdGlvbkZpbmFsID0gSUNVOjpVX0RUX0ZJTkFMLAorICAgIERl
Y29tcG9zaXRpb25Gb250ID0gSUNVOjpVX0RUX0ZPTlQsCisgICAgRGVjb21wb3NpdGlvbkZyYWN0
aW9uID0gSUNVOjpVX0RUX0ZSQUNUSU9OLAorICAgIERlY29tcG9zaXRpb25Jbml0aWFsID0gSUNV
OjpVX0RUX0lOSVRJQUwsCisgICAgRGVjb21wb3NpdGlvbklzb2xhdGVkID0gSUNVOjpVX0RUX0lT
T0xBVEVELAorICAgIERlY29tcG9zaXRpb25NZWRpYWwgPSBJQ1U6OlVfRFRfTUVESUFMLAorICAg
IERlY29tcG9zaXRpb25OYXJyb3cgPSBJQ1U6OlVfRFRfTkFSUk9XLAorICAgIERlY29tcG9zaXRp
b25Ob0JyZWFrID0gSUNVOjpVX0RUX05PQlJFQUssCisgICAgRGVjb21wb3NpdGlvblNtYWxsID0g
SUNVOjpVX0RUX1NNQUxMLAorICAgIERlY29tcG9zaXRpb25TcXVhcmUgPSBJQ1U6OlVfRFRfU1FV
QVJFLAorICAgIERlY29tcG9zaXRpb25TdWIgPSBJQ1U6OlVfRFRfU1VCLAorICAgIERlY29tcG9z
aXRpb25TdXBlciA9IElDVTo6VV9EVF9TVVBFUiwKKyAgICBEZWNvbXBvc2l0aW9uVmVydGljYWwg
PSBJQ1U6OlVfRFRfVkVSVElDQUwsCisgICAgRGVjb21wb3NpdGlvbldpZGUgPSBJQ1U6OlVfRFRf
V0lERSwKK307CisKK2VudW0gQ2hhckNhdGVnb3J5IHsKKyAgICBOb0NhdGVnb3J5ID0gIDAsCisg
ICAgT3RoZXJfTm90QXNzaWduZWQgPSBUT19NQVNLKElDVTo6VV9HRU5FUkFMX09USEVSX1RZUEVT
KSwKKyAgICBMZXR0ZXJfVXBwZXJjYXNlID0gVE9fTUFTSyhJQ1U6OlVfVVBQRVJDQVNFX0xFVFRF
UiksCisgICAgTGV0dGVyX0xvd2VyY2FzZSA9IFRPX01BU0soSUNVOjpVX0xPV0VSQ0FTRV9MRVRU
RVIpLAorICAgIExldHRlcl9UaXRsZWNhc2UgPSBUT19NQVNLKElDVTo6VV9USVRMRUNBU0VfTEVU
VEVSKSwKKyAgICBMZXR0ZXJfTW9kaWZpZXIgPSBUT19NQVNLKElDVTo6VV9NT0RJRklFUl9MRVRU
RVIpLAorICAgIExldHRlcl9PdGhlciA9IFRPX01BU0soSUNVOjpVX09USEVSX0xFVFRFUiksCisK
KyAgICBNYXJrX05vblNwYWNpbmcgPSBUT19NQVNLKElDVTo6VV9OT05fU1BBQ0lOR19NQVJLKSwK
KyAgICBNYXJrX0VuY2xvc2luZyA9IFRPX01BU0soSUNVOjpVX0VOQ0xPU0lOR19NQVJLKSwKKyAg
ICBNYXJrX1NwYWNpbmdDb21iaW5pbmcgPSBUT19NQVNLKElDVTo6VV9DT01CSU5JTkdfU1BBQ0lO
R19NQVJLKSwKKworICAgIE51bWJlcl9EZWNpbWFsRGlnaXQgPSBUT19NQVNLKElDVTo6VV9ERUNJ
TUFMX0RJR0lUX05VTUJFUiksCisgICAgTnVtYmVyX0xldHRlciA9IFRPX01BU0soSUNVOjpVX0xF
VFRFUl9OVU1CRVIpLAorICAgIE51bWJlcl9PdGhlciA9IFRPX01BU0soSUNVOjpVX09USEVSX05V
TUJFUiksCisKKyAgICBTZXBhcmF0b3JfU3BhY2UgPSBUT19NQVNLKElDVTo6VV9TUEFDRV9TRVBB
UkFUT1IpLAorICAgIFNlcGFyYXRvcl9MaW5lID0gVE9fTUFTSyhJQ1U6OlVfTElORV9TRVBBUkFU
T1IpLAorICAgIFNlcGFyYXRvcl9QYXJhZ3JhcGggPSBUT19NQVNLKElDVTo6VV9QQVJBR1JBUEhf
U0VQQVJBVE9SKSwKKworICAgIE90aGVyX0NvbnRyb2wgPSBUT19NQVNLKElDVTo6VV9DT05UUk9M
X0NIQVIpLAorICAgIE90aGVyX0Zvcm1hdCA9IFRPX01BU0soSUNVOjpVX0ZPUk1BVF9DSEFSKSwK
KyAgICBPdGhlcl9Qcml2YXRlVXNlID0gVE9fTUFTSyhJQ1U6OlVfUFJJVkFURV9VU0VfQ0hBUiks
CisgICAgT3RoZXJfU3Vycm9nYXRlID0gVE9fTUFTSyhJQ1U6OlVfU1VSUk9HQVRFKSwKKworICAg
IFB1bmN0dWF0aW9uX0Rhc2ggPSBUT19NQVNLKElDVTo6VV9EQVNIX1BVTkNUVUFUSU9OKSwKKyAg
ICBQdW5jdHVhdGlvbl9PcGVuID0gVE9fTUFTSyhJQ1U6OlVfU1RBUlRfUFVOQ1RVQVRJT04pLAor
ICAgIFB1bmN0dWF0aW9uX0Nsb3NlID0gVE9fTUFTSyhJQ1U6OlVfRU5EX1BVTkNUVUFUSU9OKSwK
KyAgICBQdW5jdHVhdGlvbl9Db25uZWN0b3IgPSBUT19NQVNLKElDVTo6VV9DT05ORUNUT1JfUFVO
Q1RVQVRJT04pLAorICAgIFB1bmN0dWF0aW9uX090aGVyID0gVE9fTUFTSyhJQ1U6OlVfT1RIRVJf
UFVOQ1RVQVRJT04pLAorCisgICAgU3ltYm9sX01hdGggPSBUT19NQVNLKElDVTo6VV9NQVRIX1NZ
TUJPTCksCisgICAgU3ltYm9sX0N1cnJlbmN5ID0gVE9fTUFTSyhJQ1U6OlVfQ1VSUkVOQ1lfU1lN
Qk9MKSwKKyAgICBTeW1ib2xfTW9kaWZpZXIgPSBUT19NQVNLKElDVTo6VV9NT0RJRklFUl9TWU1C
T0wpLAorICAgIFN5bWJvbF9PdGhlciA9IFRPX01BU0soSUNVOjpVX09USEVSX1NZTUJPTCksCisK
KyAgICBQdW5jdHVhdGlvbl9Jbml0aWFsUXVvdGUgPSBUT19NQVNLKElDVTo6VV9JTklUSUFMX1BV
TkNUVUFUSU9OKSwKKyAgICBQdW5jdHVhdGlvbl9GaW5hbFF1b3RlID0gVE9fTUFTSyhJQ1U6OlVf
RklOQUxfUFVOQ1RVQVRJT04pCit9OworCitVQ2hhciBmb2xkQ2FzZShVQ2hhcik7CisKK2ludCBm
b2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc291
cmNlLCBpbnQgc291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKTsKKworaW50IHRvTG93ZXIoVUNo
YXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNvdXJjZSwgaW50IHNv
dXJjZUxlbmd0aCwgYm9vbCogaXNFcnJvcik7CisKK1VDaGFyIHRvVXBwZXIoVUNoYXIpOworVUNo
YXIgdG9Mb3dlcihVQ2hhcik7CisKK2Jvb2wgaXNVcHBlcihVQ2hhcik7CisKK2ludCB0b1VwcGVy
KFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIGlu
dCBzb3VyY2VMZW5ndGgsIGJvb2wqIGlzRXJyb3IpOworCitVQ2hhciB0b1RpdGxlQ2FzZShVQ2hh
cik7CisKK2lubGluZSBib29sIGlzQXJhYmljQ2hhcihVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJu
IGMgPj0gMHgwNjAwICYmIGMgPD0gMHgwNkZGOworfQorCitib29sIGlzQWxwaGFudW1lcmljKFVD
aGFyKTsKKworQ2hhckNhdGVnb3J5IGNhdGVnb3J5KHVuc2lnbmVkIGludCk7CisKK2lubGluZSBi
b29sIGlzU2VwYXJhdG9yU3BhY2UoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gY2F0ZWdvcnkoYykg
PT0gU2VwYXJhdG9yX1NwYWNlOworfQorCitib29sIGlzUHJpbnRhYmxlQ2hhcihVQ2hhcik7CisK
K2Jvb2wgaXNEaWdpdChVQ2hhcik7CisKK2Jvb2wgaXNQdW5jdChVQ2hhcik7CisKK2lubGluZSBi
b29sIGhhc0xpbmVCcmVha2luZ1Byb3BlcnR5Q29tcGxleENvbnRleHQoVUNoYXIzMikKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJv
b2wgaGFzTGluZUJyZWFraW5nUHJvcGVydHlDb21wbGV4Q29udGV4dE9ySWRlb2dyYXBoaWMoVUNo
YXIzMiBjKQoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIGZhbHNlOworfQorCitVQ2hhciBt
aXJyb3JlZENoYXIoVUNoYXIzMik7CisKK0RpcmVjdGlvbiBkaXJlY3Rpb24oVUNoYXIzMik7CisK
K2Jvb2wgaXNMb3dlcihVQ2hhcik7CisKK2ludCBkaWdpdFZhbHVlKFVDaGFyKTsKKwordW5zaWdu
ZWQgY2hhciBjb21iaW5pbmdDbGFzcyhVQ2hhcjMyKTsKKworRGVjb21wb3NpdGlvblR5cGUgZGVj
b21wb3NpdGlvblR5cGUoVUNoYXIzMik7CisKK2lubGluZSBpbnQgdW1lbWNhc2VjbXAoY29uc3Qg
VUNoYXIqIGEsIGNvbnN0IFVDaGFyKiBiLCBpbnQgbGVuKQoreworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYzEgPSBmb2xkQ2FzZShhW2ldKTsKKyAg
ICAgICAgVUNoYXIgYzIgPSBmb2xkQ2FzZShiW2ldKTsKKyAgICAgICAgaWYgKGMxICE9IGMyKQor
ICAgICAgICAgICAgcmV0dXJuIGMxIC0gYzI7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiti
b29sIGlzU3BhY2UoVUNoYXIpOworYm9vbCBpc0xldHRlcihVQ2hhcik7CisKK30gLy8gbmFtZXNw
YWNlIFVuaWNvZGUKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67490</attachid>
            <date>2010-09-13 16:55:39 -0700</date>
            <delta_ts>2010-10-13 17:37:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>unicode.patch</filename>
            <type>text/plain</type>
            <size>14121</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3NDE4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMDktMTMgIEt3YW5nIFl1
bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbQlJFV01QXSBQb3J0IHVuaWNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE2CisKKyAgICAgICAgQnJl
dyBNUCBwb3J0IHVzZXMgb25seSB0aGUgc3Vic2V0IG9mIElDVSBsaWJyYXJ5IHRvIHJlZHVjZSB0
aGUgYmluYXJ5IHNpemUuCisgICAgICAgIEZvbGxvdyB0aGUgV2luQ0UncyBpbXBsZW1lbnRhdGlv
bi4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi91bmljb2RlL1Vu
aWNvZGUuaDoKKyAgICAgICAgKiB3dGYvdW5pY29kZS9icmV3L1VuaWNvZGVCcmV3LmNwcDogQWRk
ZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvTG93ZXIpOgorICAgICAgICAoV1RGOjpVbmlj
b2RlOjp0b1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Zm9sZENhc2UpOgorICAgICAg
ICAoV1RGOjpVbmljb2RlOjppc1ByaW50YWJsZUNoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2Rl
Ojppc1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNMb3dlcik6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmlzRGlnaXQpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1B1bmN0KToK
KyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNBbHBoYW51bWVyaWMpOgorICAgICAgICAoV1RGOjpV
bmljb2RlOjp0b1RpdGxlQ2FzZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbik6
CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNhdGVnb3J5KToKKyAgICAgICAgKFdURjo6VW5pY29k
ZTo6ZGVjb21wb3NpdGlvblR5cGUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpjb21iaW5pbmdD
bGFzcyk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6Om1pcnJvcmVkQ2hhcik6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmRpZ2l0VmFsdWUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1NwYWNl
KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNMZXR0ZXIpOgorICAgICAgICAqIHd0Zi91bmlj
b2RlL2JyZXcvVW5pY29kZUJyZXcuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6Omlz
QXJhYmljQ2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjpoYXNMaW5lQnJlYWtpbmdQcm9wZXJ0eUNvbXBsZXhDb250
ZXh0KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aGFzTGluZUJyZWFraW5nUHJvcGVydHlDb21w
bGV4Q29udGV4dE9ySWRlb2dyYXBoaWMpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp1bWVtY2Fz
ZWNtcCk6CisKIDIwMTAtMDktMTMgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oCShyZXZpc2lvbiA2NzQwNCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NzQsNiArNTc0LDggQEAKICNkZWZpbmUgV1RGX1VTRV9RVDRfVU5J
Q09ERSAxCiAjZWxpZiBPUyhXSU5DRSkKICNkZWZpbmUgV1RGX1VTRV9XSU5DRV9VTklDT0RFIDEK
KyNlbGlmIFBMQVRGT1JNKEJSRVdNUCkKKyNkZWZpbmUgV1RGX1VTRV9CUkVXTVBfVU5JQ09ERSAx
CiAjZWxpZiBQTEFURk9STShHVEspCiAvKiBUaGUgR1RLKyBVbmljb2RlIGJhY2tlbmQgaXMgY29u
ZmlndXJhYmxlICovCiAjZWxzZQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5p
Y29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUu
aAkocmV2aXNpb24gNjc0MDQpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9nbGliL1VuaWNvZGVHTGliLmg+CiAjZWxpZiBVU0UoV0lOQ0VfVU5JQ09ERSkKICNpbmNsdWRl
IDx3dGYvdW5pY29kZS93aW5jZS9Vbmljb2RlV2luY2UuaD4KKyNlbGlmIFVTRShCUkVXTVBfVU5J
Q09ERSkKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9icmV3L1VuaWNvZGVCcmV3Lmg+CiAjZWxzZQog
I2Vycm9yICJVbmtub3duIFVuaWNvZGUgaW1wbGVtZW50YXRpb24iCiAjZW5kaWYKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuY3BwCShyZXZp
c2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvYnJldy9Vbmljb2RlQnJldy5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChD
KSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIENv
bXBhbnkgMTAwLCBJbmMuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJVbmljb2RlQnJldy5oIgorCisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUu
aD4KKworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgVW5pY29kZSB7CisKK1VDaGFyIHRvTG93
ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gdG93bG93ZXIoYyk7Cit9CisKK1VDaGFyIHRvVXBw
ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gdG93dXBwZXIoYyk7Cit9CisKK1VDaGFyIGZvbGRD
YXNlKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIHRvd2xvd2VyKGMpOworfQorCitib29sIGlzUHJp
bnRhYmxlQ2hhcihVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd3ByaW50KGMpOworfQorCiti
b29sIGlzVXBwZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gISFpc3d1cHBlcihjKTsKK30KKwor
Ym9vbCBpc0xvd2VyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuICEhaXN3bG93ZXIoYyk7Cit9CisK
K2Jvb2wgaXNEaWdpdChVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd2RpZ2l0KGMpOworfQor
Citib29sIGlzUHVuY3QoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gISFpc3dwdW5jdChjKTsKK30K
KworYm9vbCBpc0FscGhhbnVtZXJpYyhVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd2FsbnVt
KGMpOworfQorCitpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBj
b25zdCBVQ2hhciogc291cmNlLCBpbnQgc291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKQorewor
ICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VJdGVyYXRvciA9IHNvdXJjZTsKKyAgICBjb25zdCBVQ2hh
ciogc291cmNlRW5kID0gc291cmNlICsgc291cmNlTGVuZ3RoOworICAgIFVDaGFyKiByZXN1bHRJ
dGVyYXRvciA9IHJlc3VsdDsKKyAgICBVQ2hhciogcmVzdWx0RW5kID0gcmVzdWx0ICsgcmVzdWx0
TGVuZ3RoOworCisgICAgaW50IHJlbWFpbmluZ0NoYXJhY3RlcnMgPSAwOworICAgIGlmIChzb3Vy
Y2VMZW5ndGggPD0gcmVzdWx0TGVuZ3RoKQorICAgICAgICB3aGlsZSAoc291cmNlSXRlcmF0b3Ig
PCBzb3VyY2VFbmQpCisgICAgICAgICAgICAqcmVzdWx0SXRlcmF0b3IrKyA9IHRvd2xvd2VyKCpz
b3VyY2VJdGVyYXRvcisrKTsKKyAgICBlbHNlCisgICAgICAgIHdoaWxlIChyZXN1bHRJdGVyYXRv
ciA8IHJlc3VsdEVuZCkKKyAgICAgICAgICAgICpyZXN1bHRJdGVyYXRvcisrID0gdG93bG93ZXIo
KnNvdXJjZUl0ZXJhdG9yKyspOworCisgICAgaWYgKHNvdXJjZUl0ZXJhdG9yIDwgc291cmNlRW5k
KQorICAgICAgICByZW1haW5pbmdDaGFyYWN0ZXJzICs9IHNvdXJjZUVuZCAtIHNvdXJjZUl0ZXJh
dG9yOworICAgICppc0Vycm9yID0gISFyZW1haW5pbmdDaGFyYWN0ZXJzOworICAgIGlmIChyZXN1
bHRJdGVyYXRvciA8IHJlc3VsdEVuZCkKKyAgICAgICAgKnJlc3VsdEl0ZXJhdG9yID0gMDsKKwor
ICAgIHJldHVybiAocmVzdWx0SXRlcmF0b3IgLSByZXN1bHQpICsgcmVtYWluaW5nQ2hhcmFjdGVy
czsKK30KKworaW50IHRvVXBwZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29u
c3QgVUNoYXIqIHNvdXJjZSwgaW50IHNvdXJjZUxlbmd0aCwgYm9vbCogaXNFcnJvcikKK3sKKyAg
ICBjb25zdCBVQ2hhciogc291cmNlSXRlcmF0b3IgPSBzb3VyY2U7CisgICAgY29uc3QgVUNoYXIq
IHNvdXJjZUVuZCA9IHNvdXJjZSArIHNvdXJjZUxlbmd0aDsKKyAgICBVQ2hhciogcmVzdWx0SXRl
cmF0b3IgPSByZXN1bHQ7CisgICAgVUNoYXIqIHJlc3VsdEVuZCA9IHJlc3VsdCArIHJlc3VsdExl
bmd0aDsKKworICAgIGludCByZW1haW5pbmdDaGFyYWN0ZXJzID0gMDsKKyAgICBpZiAoc291cmNl
TGVuZ3RoIDw9IHJlc3VsdExlbmd0aCkKKyAgICAgICAgd2hpbGUgKHNvdXJjZUl0ZXJhdG9yIDwg
c291cmNlRW5kKQorICAgICAgICAgICAgKnJlc3VsdEl0ZXJhdG9yKysgPSB0b3d1cHBlcigqc291
cmNlSXRlcmF0b3IrKyk7CisgICAgZWxzZQorICAgICAgICB3aGlsZSAocmVzdWx0SXRlcmF0b3Ig
PCByZXN1bHRFbmQpCisgICAgICAgICAgICAqcmVzdWx0SXRlcmF0b3IrKyA9IHRvd3VwcGVyKCpz
b3VyY2VJdGVyYXRvcisrKTsKKworICAgIGlmIChzb3VyY2VJdGVyYXRvciA8IHNvdXJjZUVuZCkK
KyAgICAgICAgcmVtYWluaW5nQ2hhcmFjdGVycyArPSBzb3VyY2VFbmQgLSBzb3VyY2VJdGVyYXRv
cjsKKyAgICAqaXNFcnJvciA9ICEhcmVtYWluaW5nQ2hhcmFjdGVyczsKKyAgICBpZiAocmVzdWx0
SXRlcmF0b3IgPCByZXN1bHRFbmQpCisgICAgICAgICpyZXN1bHRJdGVyYXRvciA9IDA7CisKKyAg
ICByZXR1cm4gKHJlc3VsdEl0ZXJhdG9yIC0gcmVzdWx0KSArIHJlbWFpbmluZ0NoYXJhY3RlcnM7
Cit9CisKK2ludCBmb2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25z
dCBVQ2hhciogc291cmNlLCBpbnQgc291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKQoreworICAg
ICppc0Vycm9yID0gZmFsc2U7CisgICAgaWYgKHJlc3VsdExlbmd0aCA8IHNvdXJjZUxlbmd0aCkg
eworICAgICAgICAqaXNFcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybiBzb3VyY2VMZW5ndGg7
CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCisgICAg
ICAgIHJlc3VsdFtpXSA9IGZvbGRDYXNlKHNvdXJjZVtpXSk7CisgICAgcmV0dXJuIHNvdXJjZUxl
bmd0aDsKK30KKworVUNoYXIgdG9UaXRsZUNhc2UoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gdG93
dXBwZXIoYyk7Cit9CisKK0RpcmVjdGlvbiBkaXJlY3Rpb24oVUNoYXIzMiBjKQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxEaXJlY3Rpb24+KElDVTo6ZGlyZWN0aW9uKGMpKTsKK30KKworQ2hh
ckNhdGVnb3J5IGNhdGVnb3J5KHVuc2lnbmVkIGludCBjKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDaGFyQ2F0ZWdvcnk+KFRPX01BU0soKGludDhfdCkgSUNVOjpjYXRlZ29yeShjKSkpOwor
fQorCitEZWNvbXBvc2l0aW9uVHlwZSBkZWNvbXBvc2l0aW9uVHlwZShVQ2hhcjMyIGMpCit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PERlY29tcG9zaXRpb25UeXBlPihJQ1U6OmRlY29tcG9zaXRp
b25UeXBlKGMpKTsKK30KKwordW5zaWduZWQgY2hhciBjb21iaW5pbmdDbGFzcyhVQ2hhcjMyIGMp
Cit7CisgICAgcmV0dXJuIElDVTo6Y29tYmluaW5nQ2xhc3MoYyk7Cit9CisKK1VDaGFyIG1pcnJv
cmVkQ2hhcihVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJuIElDVTo6bWlycm9yZWRDaGFyKGMpOwor
fQorCitpbnQgZGlnaXRWYWx1ZShVQ2hhciBjKQoreworICAgIHJldHVybiBJQ1U6OmRpZ2l0VmFs
dWUoYyk7Cit9CisKK2Jvb2wgaXNTcGFjZShVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd3Nw
YWNlKGMpOworfQorCitib29sIGlzTGV0dGVyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuICEhaXN3
YWxwaGEoYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFVuaWNvZGUKK30gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvYnJldy9Vbmljb2RlQnJldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcu
aAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcvVW5pY29k
ZUJyZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMTAgQ29tcGFueSAxMDAsIEluYy4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgVW5p
Y29kZUJyZXdfaAorI2RlZmluZSBVbmljb2RlQnJld19oCisKKyNpbmNsdWRlICJVbmljb2RlRnJv
bUlDVS5oIgorI2luY2x1ZGUgIlVuaWNvZGVNYWNyb3NGcm9tSUNVLmgiCisKK25hbWVzcGFjZSBX
VEYgeworbmFtZXNwYWNlIFVuaWNvZGUgeworCitlbnVtIERpcmVjdGlvbiB7CisgICAgTGVmdFRv
UmlnaHQgPSBJQ1U6OlVfTEVGVF9UT19SSUdIVCwKKyAgICBSaWdodFRvTGVmdCA9IElDVTo6VV9S
SUdIVF9UT19MRUZULAorICAgIEV1cm9wZWFuTnVtYmVyID0gSUNVOjpVX0VVUk9QRUFOX05VTUJF
UiwKKyAgICBFdXJvcGVhbk51bWJlclNlcGFyYXRvciA9IElDVTo6VV9FVVJPUEVBTl9OVU1CRVJf
U0VQQVJBVE9SLAorICAgIEV1cm9wZWFuTnVtYmVyVGVybWluYXRvciA9IElDVTo6VV9FVVJPUEVB
Tl9OVU1CRVJfVEVSTUlOQVRPUiwKKyAgICBBcmFiaWNOdW1iZXIgPSBJQ1U6OlVfQVJBQklDX05V
TUJFUiwKKyAgICBDb21tb25OdW1iZXJTZXBhcmF0b3IgPSBJQ1U6OlVfQ09NTU9OX05VTUJFUl9T
RVBBUkFUT1IsCisgICAgQmxvY2tTZXBhcmF0b3IgPSBJQ1U6OlVfQkxPQ0tfU0VQQVJBVE9SLAor
ICAgIFNlZ21lbnRTZXBhcmF0b3IgPSBJQ1U6OlVfU0VHTUVOVF9TRVBBUkFUT1IsCisgICAgV2hp
dGVTcGFjZU5ldXRyYWwgPSBJQ1U6OlVfV0hJVEVfU1BBQ0VfTkVVVFJBTCwKKyAgICBPdGhlck5l
dXRyYWwgPSBJQ1U6OlVfT1RIRVJfTkVVVFJBTCwKKyAgICBMZWZ0VG9SaWdodEVtYmVkZGluZyA9
IElDVTo6VV9MRUZUX1RPX1JJR0hUX0VNQkVERElORywKKyAgICBMZWZ0VG9SaWdodE92ZXJyaWRl
ID0gSUNVOjpVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUsCisgICAgUmlnaHRUb0xlZnRBcmFiaWMg
PSBJQ1U6OlVfUklHSFRfVE9fTEVGVF9BUkFCSUMsCisgICAgUmlnaHRUb0xlZnRFbWJlZGRpbmcg
PSBJQ1U6OlVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcsCisgICAgUmlnaHRUb0xlZnRPdmVycmlk
ZSA9IElDVTo6VV9SSUdIVF9UT19MRUZUX09WRVJSSURFLAorICAgIFBvcERpcmVjdGlvbmFsRm9y
bWF0ID0gSUNVOjpVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQsCisgICAgTm9uU3BhY2luZ01hcmsg
PSBJQ1U6OlVfRElSX05PTl9TUEFDSU5HX01BUkssCisgICAgQm91bmRhcnlOZXV0cmFsID0gSUNV
OjpVX0JPVU5EQVJZX05FVVRSQUwKK307CisKK2VudW0gRGVjb21wb3NpdGlvblR5cGUgeworICAg
IERlY29tcG9zaXRpb25Ob25lID0gSUNVOjpVX0RUX05PTkUsCisgICAgRGVjb21wb3NpdGlvbkNh
bm9uaWNhbCA9IElDVTo6VV9EVF9DQU5PTklDQUwsCisgICAgRGVjb21wb3NpdGlvbkNvbXBhdCA9
IElDVTo6VV9EVF9DT01QQVQsCisgICAgRGVjb21wb3NpdGlvbkNpcmNsZSA9IElDVTo6VV9EVF9D
SVJDTEUsCisgICAgRGVjb21wb3NpdGlvbkZpbmFsID0gSUNVOjpVX0RUX0ZJTkFMLAorICAgIERl
Y29tcG9zaXRpb25Gb250ID0gSUNVOjpVX0RUX0ZPTlQsCisgICAgRGVjb21wb3NpdGlvbkZyYWN0
aW9uID0gSUNVOjpVX0RUX0ZSQUNUSU9OLAorICAgIERlY29tcG9zaXRpb25Jbml0aWFsID0gSUNV
OjpVX0RUX0lOSVRJQUwsCisgICAgRGVjb21wb3NpdGlvbklzb2xhdGVkID0gSUNVOjpVX0RUX0lT
T0xBVEVELAorICAgIERlY29tcG9zaXRpb25NZWRpYWwgPSBJQ1U6OlVfRFRfTUVESUFMLAorICAg
IERlY29tcG9zaXRpb25OYXJyb3cgPSBJQ1U6OlVfRFRfTkFSUk9XLAorICAgIERlY29tcG9zaXRp
b25Ob0JyZWFrID0gSUNVOjpVX0RUX05PQlJFQUssCisgICAgRGVjb21wb3NpdGlvblNtYWxsID0g
SUNVOjpVX0RUX1NNQUxMLAorICAgIERlY29tcG9zaXRpb25TcXVhcmUgPSBJQ1U6OlVfRFRfU1FV
QVJFLAorICAgIERlY29tcG9zaXRpb25TdWIgPSBJQ1U6OlVfRFRfU1VCLAorICAgIERlY29tcG9z
aXRpb25TdXBlciA9IElDVTo6VV9EVF9TVVBFUiwKKyAgICBEZWNvbXBvc2l0aW9uVmVydGljYWwg
PSBJQ1U6OlVfRFRfVkVSVElDQUwsCisgICAgRGVjb21wb3NpdGlvbldpZGUgPSBJQ1U6OlVfRFRf
V0lERSwKK307CisKK2VudW0gQ2hhckNhdGVnb3J5IHsKKyAgICBOb0NhdGVnb3J5ID0gIDAsCisg
ICAgT3RoZXJfTm90QXNzaWduZWQgPSBUT19NQVNLKElDVTo6VV9HRU5FUkFMX09USEVSX1RZUEVT
KSwKKyAgICBMZXR0ZXJfVXBwZXJjYXNlID0gVE9fTUFTSyhJQ1U6OlVfVVBQRVJDQVNFX0xFVFRF
UiksCisgICAgTGV0dGVyX0xvd2VyY2FzZSA9IFRPX01BU0soSUNVOjpVX0xPV0VSQ0FTRV9MRVRU
RVIpLAorICAgIExldHRlcl9UaXRsZWNhc2UgPSBUT19NQVNLKElDVTo6VV9USVRMRUNBU0VfTEVU
VEVSKSwKKyAgICBMZXR0ZXJfTW9kaWZpZXIgPSBUT19NQVNLKElDVTo6VV9NT0RJRklFUl9MRVRU
RVIpLAorICAgIExldHRlcl9PdGhlciA9IFRPX01BU0soSUNVOjpVX09USEVSX0xFVFRFUiksCisK
KyAgICBNYXJrX05vblNwYWNpbmcgPSBUT19NQVNLKElDVTo6VV9OT05fU1BBQ0lOR19NQVJLKSwK
KyAgICBNYXJrX0VuY2xvc2luZyA9IFRPX01BU0soSUNVOjpVX0VOQ0xPU0lOR19NQVJLKSwKKyAg
ICBNYXJrX1NwYWNpbmdDb21iaW5pbmcgPSBUT19NQVNLKElDVTo6VV9DT01CSU5JTkdfU1BBQ0lO
R19NQVJLKSwKKworICAgIE51bWJlcl9EZWNpbWFsRGlnaXQgPSBUT19NQVNLKElDVTo6VV9ERUNJ
TUFMX0RJR0lUX05VTUJFUiksCisgICAgTnVtYmVyX0xldHRlciA9IFRPX01BU0soSUNVOjpVX0xF
VFRFUl9OVU1CRVIpLAorICAgIE51bWJlcl9PdGhlciA9IFRPX01BU0soSUNVOjpVX09USEVSX05V
TUJFUiksCisKKyAgICBTZXBhcmF0b3JfU3BhY2UgPSBUT19NQVNLKElDVTo6VV9TUEFDRV9TRVBB
UkFUT1IpLAorICAgIFNlcGFyYXRvcl9MaW5lID0gVE9fTUFTSyhJQ1U6OlVfTElORV9TRVBBUkFU
T1IpLAorICAgIFNlcGFyYXRvcl9QYXJhZ3JhcGggPSBUT19NQVNLKElDVTo6VV9QQVJBR1JBUEhf
U0VQQVJBVE9SKSwKKworICAgIE90aGVyX0NvbnRyb2wgPSBUT19NQVNLKElDVTo6VV9DT05UUk9M
X0NIQVIpLAorICAgIE90aGVyX0Zvcm1hdCA9IFRPX01BU0soSUNVOjpVX0ZPUk1BVF9DSEFSKSwK
KyAgICBPdGhlcl9Qcml2YXRlVXNlID0gVE9fTUFTSyhJQ1U6OlVfUFJJVkFURV9VU0VfQ0hBUiks
CisgICAgT3RoZXJfU3Vycm9nYXRlID0gVE9fTUFTSyhJQ1U6OlVfU1VSUk9HQVRFKSwKKworICAg
IFB1bmN0dWF0aW9uX0Rhc2ggPSBUT19NQVNLKElDVTo6VV9EQVNIX1BVTkNUVUFUSU9OKSwKKyAg
ICBQdW5jdHVhdGlvbl9PcGVuID0gVE9fTUFTSyhJQ1U6OlVfU1RBUlRfUFVOQ1RVQVRJT04pLAor
ICAgIFB1bmN0dWF0aW9uX0Nsb3NlID0gVE9fTUFTSyhJQ1U6OlVfRU5EX1BVTkNUVUFUSU9OKSwK
KyAgICBQdW5jdHVhdGlvbl9Db25uZWN0b3IgPSBUT19NQVNLKElDVTo6VV9DT05ORUNUT1JfUFVO
Q1RVQVRJT04pLAorICAgIFB1bmN0dWF0aW9uX090aGVyID0gVE9fTUFTSyhJQ1U6OlVfT1RIRVJf
UFVOQ1RVQVRJT04pLAorCisgICAgU3ltYm9sX01hdGggPSBUT19NQVNLKElDVTo6VV9NQVRIX1NZ
TUJPTCksCisgICAgU3ltYm9sX0N1cnJlbmN5ID0gVE9fTUFTSyhJQ1U6OlVfQ1VSUkVOQ1lfU1lN
Qk9MKSwKKyAgICBTeW1ib2xfTW9kaWZpZXIgPSBUT19NQVNLKElDVTo6VV9NT0RJRklFUl9TWU1C
T0wpLAorICAgIFN5bWJvbF9PdGhlciA9IFRPX01BU0soSUNVOjpVX09USEVSX1NZTUJPTCksCisK
KyAgICBQdW5jdHVhdGlvbl9Jbml0aWFsUXVvdGUgPSBUT19NQVNLKElDVTo6VV9JTklUSUFMX1BV
TkNUVUFUSU9OKSwKKyAgICBQdW5jdHVhdGlvbl9GaW5hbFF1b3RlID0gVE9fTUFTSyhJQ1U6OlVf
RklOQUxfUFVOQ1RVQVRJT04pCit9OworCitVQ2hhciBmb2xkQ2FzZShVQ2hhcik7CisKK2ludCBm
b2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc291
cmNlLCBpbnQgc291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKTsKKworaW50IHRvTG93ZXIoVUNo
YXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNvdXJjZSwgaW50IHNv
dXJjZUxlbmd0aCwgYm9vbCogaXNFcnJvcik7CisKK1VDaGFyIHRvVXBwZXIoVUNoYXIpOworVUNo
YXIgdG9Mb3dlcihVQ2hhcik7CisKK2Jvb2wgaXNVcHBlcihVQ2hhcik7CisKK2ludCB0b1VwcGVy
KFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIGlu
dCBzb3VyY2VMZW5ndGgsIGJvb2wqIGlzRXJyb3IpOworCitVQ2hhciB0b1RpdGxlQ2FzZShVQ2hh
cik7CisKK2lubGluZSBib29sIGlzQXJhYmljQ2hhcihVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJu
IGMgPj0gMHgwNjAwICYmIGMgPD0gMHgwNkZGOworfQorCitib29sIGlzQWxwaGFudW1lcmljKFVD
aGFyKTsKKworQ2hhckNhdGVnb3J5IGNhdGVnb3J5KHVuc2lnbmVkIGludCk7CisKK2lubGluZSBi
b29sIGlzU2VwYXJhdG9yU3BhY2UoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gY2F0ZWdvcnkoYykg
PT0gU2VwYXJhdG9yX1NwYWNlOworfQorCitib29sIGlzUHJpbnRhYmxlQ2hhcihVQ2hhcik7CisK
K2Jvb2wgaXNEaWdpdChVQ2hhcik7CisKK2Jvb2wgaXNQdW5jdChVQ2hhcik7CisKK2lubGluZSBi
b29sIGhhc0xpbmVCcmVha2luZ1Byb3BlcnR5Q29tcGxleENvbnRleHQoVUNoYXIzMikKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJv
b2wgaGFzTGluZUJyZWFraW5nUHJvcGVydHlDb21wbGV4Q29udGV4dE9ySWRlb2dyYXBoaWMoVUNo
YXIzMiBjKQoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIGZhbHNlOworfQorCitVQ2hhciBt
aXJyb3JlZENoYXIoVUNoYXIzMik7CisKK0RpcmVjdGlvbiBkaXJlY3Rpb24oVUNoYXIzMik7CisK
K2Jvb2wgaXNMb3dlcihVQ2hhcik7CisKK2ludCBkaWdpdFZhbHVlKFVDaGFyKTsKKwordW5zaWdu
ZWQgY2hhciBjb21iaW5pbmdDbGFzcyhVQ2hhcjMyKTsKKworRGVjb21wb3NpdGlvblR5cGUgZGVj
b21wb3NpdGlvblR5cGUoVUNoYXIzMik7CisKK2lubGluZSBpbnQgdW1lbWNhc2VjbXAoY29uc3Qg
VUNoYXIqIGEsIGNvbnN0IFVDaGFyKiBiLCBpbnQgbGVuKQoreworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYzEgPSBmb2xkQ2FzZShhW2ldKTsKKyAg
ICAgICAgVUNoYXIgYzIgPSBmb2xkQ2FzZShiW2ldKTsKKyAgICAgICAgaWYgKGMxICE9IGMyKQor
ICAgICAgICAgICAgcmV0dXJuIGMxIC0gYzI7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiti
b29sIGlzU3BhY2UoVUNoYXIpOworYm9vbCBpc0xldHRlcihVQ2hhcik7CisKK30gLy8gbmFtZXNw
YWNlIFVuaWNvZGUKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYK
</data>
<flag name="review"
          id="56804"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70689</attachid>
            <date>2010-10-13 17:37:52 -0700</date>
            <delta_ts>2010-10-13 17:39:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>unicode.patch</filename>
            <type>text/plain</type>
            <size>15548</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5NjY3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTAtMTAtMTMgIEt3YW5nIFl1
bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbQlJFV01QXSBQb3J0IHVuaWNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE2CisKKyAgICAgICAgQnJl
dyBNUCBwb3J0IHVzZXMgb25seSB0aGUgc3Vic2V0IG9mIElDVSBsaWJyYXJ5IHRvIHJlZHVjZSB0
aGUgYmluYXJ5IHNpemUuCisgICAgICAgIEZvbGxvdyB0aGUgV2luQ0UncyBpbXBsZW1lbnRhdGlv
bi4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi91bmljb2RlL1Vu
aWNvZGUuaDoKKyAgICAgICAgKiB3dGYvdW5pY29kZS9icmV3L1VuaWNvZGVCcmV3LmNwcDogQWRk
ZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvTG93ZXIpOgorICAgICAgICAoV1RGOjpVbmlj
b2RlOjp0b1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Zm9sZENhc2UpOgorICAgICAg
ICAoV1RGOjpVbmljb2RlOjppc1ByaW50YWJsZUNoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2Rl
Ojppc1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNMb3dlcik6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmlzRGlnaXQpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1B1bmN0KToK
KyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNBbHBoYW51bWVyaWMpOgorICAgICAgICAoV1RGOjpV
bmljb2RlOjp0b1RpdGxlQ2FzZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbik6
CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNhdGVnb3J5KToKKyAgICAgICAgKFdURjo6VW5pY29k
ZTo6ZGVjb21wb3NpdGlvblR5cGUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpjb21iaW5pbmdD
bGFzcyk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6Om1pcnJvcmVkQ2hhcik6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmRpZ2l0VmFsdWUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1NwYWNl
KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNMZXR0ZXIpOgorICAgICAgICAqIHd0Zi91bmlj
b2RlL2JyZXcvVW5pY29kZUJyZXcuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6Omlz
QXJhYmljQ2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjpoYXNMaW5lQnJlYWtpbmdQcm9wZXJ0eUNvbXBsZXhDb250
ZXh0KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aGFzTGluZUJyZWFraW5nUHJvcGVydHlDb21w
bGV4Q29udGV4dE9ySWRlb2dyYXBoaWMpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp1bWVtY2Fz
ZWNtcCk6CisKKzIwMTAtMTAtMTMgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5l
dD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbQlJF
V01QXSBQb3J0IHVuaWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ1NzE2CisKKyAgICAgICAgQnJldyBNUCBwb3J0IHVzZXMgb25seSB0aGUgc3Vi
c2V0IG9mIElDVSBsaWJyYXJ5IHRvIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuCisgICAgICAgIEZv
bGxvdyB0aGUgV2luQ0UncyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOgorICAgICAgICAqIHd0Zi91bmljb2RlL1VuaWNvZGUuaDoKKyAgICAgICAgKiB3dGYvdW5p
Y29kZS9icmV3L1VuaWNvZGVCcmV3LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6
OnRvTG93ZXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp0b1VwcGVyKToKKyAgICAgICAgKFdU
Rjo6VW5pY29kZTo6Zm9sZENhc2UpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1ByaW50YWJs
ZUNoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1VwcGVyKToKKyAgICAgICAgKFdURjo6
VW5pY29kZTo6aXNMb3dlcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzRGlnaXQpOgorICAg
ICAgICAoV1RGOjpVbmljb2RlOjppc1B1bmN0KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNB
bHBoYW51bWVyaWMpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp0b1RpdGxlQ2FzZSk6CisgICAg
ICAgIChXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNh
dGVnb3J5KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6ZGVjb21wb3NpdGlvblR5cGUpOgorICAg
ICAgICAoV1RGOjpVbmljb2RlOjpjb21iaW5pbmdDbGFzcyk6CisgICAgICAgIChXVEY6OlVuaWNv
ZGU6Om1pcnJvcmVkQ2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRpZ2l0VmFsdWUpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjppc1NwYWNlKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6
aXNMZXR0ZXIpOgorICAgICAgICAqIHd0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuaDogQWRk
ZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzQXJhYmljQ2hhcik6CisgICAgICAgIChXVEY6
OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpoYXNM
aW5lQnJlYWtpbmdQcm9wZXJ0eUNvbXBsZXhDb250ZXh0KToKKyAgICAgICAgKFdURjo6VW5pY29k
ZTo6aGFzTGluZUJyZWFraW5nUHJvcGVydHlDb21wbGV4Q29udGV4dE9ySWRlb2dyYXBoaWMpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjp1bWVtY2FzZWNtcCk6CisKIDIwMTAtMTAtMTMgIFhhbiBM
b3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9z
enRyb2dvbsOhYy4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA2OTcxNykKKysr
IEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NzQsNiAr
NTc0LDggQEAKICNkZWZpbmUgV1RGX1VTRV9RVDRfVU5JQ09ERSAxCiAjZWxpZiBPUyhXSU5DRSkK
ICNkZWZpbmUgV1RGX1VTRV9XSU5DRV9VTklDT0RFIDEKKyNlbGlmIFBMQVRGT1JNKEJSRVdNUCkK
KyNkZWZpbmUgV1RGX1VTRV9CUkVXTVBfVU5JQ09ERSAxCiAjZWxpZiBQTEFURk9STShHVEspCiAv
KiBUaGUgR1RLKyBVbmljb2RlIGJhY2tlbmQgaXMgY29uZmlndXJhYmxlICovCiAjZWxzZQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAkocmV2aXNpb24gNjk2NjcpCisrKyBK
YXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDggQEAKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmg+CiAj
ZWxpZiBVU0UoV0lOQ0VfVU5JQ09ERSkKICNpbmNsdWRlIDx3dGYvdW5pY29kZS93aW5jZS9Vbmlj
b2RlV2luQ0UuaD4KKyNlbGlmIFVTRShCUkVXTVBfVU5JQ09ERSkKKyNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9icmV3L1VuaWNvZGVCcmV3Lmg+CiAjZWxzZQogI2Vycm9yICJVbmtub3duIFVuaWNvZGUg
aW1wbGVtZW50YXRpb24iCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2Rl
L2JyZXcvVW5pY29kZUJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91
bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuY3BwCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENv
cmUvd3RmL3VuaWNvZGUvYnJldy9Vbmljb2RlQnJldy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTg1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3Rh
aWtvc0BrZGUub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292
IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxl
LCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIENvbXBhbnkgMTAwLCBJbmMuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVbmljb2RlQnJldy5oIgorCisjaW5j
bHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworbmFtZXNwYWNlIFdURiB7Citu
YW1lc3BhY2UgVW5pY29kZSB7CisKK1VDaGFyIHRvTG93ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1
cm4gdG93bG93ZXIoYyk7Cit9CisKK1VDaGFyIHRvVXBwZXIoVUNoYXIgYykKK3sKKyAgICByZXR1
cm4gdG93dXBwZXIoYyk7Cit9CisKK1VDaGFyIGZvbGRDYXNlKFVDaGFyIGMpCit7CisgICAgcmV0
dXJuIHRvd2xvd2VyKGMpOworfQorCitib29sIGlzUHJpbnRhYmxlQ2hhcihVQ2hhciBjKQorewor
ICAgIHJldHVybiAhIWlzd3ByaW50KGMpOworfQorCitib29sIGlzVXBwZXIoVUNoYXIgYykKK3sK
KyAgICByZXR1cm4gISFpc3d1cHBlcihjKTsKK30KKworYm9vbCBpc0xvd2VyKFVDaGFyIGMpCit7
CisgICAgcmV0dXJuICEhaXN3bG93ZXIoYyk7Cit9CisKK2Jvb2wgaXNEaWdpdChVQ2hhciBjKQor
eworICAgIHJldHVybiAhIWlzd2RpZ2l0KGMpOworfQorCitib29sIGlzUHVuY3QoVUNoYXIgYykK
K3sKKyAgICByZXR1cm4gISFpc3dwdW5jdChjKTsKK30KKworYm9vbCBpc0FscGhhbnVtZXJpYyhV
Q2hhciBjKQoreworICAgIHJldHVybiAhIWlzd2FsbnVtKGMpOworfQorCitpbnQgdG9Mb3dlcihV
Q2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc291cmNlLCBpbnQg
c291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKQoreworICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VJ
dGVyYXRvciA9IHNvdXJjZTsKKyAgICBjb25zdCBVQ2hhciogc291cmNlRW5kID0gc291cmNlICsg
c291cmNlTGVuZ3RoOworICAgIFVDaGFyKiByZXN1bHRJdGVyYXRvciA9IHJlc3VsdDsKKyAgICBV
Q2hhciogcmVzdWx0RW5kID0gcmVzdWx0ICsgcmVzdWx0TGVuZ3RoOworCisgICAgaWYgKHNvdXJj
ZUxlbmd0aCA8PSByZXN1bHRMZW5ndGgpIHsKKyAgICAgICAgd2hpbGUgKHNvdXJjZUl0ZXJhdG9y
IDwgc291cmNlRW5kKQorICAgICAgICAgICAgKnJlc3VsdEl0ZXJhdG9yKysgPSB0b3dsb3dlcigq
c291cmNlSXRlcmF0b3IrKyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKHJlc3VsdEl0
ZXJhdG9yIDwgcmVzdWx0RW5kKQorICAgICAgICAgICAgKnJlc3VsdEl0ZXJhdG9yKysgPSB0b3ds
b3dlcigqc291cmNlSXRlcmF0b3IrKyk7CisgICAgfQorCisgICAgaW50IHJlbWFpbmluZ0NoYXJh
Y3RlcnMgPSAwOworICAgIGlmIChzb3VyY2VJdGVyYXRvciA8IHNvdXJjZUVuZCkKKyAgICAgICAg
cmVtYWluaW5nQ2hhcmFjdGVycyArPSBzb3VyY2VFbmQgLSBzb3VyY2VJdGVyYXRvcjsKKyAgICAq
aXNFcnJvciA9ICEhcmVtYWluaW5nQ2hhcmFjdGVyczsKKyAgICBpZiAocmVzdWx0SXRlcmF0b3Ig
PCByZXN1bHRFbmQpCisgICAgICAgICpyZXN1bHRJdGVyYXRvciA9IDA7CisKKyAgICByZXR1cm4g
KHJlc3VsdEl0ZXJhdG9yIC0gcmVzdWx0KSArIHJlbWFpbmluZ0NoYXJhY3RlcnM7Cit9CisKK2lu
dCB0b1VwcGVyKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBz
b3VyY2UsIGludCBzb3VyY2VMZW5ndGgsIGJvb2wqIGlzRXJyb3IpCit7CisgICAgY29uc3QgVUNo
YXIqIHNvdXJjZUl0ZXJhdG9yID0gc291cmNlOworICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VFbmQg
PSBzb3VyY2UgKyBzb3VyY2VMZW5ndGg7CisgICAgVUNoYXIqIHJlc3VsdEl0ZXJhdG9yID0gcmVz
dWx0OworICAgIFVDaGFyKiByZXN1bHRFbmQgPSByZXN1bHQgKyByZXN1bHRMZW5ndGg7CisKKyAg
ICBpZiAoc291cmNlTGVuZ3RoIDw9IHJlc3VsdExlbmd0aCkgeworICAgICAgICB3aGlsZSAoc291
cmNlSXRlcmF0b3IgPCBzb3VyY2VFbmQpCisgICAgICAgICAgICAqcmVzdWx0SXRlcmF0b3IrKyA9
IHRvd3VwcGVyKCpzb3VyY2VJdGVyYXRvcisrKTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aGls
ZSAocmVzdWx0SXRlcmF0b3IgPCByZXN1bHRFbmQpCisgICAgICAgICAgICAqcmVzdWx0SXRlcmF0
b3IrKyA9IHRvd3VwcGVyKCpzb3VyY2VJdGVyYXRvcisrKTsKKyAgICB9CisKKyAgICBpbnQgcmVt
YWluaW5nQ2hhcmFjdGVycyA9IDA7CisgICAgaWYgKHNvdXJjZUl0ZXJhdG9yIDwgc291cmNlRW5k
KQorICAgICAgICByZW1haW5pbmdDaGFyYWN0ZXJzICs9IHNvdXJjZUVuZCAtIHNvdXJjZUl0ZXJh
dG9yOworICAgICppc0Vycm9yID0gISFyZW1haW5pbmdDaGFyYWN0ZXJzOworICAgIGlmIChyZXN1
bHRJdGVyYXRvciA8IHJlc3VsdEVuZCkKKyAgICAgICAgKnJlc3VsdEl0ZXJhdG9yID0gMDsKKwor
ICAgIHJldHVybiAocmVzdWx0SXRlcmF0b3IgLSByZXN1bHQpICsgcmVtYWluaW5nQ2hhcmFjdGVy
czsKK30KKworaW50IGZvbGRDYXNlKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNv
bnN0IFVDaGFyKiBzb3VyY2UsIGludCBzb3VyY2VMZW5ndGgsIGJvb2wqIGlzRXJyb3IpCit7Cisg
ICAgKmlzRXJyb3IgPSBmYWxzZTsKKyAgICBpZiAocmVzdWx0TGVuZ3RoIDwgc291cmNlTGVuZ3Ro
KSB7CisgICAgICAgICppc0Vycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUxlbmd0
aDsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKKyAg
ICAgICAgcmVzdWx0W2ldID0gZm9sZENhc2Uoc291cmNlW2ldKTsKKyAgICByZXR1cm4gc291cmNl
TGVuZ3RoOworfQorCitVQ2hhciB0b1RpdGxlQ2FzZShVQ2hhciBjKQoreworICAgIHJldHVybiB0
b3d1cHBlcihjKTsKK30KKworRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyIGMpCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PERpcmVjdGlvbj4oSUNVOjpkaXJlY3Rpb24oYykpOworfQorCitD
aGFyQ2F0ZWdvcnkgY2F0ZWdvcnkodW5zaWduZWQgaW50IGMpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PENoYXJDYXRlZ29yeT4oVE9fTUFTSygoaW50OF90KSBJQ1U6OmNhdGVnb3J5KGMpKSk7
Cit9CisKK0RlY29tcG9zaXRpb25UeXBlIGRlY29tcG9zaXRpb25UeXBlKFVDaGFyMzIgYykKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGVjb21wb3NpdGlvblR5cGU+KElDVTo6ZGVjb21wb3Np
dGlvblR5cGUoYykpOworfQorCit1bnNpZ25lZCBjaGFyIGNvbWJpbmluZ0NsYXNzKFVDaGFyMzIg
YykKK3sKKyAgICByZXR1cm4gSUNVOjpjb21iaW5pbmdDbGFzcyhjKTsKK30KKworVUNoYXIgbWly
cm9yZWRDaGFyKFVDaGFyMzIgYykKK3sKKyAgICByZXR1cm4gSUNVOjptaXJyb3JlZENoYXIoYyk7
Cit9CisKK2ludCBkaWdpdFZhbHVlKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIElDVTo6ZGlnaXRW
YWx1ZShjKTsKK30KKworYm9vbCBpc1NwYWNlKFVDaGFyIGMpCit7CisgICAgcmV0dXJuICEhaXN3
c3BhY2UoYyk7Cit9CisKK2Jvb2wgaXNMZXR0ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gISFp
c3dhbHBoYShjKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVW5pY29kZQorfSAvLyBuYW1lc3BhY2Ug
V1RGCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9icmV3L1VuaWNvZGVCcmV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvYnJldy9Vbmljb2RlQnJl
dy5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvYnJldy9Vbmlj
b2RlQnJldy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICogIENvcHly
aWdodCAoQykgMjAxMCBDb21wYW55IDEwMCwgSW5jLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBV
bmljb2RlQnJld19oCisjZGVmaW5lIFVuaWNvZGVCcmV3X2gKKworI2luY2x1ZGUgIlVuaWNvZGVG
cm9tSUNVLmgiCisjaW5jbHVkZSAiVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaCIKKworbmFtZXNwYWNl
IFdURiB7CituYW1lc3BhY2UgVW5pY29kZSB7CisKK2VudW0gRGlyZWN0aW9uIHsKKyAgICBMZWZ0
VG9SaWdodCA9IElDVTo6VV9MRUZUX1RPX1JJR0hULAorICAgIFJpZ2h0VG9MZWZ0ID0gSUNVOjpV
X1JJR0hUX1RPX0xFRlQsCisgICAgRXVyb3BlYW5OdW1iZXIgPSBJQ1U6OlVfRVVST1BFQU5fTlVN
QkVSLAorICAgIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yID0gSUNVOjpVX0VVUk9QRUFOX05VTUJF
Ul9TRVBBUkFUT1IsCisgICAgRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yID0gSUNVOjpVX0VVUk9Q
RUFOX05VTUJFUl9URVJNSU5BVE9SLAorICAgIEFyYWJpY051bWJlciA9IElDVTo6VV9BUkFCSUNf
TlVNQkVSLAorICAgIENvbW1vbk51bWJlclNlcGFyYXRvciA9IElDVTo6VV9DT01NT05fTlVNQkVS
X1NFUEFSQVRPUiwKKyAgICBCbG9ja1NlcGFyYXRvciA9IElDVTo6VV9CTE9DS19TRVBBUkFUT1Is
CisgICAgU2VnbWVudFNlcGFyYXRvciA9IElDVTo6VV9TRUdNRU5UX1NFUEFSQVRPUiwKKyAgICBX
aGl0ZVNwYWNlTmV1dHJhbCA9IElDVTo6VV9XSElURV9TUEFDRV9ORVVUUkFMLAorICAgIE90aGVy
TmV1dHJhbCA9IElDVTo6VV9PVEhFUl9ORVVUUkFMLAorICAgIExlZnRUb1JpZ2h0RW1iZWRkaW5n
ID0gSUNVOjpVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HLAorICAgIExlZnRUb1JpZ2h0T3ZlcnJp
ZGUgPSBJQ1U6OlVfTEVGVF9UT19SSUdIVF9PVkVSUklERSwKKyAgICBSaWdodFRvTGVmdEFyYWJp
YyA9IElDVTo6VV9SSUdIVF9UT19MRUZUX0FSQUJJQywKKyAgICBSaWdodFRvTGVmdEVtYmVkZGlu
ZyA9IElDVTo6VV9SSUdIVF9UT19MRUZUX0VNQkVERElORywKKyAgICBSaWdodFRvTGVmdE92ZXJy
aWRlID0gSUNVOjpVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUsCisgICAgUG9wRGlyZWN0aW9uYWxG
b3JtYXQgPSBJQ1U6OlVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCwKKyAgICBOb25TcGFjaW5nTWFy
ayA9IElDVTo6VV9ESVJfTk9OX1NQQUNJTkdfTUFSSywKKyAgICBCb3VuZGFyeU5ldXRyYWwgPSBJ
Q1U6OlVfQk9VTkRBUllfTkVVVFJBTAorfTsKKworZW51bSBEZWNvbXBvc2l0aW9uVHlwZSB7Cisg
ICAgRGVjb21wb3NpdGlvbk5vbmUgPSBJQ1U6OlVfRFRfTk9ORSwKKyAgICBEZWNvbXBvc2l0aW9u
Q2Fub25pY2FsID0gSUNVOjpVX0RUX0NBTk9OSUNBTCwKKyAgICBEZWNvbXBvc2l0aW9uQ29tcGF0
ID0gSUNVOjpVX0RUX0NPTVBBVCwKKyAgICBEZWNvbXBvc2l0aW9uQ2lyY2xlID0gSUNVOjpVX0RU
X0NJUkNMRSwKKyAgICBEZWNvbXBvc2l0aW9uRmluYWwgPSBJQ1U6OlVfRFRfRklOQUwsCisgICAg
RGVjb21wb3NpdGlvbkZvbnQgPSBJQ1U6OlVfRFRfRk9OVCwKKyAgICBEZWNvbXBvc2l0aW9uRnJh
Y3Rpb24gPSBJQ1U6OlVfRFRfRlJBQ1RJT04sCisgICAgRGVjb21wb3NpdGlvbkluaXRpYWwgPSBJ
Q1U6OlVfRFRfSU5JVElBTCwKKyAgICBEZWNvbXBvc2l0aW9uSXNvbGF0ZWQgPSBJQ1U6OlVfRFRf
SVNPTEFURUQsCisgICAgRGVjb21wb3NpdGlvbk1lZGlhbCA9IElDVTo6VV9EVF9NRURJQUwsCisg
ICAgRGVjb21wb3NpdGlvbk5hcnJvdyA9IElDVTo6VV9EVF9OQVJST1csCisgICAgRGVjb21wb3Np
dGlvbk5vQnJlYWsgPSBJQ1U6OlVfRFRfTk9CUkVBSywKKyAgICBEZWNvbXBvc2l0aW9uU21hbGwg
PSBJQ1U6OlVfRFRfU01BTEwsCisgICAgRGVjb21wb3NpdGlvblNxdWFyZSA9IElDVTo6VV9EVF9T
UVVBUkUsCisgICAgRGVjb21wb3NpdGlvblN1YiA9IElDVTo6VV9EVF9TVUIsCisgICAgRGVjb21w
b3NpdGlvblN1cGVyID0gSUNVOjpVX0RUX1NVUEVSLAorICAgIERlY29tcG9zaXRpb25WZXJ0aWNh
bCA9IElDVTo6VV9EVF9WRVJUSUNBTCwKKyAgICBEZWNvbXBvc2l0aW9uV2lkZSA9IElDVTo6VV9E
VF9XSURFLAorfTsKKworZW51bSBDaGFyQ2F0ZWdvcnkgeworICAgIE5vQ2F0ZWdvcnkgPSAgMCwK
KyAgICBPdGhlcl9Ob3RBc3NpZ25lZCA9IFRPX01BU0soSUNVOjpVX0dFTkVSQUxfT1RIRVJfVFlQ
RVMpLAorICAgIExldHRlcl9VcHBlcmNhc2UgPSBUT19NQVNLKElDVTo6VV9VUFBFUkNBU0VfTEVU
VEVSKSwKKyAgICBMZXR0ZXJfTG93ZXJjYXNlID0gVE9fTUFTSyhJQ1U6OlVfTE9XRVJDQVNFX0xF
VFRFUiksCisgICAgTGV0dGVyX1RpdGxlY2FzZSA9IFRPX01BU0soSUNVOjpVX1RJVExFQ0FTRV9M
RVRURVIpLAorICAgIExldHRlcl9Nb2RpZmllciA9IFRPX01BU0soSUNVOjpVX01PRElGSUVSX0xF
VFRFUiksCisgICAgTGV0dGVyX090aGVyID0gVE9fTUFTSyhJQ1U6OlVfT1RIRVJfTEVUVEVSKSwK
KworICAgIE1hcmtfTm9uU3BhY2luZyA9IFRPX01BU0soSUNVOjpVX05PTl9TUEFDSU5HX01BUksp
LAorICAgIE1hcmtfRW5jbG9zaW5nID0gVE9fTUFTSyhJQ1U6OlVfRU5DTE9TSU5HX01BUkspLAor
ICAgIE1hcmtfU3BhY2luZ0NvbWJpbmluZyA9IFRPX01BU0soSUNVOjpVX0NPTUJJTklOR19TUEFD
SU5HX01BUkspLAorCisgICAgTnVtYmVyX0RlY2ltYWxEaWdpdCA9IFRPX01BU0soSUNVOjpVX0RF
Q0lNQUxfRElHSVRfTlVNQkVSKSwKKyAgICBOdW1iZXJfTGV0dGVyID0gVE9fTUFTSyhJQ1U6OlVf
TEVUVEVSX05VTUJFUiksCisgICAgTnVtYmVyX090aGVyID0gVE9fTUFTSyhJQ1U6OlVfT1RIRVJf
TlVNQkVSKSwKKworICAgIFNlcGFyYXRvcl9TcGFjZSA9IFRPX01BU0soSUNVOjpVX1NQQUNFX1NF
UEFSQVRPUiksCisgICAgU2VwYXJhdG9yX0xpbmUgPSBUT19NQVNLKElDVTo6VV9MSU5FX1NFUEFS
QVRPUiksCisgICAgU2VwYXJhdG9yX1BhcmFncmFwaCA9IFRPX01BU0soSUNVOjpVX1BBUkFHUkFQ
SF9TRVBBUkFUT1IpLAorCisgICAgT3RoZXJfQ29udHJvbCA9IFRPX01BU0soSUNVOjpVX0NPTlRS
T0xfQ0hBUiksCisgICAgT3RoZXJfRm9ybWF0ID0gVE9fTUFTSyhJQ1U6OlVfRk9STUFUX0NIQVIp
LAorICAgIE90aGVyX1ByaXZhdGVVc2UgPSBUT19NQVNLKElDVTo6VV9QUklWQVRFX1VTRV9DSEFS
KSwKKyAgICBPdGhlcl9TdXJyb2dhdGUgPSBUT19NQVNLKElDVTo6VV9TVVJST0dBVEUpLAorCisg
ICAgUHVuY3R1YXRpb25fRGFzaCA9IFRPX01BU0soSUNVOjpVX0RBU0hfUFVOQ1RVQVRJT04pLAor
ICAgIFB1bmN0dWF0aW9uX09wZW4gPSBUT19NQVNLKElDVTo6VV9TVEFSVF9QVU5DVFVBVElPTiks
CisgICAgUHVuY3R1YXRpb25fQ2xvc2UgPSBUT19NQVNLKElDVTo6VV9FTkRfUFVOQ1RVQVRJT04p
LAorICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3RvciA9IFRPX01BU0soSUNVOjpVX0NPTk5FQ1RPUl9Q
VU5DVFVBVElPTiksCisgICAgUHVuY3R1YXRpb25fT3RoZXIgPSBUT19NQVNLKElDVTo6VV9PVEhF
Ul9QVU5DVFVBVElPTiksCisKKyAgICBTeW1ib2xfTWF0aCA9IFRPX01BU0soSUNVOjpVX01BVEhf
U1lNQk9MKSwKKyAgICBTeW1ib2xfQ3VycmVuY3kgPSBUT19NQVNLKElDVTo6VV9DVVJSRU5DWV9T
WU1CT0wpLAorICAgIFN5bWJvbF9Nb2RpZmllciA9IFRPX01BU0soSUNVOjpVX01PRElGSUVSX1NZ
TUJPTCksCisgICAgU3ltYm9sX090aGVyID0gVE9fTUFTSyhJQ1U6OlVfT1RIRVJfU1lNQk9MKSwK
KworICAgIFB1bmN0dWF0aW9uX0luaXRpYWxRdW90ZSA9IFRPX01BU0soSUNVOjpVX0lOSVRJQUxf
UFVOQ1RVQVRJT04pLAorICAgIFB1bmN0dWF0aW9uX0ZpbmFsUXVvdGUgPSBUT19NQVNLKElDVTo6
VV9GSU5BTF9QVU5DVFVBVElPTikKK307CisKK1VDaGFyIGZvbGRDYXNlKFVDaGFyKTsKKworaW50
IGZvbGRDYXNlKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBz
b3VyY2UsIGludCBzb3VyY2VMZW5ndGgsIGJvb2wqIGlzRXJyb3IpOworCitpbnQgdG9Mb3dlcihV
Q2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc291cmNlLCBpbnQg
c291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKTsKKworVUNoYXIgdG9VcHBlcihVQ2hhcik7CitV
Q2hhciB0b0xvd2VyKFVDaGFyKTsKKworYm9vbCBpc1VwcGVyKFVDaGFyKTsKKworaW50IHRvVXBw
ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNvdXJjZSwg
aW50IHNvdXJjZUxlbmd0aCwgYm9vbCogaXNFcnJvcik7CisKK1VDaGFyIHRvVGl0bGVDYXNlKFVD
aGFyKTsKKworaW5saW5lIGJvb2wgaXNBcmFiaWNDaGFyKFVDaGFyMzIgYykKK3sKKyAgICByZXR1
cm4gYyA+PSAweDA2MDAgJiYgYyA8PSAweDA2RkY7Cit9CisKK2Jvb2wgaXNBbHBoYW51bWVyaWMo
VUNoYXIpOworCitDaGFyQ2F0ZWdvcnkgY2F0ZWdvcnkodW5zaWduZWQgaW50KTsKKworaW5saW5l
IGJvb2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hhciBjKQoreworICAgIHJldHVybiBjYXRlZ29yeShj
KSA9PSBTZXBhcmF0b3JfU3BhY2U7Cit9CisKK2Jvb2wgaXNQcmludGFibGVDaGFyKFVDaGFyKTsK
KworYm9vbCBpc0RpZ2l0KFVDaGFyKTsKKworYm9vbCBpc1B1bmN0KFVDaGFyKTsKKworaW5saW5l
IGJvb2wgaGFzTGluZUJyZWFraW5nUHJvcGVydHlDb21wbGV4Q29udGV4dChVQ2hhcjMyKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQhCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUg
Ym9vbCBoYXNMaW5lQnJlYWtpbmdQcm9wZXJ0eUNvbXBsZXhDb250ZXh0T3JJZGVvZ3JhcGhpYyhV
Q2hhcjMyIGMpCit7CisgICAgLy8gRklYTUUKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1VDaGFy
IG1pcnJvcmVkQ2hhcihVQ2hhcjMyKTsKKworRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyKTsK
KworYm9vbCBpc0xvd2VyKFVDaGFyKTsKKworaW50IGRpZ2l0VmFsdWUoVUNoYXIpOworCit1bnNp
Z25lZCBjaGFyIGNvbWJpbmluZ0NsYXNzKFVDaGFyMzIpOworCitEZWNvbXBvc2l0aW9uVHlwZSBk
ZWNvbXBvc2l0aW9uVHlwZShVQ2hhcjMyKTsKKworaW5saW5lIGludCB1bWVtY2FzZWNtcChjb25z
dCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIGludCBsZW4pCit7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBVQ2hhciBjMSA9IGZvbGRDYXNlKGFbaV0pOwor
ICAgICAgICBVQ2hhciBjMiA9IGZvbGRDYXNlKGJbaV0pOworICAgICAgICBpZiAoYzEgIT0gYzIp
CisgICAgICAgICAgICByZXR1cm4gYzEgLSBjMjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K2Jvb2wgaXNTcGFjZShVQ2hhcik7Citib29sIGlzTGV0dGVyKFVDaGFyKTsKKworfSAvLyBuYW1l
c3BhY2UgVW5pY29kZQorfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70690</attachid>
            <date>2010-10-13 17:39:02 -0700</date>
            <delta_ts>2010-10-13 18:02:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>unicode.patch</filename>
            <type>text/plain</type>
            <size>14150</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5NjY3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMTAtMTMgIEt3YW5nIFl1
bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbQlJFV01QXSBQb3J0IHVuaWNvZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzE2CisKKyAgICAgICAgQnJl
dyBNUCBwb3J0IHVzZXMgb25seSB0aGUgc3Vic2V0IG9mIElDVSBsaWJyYXJ5IHRvIHJlZHVjZSB0
aGUgYmluYXJ5IHNpemUuCisgICAgICAgIEZvbGxvdyB0aGUgV2luQ0UncyBpbXBsZW1lbnRhdGlv
bi4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi91bmljb2RlL1Vu
aWNvZGUuaDoKKyAgICAgICAgKiB3dGYvdW5pY29kZS9icmV3L1VuaWNvZGVCcmV3LmNwcDogQWRk
ZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvTG93ZXIpOgorICAgICAgICAoV1RGOjpVbmlj
b2RlOjp0b1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Zm9sZENhc2UpOgorICAgICAg
ICAoV1RGOjpVbmljb2RlOjppc1ByaW50YWJsZUNoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2Rl
Ojppc1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNMb3dlcik6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmlzRGlnaXQpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1B1bmN0KToK
KyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNBbHBoYW51bWVyaWMpOgorICAgICAgICAoV1RGOjpV
bmljb2RlOjp0b1RpdGxlQ2FzZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbik6
CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNhdGVnb3J5KToKKyAgICAgICAgKFdURjo6VW5pY29k
ZTo6ZGVjb21wb3NpdGlvblR5cGUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpjb21iaW5pbmdD
bGFzcyk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6Om1pcnJvcmVkQ2hhcik6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmRpZ2l0VmFsdWUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1NwYWNl
KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNMZXR0ZXIpOgorICAgICAgICAqIHd0Zi91bmlj
b2RlL2JyZXcvVW5pY29kZUJyZXcuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6Omlz
QXJhYmljQ2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjpoYXNMaW5lQnJlYWtpbmdQcm9wZXJ0eUNvbXBsZXhDb250
ZXh0KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aGFzTGluZUJyZWFraW5nUHJvcGVydHlDb21w
bGV4Q29udGV4dE9ySWRlb2dyYXBoaWMpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp1bWVtY2Fz
ZWNtcCk6CisKIDIwMTAtMTAtMTMgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsOhYy4KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0
Zm9ybS5oCShyZXZpc2lvbiA2OTcxNykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NzQsNiArNTc0LDggQEAKICNkZWZpbmUgV1RGX1VTRV9RVDRf
VU5JQ09ERSAxCiAjZWxpZiBPUyhXSU5DRSkKICNkZWZpbmUgV1RGX1VTRV9XSU5DRV9VTklDT0RF
IDEKKyNlbGlmIFBMQVRGT1JNKEJSRVdNUCkKKyNkZWZpbmUgV1RGX1VTRV9CUkVXTVBfVU5JQ09E
RSAxCiAjZWxpZiBQTEFURk9STShHVEspCiAvKiBUaGUgR1RLKyBVbmljb2RlIGJhY2tlbmQgaXMg
Y29uZmlndXJhYmxlICovCiAjZWxzZQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUv
VW5pY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNv
ZGUuaAkocmV2aXNpb24gNjk2NjcpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmlj
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9nbGliL1VuaWNvZGVHTGliLmg+CiAjZWxpZiBVU0UoV0lOQ0VfVU5JQ09ERSkKICNpbmNs
dWRlIDx3dGYvdW5pY29kZS93aW5jZS9Vbmljb2RlV2luQ0UuaD4KKyNlbGlmIFVTRShCUkVXTVBf
VU5JQ09ERSkKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9icmV3L1VuaWNvZGVCcmV3Lmg+CiAjZWxz
ZQogI2Vycm9yICJVbmtub3duIFVuaWNvZGUgaW1wbGVtZW50YXRpb24iCiAjZW5kaWYKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuY3BwCShy
ZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvYnJldy9Vbmljb2RlQnJl
dy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEw
IENvbXBhbnkgMTAwLCBJbmMuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJVbmljb2RlQnJldy5oIgorCisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5
cGUuaD4KKworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgVW5pY29kZSB7CisKK1VDaGFyIHRv
TG93ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gdG93bG93ZXIoYyk7Cit9CisKK1VDaGFyIHRv
VXBwZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gdG93dXBwZXIoYyk7Cit9CisKK1VDaGFyIGZv
bGRDYXNlKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIHRvd2xvd2VyKGMpOworfQorCitib29sIGlz
UHJpbnRhYmxlQ2hhcihVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd3ByaW50KGMpOworfQor
Citib29sIGlzVXBwZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gISFpc3d1cHBlcihjKTsKK30K
KworYm9vbCBpc0xvd2VyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuICEhaXN3bG93ZXIoYyk7Cit9
CisKK2Jvb2wgaXNEaWdpdChVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd2RpZ2l0KGMpOwor
fQorCitib29sIGlzUHVuY3QoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gISFpc3dwdW5jdChjKTsK
K30KKworYm9vbCBpc0FscGhhbnVtZXJpYyhVQ2hhciBjKQoreworICAgIHJldHVybiAhIWlzd2Fs
bnVtKGMpOworfQorCitpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3Ro
LCBjb25zdCBVQ2hhciogc291cmNlLCBpbnQgc291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKQor
eworICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VJdGVyYXRvciA9IHNvdXJjZTsKKyAgICBjb25zdCBV
Q2hhciogc291cmNlRW5kID0gc291cmNlICsgc291cmNlTGVuZ3RoOworICAgIFVDaGFyKiByZXN1
bHRJdGVyYXRvciA9IHJlc3VsdDsKKyAgICBVQ2hhciogcmVzdWx0RW5kID0gcmVzdWx0ICsgcmVz
dWx0TGVuZ3RoOworCisgICAgaWYgKHNvdXJjZUxlbmd0aCA8PSByZXN1bHRMZW5ndGgpIHsKKyAg
ICAgICAgd2hpbGUgKHNvdXJjZUl0ZXJhdG9yIDwgc291cmNlRW5kKQorICAgICAgICAgICAgKnJl
c3VsdEl0ZXJhdG9yKysgPSB0b3dsb3dlcigqc291cmNlSXRlcmF0b3IrKyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgd2hpbGUgKHJlc3VsdEl0ZXJhdG9yIDwgcmVzdWx0RW5kKQorICAgICAgICAg
ICAgKnJlc3VsdEl0ZXJhdG9yKysgPSB0b3dsb3dlcigqc291cmNlSXRlcmF0b3IrKyk7CisgICAg
fQorCisgICAgaW50IHJlbWFpbmluZ0NoYXJhY3RlcnMgPSAwOworICAgIGlmIChzb3VyY2VJdGVy
YXRvciA8IHNvdXJjZUVuZCkKKyAgICAgICAgcmVtYWluaW5nQ2hhcmFjdGVycyArPSBzb3VyY2VF
bmQgLSBzb3VyY2VJdGVyYXRvcjsKKyAgICAqaXNFcnJvciA9ICEhcmVtYWluaW5nQ2hhcmFjdGVy
czsKKyAgICBpZiAocmVzdWx0SXRlcmF0b3IgPCByZXN1bHRFbmQpCisgICAgICAgICpyZXN1bHRJ
dGVyYXRvciA9IDA7CisKKyAgICByZXR1cm4gKHJlc3VsdEl0ZXJhdG9yIC0gcmVzdWx0KSArIHJl
bWFpbmluZ0NoYXJhY3RlcnM7Cit9CisKK2ludCB0b1VwcGVyKFVDaGFyKiByZXN1bHQsIGludCBy
ZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIGludCBzb3VyY2VMZW5ndGgsIGJvb2wq
IGlzRXJyb3IpCit7CisgICAgY29uc3QgVUNoYXIqIHNvdXJjZUl0ZXJhdG9yID0gc291cmNlOwor
ICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VFbmQgPSBzb3VyY2UgKyBzb3VyY2VMZW5ndGg7CisgICAg
VUNoYXIqIHJlc3VsdEl0ZXJhdG9yID0gcmVzdWx0OworICAgIFVDaGFyKiByZXN1bHRFbmQgPSBy
ZXN1bHQgKyByZXN1bHRMZW5ndGg7CisKKyAgICBpZiAoc291cmNlTGVuZ3RoIDw9IHJlc3VsdExl
bmd0aCkgeworICAgICAgICB3aGlsZSAoc291cmNlSXRlcmF0b3IgPCBzb3VyY2VFbmQpCisgICAg
ICAgICAgICAqcmVzdWx0SXRlcmF0b3IrKyA9IHRvd3VwcGVyKCpzb3VyY2VJdGVyYXRvcisrKTsK
KyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZSAocmVzdWx0SXRlcmF0b3IgPCByZXN1bHRFbmQp
CisgICAgICAgICAgICAqcmVzdWx0SXRlcmF0b3IrKyA9IHRvd3VwcGVyKCpzb3VyY2VJdGVyYXRv
cisrKTsKKyAgICB9CisKKyAgICBpbnQgcmVtYWluaW5nQ2hhcmFjdGVycyA9IDA7CisgICAgaWYg
KHNvdXJjZUl0ZXJhdG9yIDwgc291cmNlRW5kKQorICAgICAgICByZW1haW5pbmdDaGFyYWN0ZXJz
ICs9IHNvdXJjZUVuZCAtIHNvdXJjZUl0ZXJhdG9yOworICAgICppc0Vycm9yID0gISFyZW1haW5p
bmdDaGFyYWN0ZXJzOworICAgIGlmIChyZXN1bHRJdGVyYXRvciA8IHJlc3VsdEVuZCkKKyAgICAg
ICAgKnJlc3VsdEl0ZXJhdG9yID0gMDsKKworICAgIHJldHVybiAocmVzdWx0SXRlcmF0b3IgLSBy
ZXN1bHQpICsgcmVtYWluaW5nQ2hhcmFjdGVyczsKK30KKworaW50IGZvbGRDYXNlKFVDaGFyKiBy
ZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIGludCBzb3VyY2VM
ZW5ndGgsIGJvb2wqIGlzRXJyb3IpCit7CisgICAgKmlzRXJyb3IgPSBmYWxzZTsKKyAgICBpZiAo
cmVzdWx0TGVuZ3RoIDwgc291cmNlTGVuZ3RoKSB7CisgICAgICAgICppc0Vycm9yID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHNvdXJjZUxlbmd0aDsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKKyAgICAgICAgcmVzdWx0W2ldID0gZm9sZENhc2Uoc291
cmNlW2ldKTsKKyAgICByZXR1cm4gc291cmNlTGVuZ3RoOworfQorCitVQ2hhciB0b1RpdGxlQ2Fz
ZShVQ2hhciBjKQoreworICAgIHJldHVybiB0b3d1cHBlcihjKTsKK30KKworRGlyZWN0aW9uIGRp
cmVjdGlvbihVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERpcmVjdGlvbj4o
SUNVOjpkaXJlY3Rpb24oYykpOworfQorCitDaGFyQ2F0ZWdvcnkgY2F0ZWdvcnkodW5zaWduZWQg
aW50IGMpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENoYXJDYXRlZ29yeT4oVE9fTUFTSygo
aW50OF90KSBJQ1U6OmNhdGVnb3J5KGMpKSk7Cit9CisKK0RlY29tcG9zaXRpb25UeXBlIGRlY29t
cG9zaXRpb25UeXBlKFVDaGFyMzIgYykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGVjb21w
b3NpdGlvblR5cGU+KElDVTo6ZGVjb21wb3NpdGlvblR5cGUoYykpOworfQorCit1bnNpZ25lZCBj
aGFyIGNvbWJpbmluZ0NsYXNzKFVDaGFyMzIgYykKK3sKKyAgICByZXR1cm4gSUNVOjpjb21iaW5p
bmdDbGFzcyhjKTsKK30KKworVUNoYXIgbWlycm9yZWRDaGFyKFVDaGFyMzIgYykKK3sKKyAgICBy
ZXR1cm4gSUNVOjptaXJyb3JlZENoYXIoYyk7Cit9CisKK2ludCBkaWdpdFZhbHVlKFVDaGFyIGMp
Cit7CisgICAgcmV0dXJuIElDVTo6ZGlnaXRWYWx1ZShjKTsKK30KKworYm9vbCBpc1NwYWNlKFVD
aGFyIGMpCit7CisgICAgcmV0dXJuICEhaXN3c3BhY2UoYyk7Cit9CisKK2Jvb2wgaXNMZXR0ZXIo
VUNoYXIgYykKK3sKKyAgICByZXR1cm4gISFpc3dhbHBoYShjKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgVW5pY29kZQorfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYv
dW5pY29kZS9icmV3L1VuaWNvZGVCcmV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
d3RmL3VuaWNvZGUvYnJldy9Vbmljb2RlQnJldy5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlw
dENvcmUvd3RmL3VuaWNvZGUvYnJldy9Vbmljb2RlQnJldy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0
YWlrb3NAa2RlLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diA8YXBAbnlwb3AuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAxMCBDb21wYW55IDEwMCwgSW5j
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBVbmljb2RlQnJld19oCisjZGVmaW5lIFVuaWNvZGVC
cmV3X2gKKworI2luY2x1ZGUgIlVuaWNvZGVGcm9tSUNVLmgiCisjaW5jbHVkZSAiVW5pY29kZU1h
Y3Jvc0Zyb21JQ1UuaCIKKworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgVW5pY29kZSB7CisK
K2VudW0gRGlyZWN0aW9uIHsKKyAgICBMZWZ0VG9SaWdodCA9IElDVTo6VV9MRUZUX1RPX1JJR0hU
LAorICAgIFJpZ2h0VG9MZWZ0ID0gSUNVOjpVX1JJR0hUX1RPX0xFRlQsCisgICAgRXVyb3BlYW5O
dW1iZXIgPSBJQ1U6OlVfRVVST1BFQU5fTlVNQkVSLAorICAgIEV1cm9wZWFuTnVtYmVyU2VwYXJh
dG9yID0gSUNVOjpVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1IsCisgICAgRXVyb3BlYW5OdW1i
ZXJUZXJtaW5hdG9yID0gSUNVOjpVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SLAorICAgIEFy
YWJpY051bWJlciA9IElDVTo6VV9BUkFCSUNfTlVNQkVSLAorICAgIENvbW1vbk51bWJlclNlcGFy
YXRvciA9IElDVTo6VV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUiwKKyAgICBCbG9ja1NlcGFyYXRv
ciA9IElDVTo6VV9CTE9DS19TRVBBUkFUT1IsCisgICAgU2VnbWVudFNlcGFyYXRvciA9IElDVTo6
VV9TRUdNRU5UX1NFUEFSQVRPUiwKKyAgICBXaGl0ZVNwYWNlTmV1dHJhbCA9IElDVTo6VV9XSElU
RV9TUEFDRV9ORVVUUkFMLAorICAgIE90aGVyTmV1dHJhbCA9IElDVTo6VV9PVEhFUl9ORVVUUkFM
LAorICAgIExlZnRUb1JpZ2h0RW1iZWRkaW5nID0gSUNVOjpVX0xFRlRfVE9fUklHSFRfRU1CRURE
SU5HLAorICAgIExlZnRUb1JpZ2h0T3ZlcnJpZGUgPSBJQ1U6OlVfTEVGVF9UT19SSUdIVF9PVkVS
UklERSwKKyAgICBSaWdodFRvTGVmdEFyYWJpYyA9IElDVTo6VV9SSUdIVF9UT19MRUZUX0FSQUJJ
QywKKyAgICBSaWdodFRvTGVmdEVtYmVkZGluZyA9IElDVTo6VV9SSUdIVF9UT19MRUZUX0VNQkVE
RElORywKKyAgICBSaWdodFRvTGVmdE92ZXJyaWRlID0gSUNVOjpVX1JJR0hUX1RPX0xFRlRfT1ZF
UlJJREUsCisgICAgUG9wRGlyZWN0aW9uYWxGb3JtYXQgPSBJQ1U6OlVfUE9QX0RJUkVDVElPTkFM
X0ZPUk1BVCwKKyAgICBOb25TcGFjaW5nTWFyayA9IElDVTo6VV9ESVJfTk9OX1NQQUNJTkdfTUFS
SywKKyAgICBCb3VuZGFyeU5ldXRyYWwgPSBJQ1U6OlVfQk9VTkRBUllfTkVVVFJBTAorfTsKKwor
ZW51bSBEZWNvbXBvc2l0aW9uVHlwZSB7CisgICAgRGVjb21wb3NpdGlvbk5vbmUgPSBJQ1U6OlVf
RFRfTk9ORSwKKyAgICBEZWNvbXBvc2l0aW9uQ2Fub25pY2FsID0gSUNVOjpVX0RUX0NBTk9OSUNB
TCwKKyAgICBEZWNvbXBvc2l0aW9uQ29tcGF0ID0gSUNVOjpVX0RUX0NPTVBBVCwKKyAgICBEZWNv
bXBvc2l0aW9uQ2lyY2xlID0gSUNVOjpVX0RUX0NJUkNMRSwKKyAgICBEZWNvbXBvc2l0aW9uRmlu
YWwgPSBJQ1U6OlVfRFRfRklOQUwsCisgICAgRGVjb21wb3NpdGlvbkZvbnQgPSBJQ1U6OlVfRFRf
Rk9OVCwKKyAgICBEZWNvbXBvc2l0aW9uRnJhY3Rpb24gPSBJQ1U6OlVfRFRfRlJBQ1RJT04sCisg
ICAgRGVjb21wb3NpdGlvbkluaXRpYWwgPSBJQ1U6OlVfRFRfSU5JVElBTCwKKyAgICBEZWNvbXBv
c2l0aW9uSXNvbGF0ZWQgPSBJQ1U6OlVfRFRfSVNPTEFURUQsCisgICAgRGVjb21wb3NpdGlvbk1l
ZGlhbCA9IElDVTo6VV9EVF9NRURJQUwsCisgICAgRGVjb21wb3NpdGlvbk5hcnJvdyA9IElDVTo6
VV9EVF9OQVJST1csCisgICAgRGVjb21wb3NpdGlvbk5vQnJlYWsgPSBJQ1U6OlVfRFRfTk9CUkVB
SywKKyAgICBEZWNvbXBvc2l0aW9uU21hbGwgPSBJQ1U6OlVfRFRfU01BTEwsCisgICAgRGVjb21w
b3NpdGlvblNxdWFyZSA9IElDVTo6VV9EVF9TUVVBUkUsCisgICAgRGVjb21wb3NpdGlvblN1YiA9
IElDVTo6VV9EVF9TVUIsCisgICAgRGVjb21wb3NpdGlvblN1cGVyID0gSUNVOjpVX0RUX1NVUEVS
LAorICAgIERlY29tcG9zaXRpb25WZXJ0aWNhbCA9IElDVTo6VV9EVF9WRVJUSUNBTCwKKyAgICBE
ZWNvbXBvc2l0aW9uV2lkZSA9IElDVTo6VV9EVF9XSURFLAorfTsKKworZW51bSBDaGFyQ2F0ZWdv
cnkgeworICAgIE5vQ2F0ZWdvcnkgPSAgMCwKKyAgICBPdGhlcl9Ob3RBc3NpZ25lZCA9IFRPX01B
U0soSUNVOjpVX0dFTkVSQUxfT1RIRVJfVFlQRVMpLAorICAgIExldHRlcl9VcHBlcmNhc2UgPSBU
T19NQVNLKElDVTo6VV9VUFBFUkNBU0VfTEVUVEVSKSwKKyAgICBMZXR0ZXJfTG93ZXJjYXNlID0g
VE9fTUFTSyhJQ1U6OlVfTE9XRVJDQVNFX0xFVFRFUiksCisgICAgTGV0dGVyX1RpdGxlY2FzZSA9
IFRPX01BU0soSUNVOjpVX1RJVExFQ0FTRV9MRVRURVIpLAorICAgIExldHRlcl9Nb2RpZmllciA9
IFRPX01BU0soSUNVOjpVX01PRElGSUVSX0xFVFRFUiksCisgICAgTGV0dGVyX090aGVyID0gVE9f
TUFTSyhJQ1U6OlVfT1RIRVJfTEVUVEVSKSwKKworICAgIE1hcmtfTm9uU3BhY2luZyA9IFRPX01B
U0soSUNVOjpVX05PTl9TUEFDSU5HX01BUkspLAorICAgIE1hcmtfRW5jbG9zaW5nID0gVE9fTUFT
SyhJQ1U6OlVfRU5DTE9TSU5HX01BUkspLAorICAgIE1hcmtfU3BhY2luZ0NvbWJpbmluZyA9IFRP
X01BU0soSUNVOjpVX0NPTUJJTklOR19TUEFDSU5HX01BUkspLAorCisgICAgTnVtYmVyX0RlY2lt
YWxEaWdpdCA9IFRPX01BU0soSUNVOjpVX0RFQ0lNQUxfRElHSVRfTlVNQkVSKSwKKyAgICBOdW1i
ZXJfTGV0dGVyID0gVE9fTUFTSyhJQ1U6OlVfTEVUVEVSX05VTUJFUiksCisgICAgTnVtYmVyX090
aGVyID0gVE9fTUFTSyhJQ1U6OlVfT1RIRVJfTlVNQkVSKSwKKworICAgIFNlcGFyYXRvcl9TcGFj
ZSA9IFRPX01BU0soSUNVOjpVX1NQQUNFX1NFUEFSQVRPUiksCisgICAgU2VwYXJhdG9yX0xpbmUg
PSBUT19NQVNLKElDVTo6VV9MSU5FX1NFUEFSQVRPUiksCisgICAgU2VwYXJhdG9yX1BhcmFncmFw
aCA9IFRPX01BU0soSUNVOjpVX1BBUkFHUkFQSF9TRVBBUkFUT1IpLAorCisgICAgT3RoZXJfQ29u
dHJvbCA9IFRPX01BU0soSUNVOjpVX0NPTlRST0xfQ0hBUiksCisgICAgT3RoZXJfRm9ybWF0ID0g
VE9fTUFTSyhJQ1U6OlVfRk9STUFUX0NIQVIpLAorICAgIE90aGVyX1ByaXZhdGVVc2UgPSBUT19N
QVNLKElDVTo6VV9QUklWQVRFX1VTRV9DSEFSKSwKKyAgICBPdGhlcl9TdXJyb2dhdGUgPSBUT19N
QVNLKElDVTo6VV9TVVJST0dBVEUpLAorCisgICAgUHVuY3R1YXRpb25fRGFzaCA9IFRPX01BU0so
SUNVOjpVX0RBU0hfUFVOQ1RVQVRJT04pLAorICAgIFB1bmN0dWF0aW9uX09wZW4gPSBUT19NQVNL
KElDVTo6VV9TVEFSVF9QVU5DVFVBVElPTiksCisgICAgUHVuY3R1YXRpb25fQ2xvc2UgPSBUT19N
QVNLKElDVTo6VV9FTkRfUFVOQ1RVQVRJT04pLAorICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3RvciA9
IFRPX01BU0soSUNVOjpVX0NPTk5FQ1RPUl9QVU5DVFVBVElPTiksCisgICAgUHVuY3R1YXRpb25f
T3RoZXIgPSBUT19NQVNLKElDVTo6VV9PVEhFUl9QVU5DVFVBVElPTiksCisKKyAgICBTeW1ib2xf
TWF0aCA9IFRPX01BU0soSUNVOjpVX01BVEhfU1lNQk9MKSwKKyAgICBTeW1ib2xfQ3VycmVuY3kg
PSBUT19NQVNLKElDVTo6VV9DVVJSRU5DWV9TWU1CT0wpLAorICAgIFN5bWJvbF9Nb2RpZmllciA9
IFRPX01BU0soSUNVOjpVX01PRElGSUVSX1NZTUJPTCksCisgICAgU3ltYm9sX090aGVyID0gVE9f
TUFTSyhJQ1U6OlVfT1RIRVJfU1lNQk9MKSwKKworICAgIFB1bmN0dWF0aW9uX0luaXRpYWxRdW90
ZSA9IFRPX01BU0soSUNVOjpVX0lOSVRJQUxfUFVOQ1RVQVRJT04pLAorICAgIFB1bmN0dWF0aW9u
X0ZpbmFsUXVvdGUgPSBUT19NQVNLKElDVTo6VV9GSU5BTF9QVU5DVFVBVElPTikKK307CisKK1VD
aGFyIGZvbGRDYXNlKFVDaGFyKTsKKworaW50IGZvbGRDYXNlKFVDaGFyKiByZXN1bHQsIGludCBy
ZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIGludCBzb3VyY2VMZW5ndGgsIGJvb2wq
IGlzRXJyb3IpOworCitpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3Ro
LCBjb25zdCBVQ2hhciogc291cmNlLCBpbnQgc291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKTsK
KworVUNoYXIgdG9VcHBlcihVQ2hhcik7CitVQ2hhciB0b0xvd2VyKFVDaGFyKTsKKworYm9vbCBp
c1VwcGVyKFVDaGFyKTsKKworaW50IHRvVXBwZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExl
bmd0aCwgY29uc3QgVUNoYXIqIHNvdXJjZSwgaW50IHNvdXJjZUxlbmd0aCwgYm9vbCogaXNFcnJv
cik7CisKK1VDaGFyIHRvVGl0bGVDYXNlKFVDaGFyKTsKKworaW5saW5lIGJvb2wgaXNBcmFiaWND
aGFyKFVDaGFyMzIgYykKK3sKKyAgICByZXR1cm4gYyA+PSAweDA2MDAgJiYgYyA8PSAweDA2RkY7
Cit9CisKK2Jvb2wgaXNBbHBoYW51bWVyaWMoVUNoYXIpOworCitDaGFyQ2F0ZWdvcnkgY2F0ZWdv
cnkodW5zaWduZWQgaW50KTsKKworaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hhciBj
KQoreworICAgIHJldHVybiBjYXRlZ29yeShjKSA9PSBTZXBhcmF0b3JfU3BhY2U7Cit9CisKK2Jv
b2wgaXNQcmludGFibGVDaGFyKFVDaGFyKTsKKworYm9vbCBpc0RpZ2l0KFVDaGFyKTsKKworYm9v
bCBpc1B1bmN0KFVDaGFyKTsKKworaW5saW5lIGJvb2wgaGFzTGluZUJyZWFraW5nUHJvcGVydHlD
b21wbGV4Q29udGV4dChVQ2hhcjMyKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQhCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBoYXNMaW5lQnJlYWtpbmdQcm9wZXJ0eUNv
bXBsZXhDb250ZXh0T3JJZGVvZ3JhcGhpYyhVQ2hhcjMyIGMpCit7CisgICAgLy8gRklYTUUKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK1VDaGFyIG1pcnJvcmVkQ2hhcihVQ2hhcjMyKTsKKworRGly
ZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyKTsKKworYm9vbCBpc0xvd2VyKFVDaGFyKTsKKworaW50
IGRpZ2l0VmFsdWUoVUNoYXIpOworCit1bnNpZ25lZCBjaGFyIGNvbWJpbmluZ0NsYXNzKFVDaGFy
MzIpOworCitEZWNvbXBvc2l0aW9uVHlwZSBkZWNvbXBvc2l0aW9uVHlwZShVQ2hhcjMyKTsKKwor
aW5saW5lIGludCB1bWVtY2FzZWNtcChjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIGlu
dCBsZW4pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBV
Q2hhciBjMSA9IGZvbGRDYXNlKGFbaV0pOworICAgICAgICBVQ2hhciBjMiA9IGZvbGRDYXNlKGJb
aV0pOworICAgICAgICBpZiAoYzEgIT0gYzIpCisgICAgICAgICAgICByZXR1cm4gYzEgLSBjMjsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgaXNTcGFjZShVQ2hhcik7Citib29sIGlz
TGV0dGVyKFVDaGFyKTsKKworfSAvLyBuYW1lc3BhY2UgVW5pY29kZQorfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>