From: KOSAKI Motohiro Date: 2010-01-05T23:29:18+09:00 Subject: [ruby-dev:39971] Fedora12上でrubyがビルドできません --0016e64c0616914dc9047c6b90ed Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit kosaki と申します。 本日はじめてrubyのコンパイルをトライしてみた初心者なのですが、手元の環境(Fedora12 上でrubyのtrunkをビルド)ではビルドできないようです。 具体的に言うと、ext/opensslがコンパイルとおりません。以下のエラーが出ます。 gcc -I. -I../../.ext/include/x86_64-linux -I../.././include -I../.././ext/openssl -DRUBY_EXTCONF_H=\"extconf.h\" -fPIC -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long -o ossl_ssl.o -c ossl_ssl.c ossl_ssl.c:107: 警告: initialization from incompatible pointer type ossl_ssl.c:108: 警告: initialization from incompatible pointer type ossl_ssl.c:109: 警告: initialization from incompatible pointer type ossl_ssl.c:110: 警告: initialization from incompatible pointer type ossl_ssl.c:111: 警告: initialization from incompatible pointer type ossl_ssl.c:112: 警告: initialization from incompatible pointer type ossl_ssl.c:113: 警告: initialization from incompatible pointer type ossl_ssl.c:114: 警告: initialization from incompatible pointer type ossl_ssl.c:115: 警告: initialization from incompatible pointer type ossl_ssl.c:116: 警告: initialization from incompatible pointer type ossl_ssl.c:117: 警告: initialization from incompatible pointer type ossl_ssl.c:118: 警告: initialization from incompatible pointer type ossl_ssl.c: In function ‘ossl_sslctx_set_ssl_version’: ossl_ssl.c:162: 警告: 符合付きと符合無しの整数式同士の比較です ossl_ssl.c: In function ‘ossl_sslctx_initialize’: ossl_ssl.c:193: 警告: 符合付きと符合無しの整数式同士の比較です ossl_ssl.c: In function ‘ossl_sslctx_get_ciphers’: ossl_ssl.c:703: error: ‘STACK’ undeclared (first use in this function) ossl_ssl.c:703: error: (Each undeclared identifier is reported only once ossl_ssl.c:703: error: for each function it appears in.) ossl_ssl.c:703: error: expected expression before ‘)’ token ossl_ssl.c:706: error: expected expression before ‘)’ token ossl_ssl.c:706: error: too few arguments to function ‘sk_value’ ossl_ssl.c: In function ‘ossl_ssl_get_peer_cert_chain’: ossl_ssl.c:1406: 警告: passing argument 1 of ‘sk_num’ from incompatible pointer type /usr/include/openssl/stack.h:79: note: expected ‘const struct _STACK *’ but argument is of type ‘struct stack_st_X509 *’ ossl_ssl.c:1409: 警告: passing argument 1 of ‘sk_value’ from incompatible pointer type /usr/include/openssl/stack.h:80: note: expected ‘const struct _STACK *’ but argument is of type ‘struct stack_st_X509 *’ ossl_ssl.c: In function ‘ossl_ssl_get_cipher’: ossl_ssl.c:1431: 警告: assignment discards qualifiers from pointer target type ossl_ssl.c: In function ‘Init_ossl_ssl’: ossl_ssl.c:1577: 警告: 符合付きと符合無しの整数式同士の比較です ossl_ssl.c:1606: 警告: 符合付きと符合無しの整数式同士の比較です ossl_ssl.c:1621: 警告: 符合付きと符合無しの整数式同士の比較です ossl_ssl.c:1623: 警告: 符合付きと符合無しの整数式同士の比較です make[1]: *** [ossl_ssl.o] エラー 1 で、理由なんですが、Fedora12ではopensslが1.0.0-beta4 が収録されており、stack_st がrenameされてしまっているようです。 openssl-1.0.0-beta4のstack.h の定義 typedef struct stack_st { int num; char **data; int sorted; int num_alloc; int (*comp)(const void *, const void *); } _STACK; /* Use STACK_OF(...) instead */ openssl-0.9.8l (安定版、たぶんdebianとかが使っているのはこちら) typedef struct stack_st { int num; char **data; int sorted; int num_alloc; int (*comp)(const char * const *, const char * const *); } STACK; 解決案として 4案考えました 1)ruby側でSTACKの代わりに struct stack_stを使うよう置換してまわる 2)ruby側を、ただしくSTACK_OFを使うよう置換して回る 3)openssl 側に勝手にrenameすんなと文句をいう 4)もういっそのことrubyのビルドはあきらめて、yuguiさんにはごめんという ;-) ためしに2)の方針で作ったパッチが添付のものです。 2つ汚い点があります。 1) ossl.h に +/* for compatible ssl-0.9.x */ +#ifndef lh_CONF_VALUE_doall_arg +#define lh_CONF_VALUE_doall_arg(lh,fn,arg_type,arg) lh_doall_arg(lh,fn,arg) +#endif なんていう行を足してしまっている 2)ossl_x509attr.c が以下の警告を出す ossl_x509attr.c: In function ‘ossl_x509attr_get_value’: ossl_x509attr.c:221: 警告: passing argument 1 of ‘i2d_ASN1_SET’ from incompatible pointer type /usr/include/openssl/asn1.h:894: note: expected ‘struct stack_st_OPENSSL_BLOCK *’ but argument is of type ‘struct \ _STACK *’ ossl_x509attr.c:225: 警告: passing argument 1 of ‘i2d_ASN1_SET’ from incompatible pointer type /usr/include/openssl/asn1.h:894: note: expected ‘struct stack_st_OPENSSL_BLOCK *’ but argument is of type ‘struct \ _STACK *’ これは、openssl-1.0.0-beta4 の SKM_ASN1_SET_OF_i2d 定義が間違っていて #define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \ i2d_ASN1_SET(CHECKED_PTR_OF(STACK_OF(type), st), pp, \ CHECKED_I2D_OF(type, i2d_func), \ ex_tag, ex_class, is_set) としなければいけないのに、 #define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \ i2d_ASN1_SET(CHECKED_STACK_OF(type, st), pp, \ CHECKED_I2D_OF(type, i2d_func), \ ex_tag, ex_class, is_set) としてしまっているからで、ruby側では直しようがないと判断して放置してあります。 手元で openssl-0.9.8l と openssl-1.0.0-beta4 でコンパイルテストだけしてありますが、実テストは0です。 (そもそもどうやって使うクラスなんだろう状態なので) 誰か詳しい人が降臨して、直してくれないかなぁ。とか思いつつパッチを投稿してみます。 ps 細かいことですが、trunkのビルドをするのに、--with-baseruby=RUBY オプションが必須という情報がどこにもドキュメントがない気がします ps2 さらに細かいことですが、ビルド用の前提ソフト一覧(ruby, autoconf, bisonを新規インストールする必要がありました)もあるとうれしいような気がします --0016e64c0616914dc9047c6b90ed Content-Type: application/octet-stream; name="0001-ext-openssl-fix-compile-error.patch" Content-Disposition: attachment; filename="0001-ext-openssl-fix-compile-error.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g42rd4ir0 RnJvbSBjZmE2NzU0MjNlZDFmMzdkOTliMjliN2I2NzdhNDIwYzc0ZjllNmI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLT1NBS0kgTW90b2hpcm8gPGtvc2FraS5tb3RvaGlyb0BqcC5m dWppdHN1LmNvbT4KRGF0ZTogVHVlLCA1IEphbiAyMDEwIDIzOjAxOjQ2ICswOTAwClN1YmplY3Q6 IFtQQVRDSF0gZXh0L29wZW5zc2w6IGZpeCBjb21waWxlIGVycm9yCgotLS0KIGV4dC9vcGVuc3Ns L29zc2wuYyAgICAgICAgIHwgICAgNiArKystLS0KIGV4dC9vcGVuc3NsL29zc2wuaCAgICAgICAg IHwgICAgNSArKysrKwogZXh0L29wZW5zc2wvb3NzbF9jb25maWcuYyAgfCAgICA2ICsrKy0tLQog ZXh0L29wZW5zc2wvb3NzbF9wa2NzNy5jICAgfCAgIDQxICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0tCiBleHQvb3BlbnNzbC9vc3NsX3NzbC5jICAgICB8ICAgIDggKysr Ky0tLS0KIGV4dC9vcGVuc3NsL29zc2xfeDUwOWNybC5jIHwgICAgNCArKy0tCiA2IGZpbGVzIGNo YW5nZWQsIDQ4IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2V4 dC9vcGVuc3NsL29zc2wuYyBiL2V4dC9vcGVuc3NsL29zc2wuYwppbmRleCBiNTlhMGM5Li5hNWQ0 YzYwIDEwMDY0NAotLS0gYS9leHQvb3BlbnNzbC9vc3NsLmMKKysrIGIvZXh0L29wZW5zc2wvb3Nz bC5jCkBAIC05Miw3ICs5Miw3IEBAIG9zc2xfeDUwOV9hcnkyc2soVkFMVUUgYXJ5KQogCiAjZGVm aW5lIE9TU0xfSU1QTF9TSzJBUlkobmFtZSwgdHlwZSkJICAgICAgICBcCiBWQUxVRQkJCQkJCVwK LW9zc2xfIyNuYW1lIyNfc2syYXJ5KFNUQUNLICpzaykJCQlcCitvc3NsXyMjbmFtZSMjX3NrMmFy eShTVEFDS19PRih0eXBlKSAqc2spCVwKIHsJCQkJCQlcCiAgICAgdHlwZSAqdDsJCQkJCVwKICAg ICBpbnQgaSwgbnVtOwkJCQkJXApAQCAtMTAyLDcgKzEwMiw3IEBAIG9zc2xfIyNuYW1lIyNfc2sy YXJ5KFNUQUNLICpzaykJCQlcCiAJT1NTTF9EZWJ1ZygiZW1wdHkgc2shIik7CQlcCiAJcmV0dXJu IFFuaWw7CQkJCVwKICAgICB9CQkJCQkJXAotICAgIG51bSA9IHNrX251bShzayk7CQkJCVwKKyAg ICBudW0gPSBza18jI3R5cGUjI19udW0oc2spOwkJCVwKICAgICBpZiAobnVtIDwgMCkgewkJCQlc CiAJT1NTTF9EZWJ1ZygiaXRlbXMgaW4gc2sgPCAtMT8/PyIpOwlcCiAJcmV0dXJuIHJiX2FyeV9u ZXcoKTsJCQlcCkBAIC0xMTAsNyArMTEwLDcgQEAgb3NzbF8jI25hbWUjI19zazJhcnkoU1RBQ0sg KnNrKQkJCVwKICAgICBhcnkgPSByYl9hcnlfbmV3MihudW0pOwkJCVwKIAkJCQkJCVwKICAgICBm b3IgKGk9MDsgaTxudW07IGkrKykgewkJCVwKLQl0ID0gKHR5cGUgKilza192YWx1ZShzaywgaSk7 CQlcCisJdCA9IHNrXyMjdHlwZSMjX3ZhbHVlKHNrLCBpKTsJCVwKIAlyYl9hcnlfcHVzaChhcnks IG9zc2xfIyNuYW1lIyNfbmV3KHQpKTsJXAogICAgIH0JCQkJCQlcCiAgICAgcmV0dXJuIGFyeTsJ CQkJCVwKZGlmZiAtLWdpdCBhL2V4dC9vcGVuc3NsL29zc2wuaCBiL2V4dC9vcGVuc3NsL29zc2wu aAppbmRleCBiZjYwOWZlLi40MDgzMTdiIDEwMDY0NAotLS0gYS9leHQvb3BlbnNzbC9vc3NsLmgK KysrIGIvZXh0L29wZW5zc2wvb3NzbC5oCkBAIC0yMTQsNiArMjE0LDExIEBAIHZvaWQgb3NzbF9k ZWJ1Zyhjb25zdCBjaGFyICosIC4uLik7CiAKIHZvaWQgSW5pdF9vcGVuc3NsKHZvaWQpOwogCisv KiBmb3IgY29tcGF0aWJsZSBzc2wtMC45LnggKi8KKyNpZm5kZWYgbGhfQ09ORl9WQUxVRV9kb2Fs bF9hcmcKKyNkZWZpbmUgbGhfQ09ORl9WQUxVRV9kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJn KSBsaF9kb2FsbF9hcmcobGgsZm4sYXJnKQorI2VuZGlmCisKICNpZiBkZWZpbmVkKF9fY3BsdXNw bHVzKQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9leHQvb3BlbnNzbC9vc3NsX2NvbmZpZy5jIGIv ZXh0L29wZW5zc2wvb3NzbF9jb25maWcuYwppbmRleCA2ZGQyMTk4Li41Yjk0MTE2IDEwMDY0NAot LS0gYS9leHQvb3BlbnNzbC9vc3NsX2NvbmZpZy5jCisrKyBiL2V4dC9vcGVuc3NsL29zc2xfY29u ZmlnLmMKQEAgLTMzMCw3ICszMzAsNyBAQCBvc3NsX2NvbmZpZ19nZXRfc2VjdGlvbnMoVkFMVUUg c2VsZikKIAogICAgIEdldENvbmZpZyhzZWxmLCBjb25mKTsKICAgICBhcnkgPSByYl9hcnlfbmV3 KCk7Ci0gICAgbGhfZG9hbGxfYXJnKGNvbmYtPmRhdGEsIExIQVNIX0RPQUxMX0FSR19GTihnZXRf Y29uZl9zZWN0aW9uKSwgKHZvaWQqKWFyeSk7CisgICAgbGhfQ09ORl9WQUxVRV9kb2FsbF9hcmco Y29uZi0+ZGF0YSwgTEhBU0hfRE9BTExfQVJHX0ZOKGdldF9jb25mX3NlY3Rpb24pLCB2b2lkLCAo dm9pZCopYXJ5KTsKIAogICAgIHJldHVybiBhcnk7CiB9CkBAIC0zNjYsNyArMzY2LDcgQEAgZHVt cF9jb25mKENPTkYgKmNvbmYpCiAgICAgVkFMVUUgc3RyOwogCiAgICAgc3RyID0gcmJfc3RyX25l dygwLCAwKTsKLSAgICBsaF9kb2FsbF9hcmcoY29uZi0+ZGF0YSwgTEhBU0hfRE9BTExfQVJHX0ZO KGR1bXBfY29uZl92YWx1ZSksICh2b2lkKilzdHIpOworICAgIGxoX0NPTkZfVkFMVUVfZG9hbGxf YXJnKGNvbmYtPmRhdGEsIExIQVNIX0RPQUxMX0FSR19GTihkdW1wX2NvbmZfdmFsdWUpLCB2b2lk LCAodm9pZCopc3RyKTsKIAogICAgIHJldHVybiBzdHI7CiB9CkBAIC00MTIsNyArNDEyLDcgQEAg b3NzbF9jb25maWdfZWFjaChWQUxVRSBzZWxmKQogICAgIFJFVFVSTl9FTlVNRVJBVE9SKHNlbGYs IDAsIDApOwogCiAgICAgR2V0Q29uZmlnKHNlbGYsIGNvbmYpOwotICAgIGxoX2RvYWxsX2FyZyhj b25mLT5kYXRhLCBMSEFTSF9ET0FMTF9BUkdfRk4oZWFjaF9jb25mX3ZhbHVlKSwgKHZvaWQqKU5V TEwpOworICAgIGxoX0NPTkZfVkFMVUVfZG9hbGxfYXJnKGNvbmYtPmRhdGEsIExIQVNIX0RPQUxM X0FSR19GTihlYWNoX2NvbmZfdmFsdWUpLCB2b2lkLCAodm9pZCopTlVMTCk7CiAKICAgICByZXR1 cm4gc2VsZjsKIH0KZGlmZiAtLWdpdCBhL2V4dC9vcGVuc3NsL29zc2xfcGtjczcuYyBiL2V4dC9v cGVuc3NsL29zc2xfcGtjczcuYwppbmRleCAzMzY4YmIwLi4zZTEzNmJiIDEwMDY0NAotLS0gYS9l eHQvb3BlbnNzbC9vc3NsX3BrY3M3LmMKKysrIGIvZXh0L29wZW5zc2wvb3NzbF9wa2NzNy5jCkBA IC01NzIsMTIgKzU3MiwxMSBAQCBvc3NsX3BrY3M3X2FkZF9jZXJ0aWZpY2F0ZShWQUxVRSBzZWxm LCBWQUxVRSBjZXJ0KQogICAgIHJldHVybiBzZWxmOwogfQogCi1zdGF0aWMgU1RBQ0sgKgotcGtj czdfZ2V0X2NlcnRzX29yX2NybHMoVkFMVUUgc2VsZiwgaW50IHdhbnRfY2VydHMpCitzdGF0aWMg U1RBQ0tfT0YoWDUwOSkqCitwa2NzN19nZXRfY2VydHMoVkFMVUUgc2VsZikKIHsKICAgICBQS0NT NyAqcGtjczc7CiAgICAgU1RBQ0tfT0YoWDUwOSkgKmNlcnRzOwotICAgIFNUQUNLX09GKFg1MDlf Q1JMKSAqY3JsczsKICAgICBpbnQgaTsKIAogICAgIEdldFBLQ1M3KHNlbGYsIHBrY3M3KTsKQEAg LTU4NSwxOSArNTg0LDQxIEBAIHBrY3M3X2dldF9jZXJ0c19vcl9jcmxzKFZBTFVFIHNlbGYsIGlu dCB3YW50X2NlcnRzKQogICAgIHN3aXRjaChpKXsKICAgICBjYXNlIE5JRF9wa2NzN19zaWduZWQ6 CiAgICAgICAgIGNlcnRzID0gcGtjczctPmQuc2lnbi0+Y2VydDsKLSAgICAgICAgY3JscyA9IHBr Y3M3LT5kLnNpZ24tPmNybDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOSURfcGtjczdfc2ln bmVkQW5kRW52ZWxvcGVkOgogICAgICAgICBjZXJ0cyA9IHBrY3M3LT5kLnNpZ25lZF9hbmRfZW52 ZWxvcGVkLT5jZXJ0OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBjZXJ0 cyA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGNlcnRzOworfQorCitzdGF0aWMgU1RBQ0tf T0YoWDUwOV9DUkwpKgorcGtjczdfZ2V0X2NybHMoVkFMVUUgc2VsZikKK3sKKyAgICBQS0NTNyAq cGtjczc7CisgICAgU1RBQ0tfT0YoWDUwOV9DUkwpICpjcmxzOworICAgIGludCBpOworCisgICAg R2V0UEtDUzcoc2VsZiwgcGtjczcpOworICAgIGkgPSBPQkpfb2JqMm5pZChwa2NzNy0+dHlwZSk7 CisgICAgc3dpdGNoKGkpeworICAgIGNhc2UgTklEX3BrY3M3X3NpZ25lZDoKKyAgICAgICAgY3Js cyA9IHBrY3M3LT5kLnNpZ24tPmNybDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOSURfcGtj czdfc2lnbmVkQW5kRW52ZWxvcGVkOgogICAgICAgICBjcmxzID0gcGtjczctPmQuc2lnbmVkX2Fu ZF9lbnZlbG9wZWQtPmNybDsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg Y2VydHMgPSBjcmxzID0gTlVMTDsKKyAgICAgICAgY3JscyA9IE5VTEw7CiAgICAgfQogCi0gICAg cmV0dXJuIHdhbnRfY2VydHMgPyBjZXJ0cyA6IGNybHM7CisgICAgcmV0dXJuIGNybHM7CiB9CiAK Kwogc3RhdGljIFZBTFVFCiBvc3NsX3BrY3M3X3NldF9jZXJ0c19pKFZBTFVFIGksIFZBTFVFIGFy ZykKIHsKQEAgLTYxMCw3ICs2MzEsNyBAQCBvc3NsX3BrY3M3X3NldF9jZXJ0aWZpY2F0ZXMoVkFM VUUgc2VsZiwgVkFMVUUgYXJ5KQogICAgIFNUQUNLX09GKFg1MDkpICpjZXJ0czsKICAgICBYNTA5 ICpjZXJ0OwogCi0gICAgY2VydHMgPSBwa2NzN19nZXRfY2VydHNfb3JfY3JscyhzZWxmLCAxKTsK KyAgICBjZXJ0cyA9IHBrY3M3X2dldF9jZXJ0cyhzZWxmKTsKICAgICB3aGlsZSgoY2VydCA9IHNr X1g1MDlfcG9wKGNlcnRzKSkpIFg1MDlfZnJlZShjZXJ0KTsKICAgICByYl9ibG9ja19jYWxsKGFy eSwgcmJfaW50ZXJuKCJlYWNoIiksIDAsIDAsIG9zc2xfcGtjczdfc2V0X2NlcnRzX2ksIHNlbGYp OwogCkBAIC02MjAsNyArNjQxLDcgQEAgb3NzbF9wa2NzN19zZXRfY2VydGlmaWNhdGVzKFZBTFVF IHNlbGYsIFZBTFVFIGFyeSkKIHN0YXRpYyBWQUxVRQogb3NzbF9wa2NzN19nZXRfY2VydGlmaWNh dGVzKFZBTFVFIHNlbGYpCiB7Ci0gICAgcmV0dXJuIG9zc2xfeDUwOV9zazJhcnkocGtjczdfZ2V0 X2NlcnRzX29yX2NybHMoc2VsZiwgMSkpOworICAgIHJldHVybiBvc3NsX3g1MDlfc2syYXJ5KHBr Y3M3X2dldF9jZXJ0cyhzZWxmKSk7CiB9CiAKIHN0YXRpYyBWQUxVRQpAQCAtNjUwLDcgKzY3MSw3 IEBAIG9zc2xfcGtjczdfc2V0X2NybHMoVkFMVUUgc2VsZiwgVkFMVUUgYXJ5KQogICAgIFNUQUNL X09GKFg1MDlfQ1JMKSAqY3JsczsKICAgICBYNTA5X0NSTCAqY3JsOwogCi0gICAgY3JscyA9IHBr Y3M3X2dldF9jZXJ0c19vcl9jcmxzKHNlbGYsIDApOworICAgIGNybHMgPSBwa2NzN19nZXRfY3Js cyhzZWxmKTsKICAgICB3aGlsZSgoY3JsID0gc2tfWDUwOV9DUkxfcG9wKGNybHMpKSkgWDUwOV9D UkxfZnJlZShjcmwpOwogICAgIHJiX2Jsb2NrX2NhbGwoYXJ5LCByYl9pbnRlcm4oImVhY2giKSwg MCwgMCwgb3NzbF9wa2NzN19zZXRfY3Jsc19pLCBzZWxmKTsKIApAQCAtNjYwLDcgKzY4MSw3IEBA IG9zc2xfcGtjczdfc2V0X2NybHMoVkFMVUUgc2VsZiwgVkFMVUUgYXJ5KQogc3RhdGljIFZBTFVF CiBvc3NsX3BrY3M3X2dldF9jcmxzKFZBTFVFIHNlbGYpCiB7Ci0gICAgcmV0dXJuIG9zc2xfeDUw OWNybF9zazJhcnkocGtjczdfZ2V0X2NlcnRzX29yX2NybHMoc2VsZiwgMCkpOworICAgIHJldHVy biBvc3NsX3g1MDljcmxfc2syYXJ5KHBrY3M3X2dldF9jcmxzKHNlbGYpKTsKIH0KIAogc3RhdGlj IFZBTFVFCmRpZmYgLS1naXQgYS9leHQvb3BlbnNzbC9vc3NsX3NzbC5jIGIvZXh0L29wZW5zc2wv b3NzbF9zc2wuYwppbmRleCA0MjA0NDRiLi40ZDI2MjE5IDEwMDY0NAotLS0gYS9leHQvb3BlbnNz bC9vc3NsX3NzbC5jCisrKyBiL2V4dC9vcGVuc3NsL29zc2xfc3NsLmMKQEAgLTcwMCwxMCArNzAw LDEwIEBAIG9zc2xfc3NsY3R4X2dldF9jaXBoZXJzKFZBTFVFIHNlbGYpCiAgICAgaWYgKCFjaXBo ZXJzKQogICAgICAgICByZXR1cm4gcmJfYXJ5X25ldygpOwogCi0gICAgbnVtID0gc2tfbnVtKChT VEFDSyopY2lwaGVycyk7CisgICAgbnVtID0gc2tfU1NMX0NJUEhFUl9udW0oY2lwaGVycyk7CiAg ICAgYXJ5ID0gcmJfYXJ5X25ldzIobnVtKTsKICAgICBmb3IoaSA9IDA7IGkgPCBudW07IGkrKyl7 Ci0gICAgICAgIGNpcGhlciA9IChTU0xfQ0lQSEVSKilza192YWx1ZSgoU1RBQ0sqKWNpcGhlcnMs IGkpOworICAgICAgICBjaXBoZXIgPSBza19TU0xfQ0lQSEVSX3ZhbHVlKGNpcGhlcnMsIGkpOwog ICAgICAgICByYl9hcnlfcHVzaChhcnksIG9zc2xfc3NsX2NpcGhlcl90b19hcnkoY2lwaGVyKSk7 CiAgICAgfQogICAgIHJldHVybiBhcnk7CkBAIC0xNDAzLDEwICsxNDAzLDEwIEBAIG9zc2xfc3Ns X2dldF9wZWVyX2NlcnRfY2hhaW4oVkFMVUUgc2VsZikKICAgICB9CiAgICAgY2hhaW4gPSBTU0xf Z2V0X3BlZXJfY2VydF9jaGFpbihzc2wpOwogICAgIGlmKCFjaGFpbikgcmV0dXJuIFFuaWw7Ci0g ICAgbnVtID0gc2tfbnVtKGNoYWluKTsKKyAgICBudW0gPSBza19YNTA5X251bShjaGFpbik7CiAg ICAgYXJ5ID0gcmJfYXJ5X25ldzIobnVtKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKysp ewotCWNlcnQgPSAoWDUwOSopc2tfdmFsdWUoY2hhaW4sIGkpOworCWNlcnQgPSBza19YNTA5X3Zh bHVlKGNoYWluLCBpKTsKIAlyYl9hcnlfcHVzaChhcnksIG9zc2xfeDUwOV9uZXcoY2VydCkpOwog ICAgIH0KIApkaWZmIC0tZ2l0IGEvZXh0L29wZW5zc2wvb3NzbF94NTA5Y3JsLmMgYi9leHQvb3Bl bnNzbC9vc3NsX3g1MDljcmwuYwppbmRleCA3NDY4MzNlLi5mNTQ5NWI4IDEwMDY0NAotLS0gYS9l eHQvb3BlbnNzbC9vc3NsX3g1MDljcmwuYworKysgYi9leHQvb3BlbnNzbC9vc3NsX3g1MDljcmwu YwpAQCAtMjY0LDcgKzI2NCw3IEBAIG9zc2xfeDUwOWNybF9nZXRfcmV2b2tlZChWQUxVRSBzZWxm KQogICAgIFZBTFVFIGFyeSwgcmV2b2tlZDsKIAogICAgIEdldFg1MDlDUkwoc2VsZiwgY3JsKTsK LSAgICBudW0gPSBza19YNTA5X0NSTF9udW0oWDUwOV9DUkxfZ2V0X1JFVk9LRUQoY3JsKSk7Cisg ICAgbnVtID0gc2tfWDUwOV9SRVZPS0VEX251bShYNTA5X0NSTF9nZXRfUkVWT0tFRChjcmwpKTsK ICAgICBpZiAobnVtIDwgMCkgewogCU9TU0xfRGVidWcoIm51bSA8IDA/Pz8iKTsKIAlyZXR1cm4g cmJfYXJ5X25ldygpOwpAQCAtMjcyLDcgKzI3Miw3IEBAIG9zc2xfeDUwOWNybF9nZXRfcmV2b2tl ZChWQUxVRSBzZWxmKQogICAgIGFyeSA9IHJiX2FyeV9uZXcyKG51bSk7CiAgICAgZm9yKGk9MDsg aTxudW07IGkrKykgewogCS8qIE5PIERVUCAtIGRvbid0IGZyZWUhICovCi0JcmV2ID0gKFg1MDlf UkVWT0tFRCAqKXNrX1g1MDlfQ1JMX3ZhbHVlKFg1MDlfQ1JMX2dldF9SRVZPS0VEKGNybCksIGkp OworCXJldiA9IHNrX1g1MDlfUkVWT0tFRF92YWx1ZShYNTA5X0NSTF9nZXRfUkVWT0tFRChjcmwp LCBpKTsKIAlyZXZva2VkID0gb3NzbF94NTA5cmV2b2tlZF9uZXcocmV2KTsKIAlyYl9hcnlfcHVz aChhcnksIHJldm9rZWQpOwogICAgIH0KLS0gCjEuNi42Cgo= --0016e64c0616914dc9047c6b90ed--