From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21332 invoked by alias); 11 Apr 2011 20:54:46 -0000 Received: (qmail 21322 invoked by uid 22791); 11 Apr 2011 20:54:43 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_AV,TW_VX,TW_XV,TW_ZJ,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-pv0-f175.google.com (HELO mail-pv0-f175.google.com) (74.125.83.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 11 Apr 2011 20:54:36 +0000 Received: by pvc30 with SMTP id 30so3372317pvc.20 for ; Mon, 11 Apr 2011 13:54:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.165.14 with SMTP id n14mr5443916wfe.109.1302555276073; Mon, 11 Apr 2011 13:54:36 -0700 (PDT) Received: by 10.143.165.9 with HTTP; Mon, 11 Apr 2011 13:54:35 -0700 (PDT) Date: Mon, 11 Apr 2011 20:54:00 -0000 Message-ID: Subject: [PATCH 5/n, i386]: Merge SSE and AVX patterns using "enable" attribute. From: Uros Bizjak To: gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary=000e0cd2e2c687e07304a0aac876 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-04/txt/msg00805.txt.bz2 --000e0cd2e2c687e07304a0aac876 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1456 Hello! Attached patch merges "Parallel bitwise logical operations" section of sse.md. In addition to the merge, the patch also enables these patterns for TARGET_SSE (using PS version of the insn) and handles TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL target flag. 2011-04-12 Uros Bizjak * config/i386/sse.md (VI): New mode iterator. (SSEMODEI): Remove. (AVX256MODEI): Ditto. (AVXMODEF4P): Ditto. (avxvecpsmode): Ditto. (one_cmpl2): Enable for TARGET_SSE. Use VI mode iterator. (sse2_andnot3): New expander. (*andnot3): Merge with *sse2_andnot3 and *avx_andnot3. Enable for TARGET_SSE. Use VI mode iterator. Handle TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL target flag. (3): Use VI mode iterator. (*3): Merge with *sse2_3 and *avx_3. Enable for TARGET_SSE. Use VI mode iterator. Handle TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL target flag. (*andnottf3): Handle AVX three-operand constraints. Enable for TARGET_SSE. Handle TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL target flag. (tf3): Enable for TARGET_SSE. (*tf3): Handle AVX three-operand constraints. Enable for TARGET_SSE. Handle TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL target flag. Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32} AVX target. Patch was committed to mainline SVN. Uros. --000e0cd2e2c687e07304a0aac876 Content-Type: text/plain; charset=US-ASCII; name="s.diff.txt" Content-Disposition: attachment; filename="s.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gmdvrmhr0 Content-length: 17512 SW5kZXg6IHNzZS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzc2Uu bWQJKHJldmlzaW9uIDE3MjI2NikKKysrIHNzZS5tZAkod29ya2luZyBjb3B5 KQpAQCAtMzYsNiArMzYsMTMgQEAKIChkZWZpbmVfbW9kZV9pdGVyYXRvciBW Rl8xMjgKICAgWyhWNFNGICJUQVJHRVRfU1NFIikgKFYyREYgIlRBUkdFVF9T U0UyIildKQogCis7OyBBbGwgdmVjdG9yIGludGVnZXIgbW9kZXMKKyhkZWZp bmVfbW9kZV9pdGVyYXRvciBWSQorICBbKFYzMlFJICJUQVJHRVRfQVZYIikg VjE2UUkKKyAgIChWMTZISSAiVEFSR0VUX0FWWCIpIFY4SEkKKyAgIChWOFNJ ICJUQVJHRVRfQVZYIikgVjRTSQorICAgKFY0REkgIlRBUkdFVF9BVlgiKSBW MkRJXSkKKwogOzsgQWxsIDEyOGJpdCB2ZWN0b3IgaW50ZWdlciBtb2Rlcwog KGRlZmluZV9tb2RlX2l0ZXJhdG9yIFZJXzEyOCBbVjE2UUkgVjhISSBWNFNJ IFYyREldKQogCkBAIC01MCwxNiArNTcsMTAgQEAKIDs7IEluc3RydWN0aW9u IHN1ZmZpeCBmb3Igc2lnbiBhbmQgemVybyBleHRlbnNpb25zLgogKGRlZmlu ZV9jb2RlX2F0dHIgZXh0c3VmZml4IFsoc2lnbl9leHRlbmQgInN4IikgKHpl cm9fZXh0ZW5kICJ6eCIpXSkKIAotOzsgMTYgYnl0ZSBpbnRlZ3JhbCBtb2Rl cyBoYW5kbGVkIGJ5IFNTRQotKGRlZmluZV9tb2RlX2l0ZXJhdG9yIFNTRU1P REVJIFtWMTZRSSBWOEhJIFY0U0kgVjJESV0pCi0KIDs7IEFsbCAxNi1ieXRl IHZlY3RvciBtb2RlcyBoYW5kbGVkIGJ5IFNTRQogKGRlZmluZV9tb2RlX2l0 ZXJhdG9yIFNTRU1PREUgW1YxNlFJIFY4SEkgVjRTSSBWMkRJIFY0U0YgVjJE Rl0pCiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgU1NFTU9ERTE2IFtWMTZRSSBW OEhJIFY0U0kgVjJESSBWMVRJIFY0U0YgVjJERl0pCiAKLTs7IDMyIGJ5dGUg aW50ZWdyYWwgdmVjdG9yIG1vZGVzIGhhbmRsZWQgYnkgQVZYCi0oZGVmaW5l X21vZGVfaXRlcmF0b3IgQVZYMjU2TU9ERUkgW1YzMlFJIFYxNkhJIFY4U0kg VjRESV0pCi0KIDs7IEFsbCAzMi1ieXRlIHZlY3RvciBtb2RlcyBoYW5kbGVk IGJ5IEFWWAogKGRlZmluZV9tb2RlX2l0ZXJhdG9yIEFWWDI1Nk1PREUgW1Yz MlFJIFYxNkhJIFY4U0kgVjRESSBWOFNGIFY0REZdKQogCkBAIC04Niw3ICs4 Nyw2IEBACiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgQVZYMjU2TU9ERTRQIFtW NERJIFY0REZdKQogKGRlZmluZV9tb2RlX2l0ZXJhdG9yIEFWWDI1Nk1PREU4 UCBbVjhTSSBWOFNGXSkKIChkZWZpbmVfbW9kZV9pdGVyYXRvciBBVlhNT0RF RjJQIFtWNFNGIFYyREYgVjhTRiBWNERGXSkKLShkZWZpbmVfbW9kZV9pdGVy YXRvciBBVlhNT0RFRjRQIFtWNFNGIFY0REZdKQogKGRlZmluZV9tb2RlX2l0 ZXJhdG9yIEFWWE1PREVGRFAgW1YyREYgVjRERl0pCiAoZGVmaW5lX21vZGVf aXRlcmF0b3IgQVZYTU9ERUZTUCBbVjRTRiBWOFNGXSkKIApAQCAtMTYwLDkg KzE2MCw2IEBACiAgIFsoVjE2UUkgIlRJIikgKFY4SEkgIlRJIikgKFY0U0kg IlRJIikgKFYyREkgIlRJIikgKFYxVEkgIlRJIikKICAgIChWNFNGICJWNFNG IikgKFY4U0YgIlY4U0YiKSAoVjJERiAiVjJERiIpIChWNERGICJWNERGIikK ICAgIChWMzJRSSAiT0kiKSAoVjE2SEkgIk9JIikgKFY4U0kgIk9JIikgKFY0 REkgIk9JIildKQotKGRlZmluZV9tb2RlX2F0dHIgYXZ4dmVjcHNtb2RlCi0g IFsoVjE2UUkgIlY0U0YiKSAoVjhISSAiVjRTRiIpIChWNFNJICJWNFNGIikg KFYyREkgIlY0U0YiKQotICAgKFYzMlFJICJWOFNGIikgKFYxNkhJICJWOFNG IikgKFY4U0kgIlY4U0YiKSAoVjRESSAiVjhTRiIpXSkKIChkZWZpbmVfbW9k ZV9hdHRyIGF2eGhhbGZ2ZWNtb2RlCiAgIFsoVjMyUUkgIlYxNlFJIikgKFYx NkhJICJWOEhJIikgKFY4U0kgIlY0U0kiKSAoVjRESSAiVjJESSIpCiAgICAo VjhTRiAiVjRTRiIpIChWNERGICJWMkRGIikKQEAgLTU3NzUsMTAgKzU3NzIs MTAgQEAKIDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwogCiAoZGVmaW5lX2V4 cGFuZCAib25lX2NtcGw8bW9kZT4yIgotICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpTU0VNT0RFSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKLQkoeG9yOlNT RU1PREVJIChtYXRjaF9vcGVyYW5kOlNTRU1PREVJIDEgIm5vbmltbWVkaWF0 ZV9vcGVyYW5kIiAiIikKLQkJICAgICAgKG1hdGNoX2R1cCAyKSkpXQotICAi VEFSR0VUX1NTRTIiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZJIDAgInJl Z2lzdGVyX29wZXJhbmQiICIiKQorCSh4b3I6VkkgKG1hdGNoX29wZXJhbmQ6 VkkgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIiKQorCQkobWF0Y2hfZHVw IDIpKSldCisgICJUQVJHRVRfU1NFIgogewogICBpbnQgaSwgbiA9IEdFVF9N T0RFX05VTklUUyAoPE1PREU+bW9kZSk7CiAgIHJ0dmVjIHYgPSBydHZlY19h bGxvYyAobik7CkBAIC01Nzg5LDEzMyArNTc4NiwyMTUgQEAKICAgb3BlcmFu ZHNbMl0gPSBmb3JjZV9yZWcgKDxNT0RFPm1vZGUsIGdlbl9ydHhfQ09OU1Rf VkVDVE9SICg8TU9ERT5tb2RlLCB2KSk7CiB9KQogCi0oZGVmaW5lX2luc24g IiphdnhfYW5kbm90PG1vZGU+MyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 QVZYMjU2TU9ERUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14IikKLQkoYW5k OkFWWDI1Nk1PREVJCi0JICAobm90OkFWWDI1Nk1PREVJIChtYXRjaF9vcGVy YW5kOkFWWDI1Nk1PREVJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJ4IikpCi0g ICAgICAgICAgKG1hdGNoX29wZXJhbmQ6QVZYMjU2TU9ERUkgMiAibm9uaW1t ZWRpYXRlX29wZXJhbmQiICJ4bSIpKSldCi0gICJUQVJHRVRfQVZYIgotICAi dmFuZG5wc1x0eyUyLCAlMSwgJTB8JTAsICUxLCAlMn0iCi0gIFsoc2V0X2F0 dHIgInR5cGUiICJzc2Vsb2ciKQotICAgKHNldF9hdHRyICJwcmVmaXgiICJ2 ZXgiKQotICAgKHNldF9hdHRyICJtb2RlIiAiPGF2eHZlY3BzbW9kZT4iKV0p CisoZGVmaW5lX2V4cGFuZCAic3NlMl9hbmRub3Q8bW9kZT4zIgorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpWSV8xMjggMCAicmVnaXN0ZXJfb3BlcmFuZCIg IiIpCisJKGFuZDpWSV8xMjgKKwkgIChub3Q6VklfMTI4IChtYXRjaF9vcGVy YW5kOlZJXzEyOCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikpCisJICAobWF0 Y2hfb3BlcmFuZDpWSV8xMjggMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIi KSkpXQorICAiVEFSR0VUX1NTRTIiKQogCi0oZGVmaW5lX2luc24gIipzc2Vf YW5kbm90PG1vZGU+MyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U1NFTU9E RUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14IikKLQkoYW5kOlNTRU1PREVJ Ci0JICAobm90OlNTRU1PREVJIChtYXRjaF9vcGVyYW5kOlNTRU1PREVJIDEg InJlZ2lzdGVyX29wZXJhbmQiICIwIikpCi0gICAgICAgICAgKG1hdGNoX29w ZXJhbmQ6U1NFTU9ERUkgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJ4bSIp KSldCi0gICIoVEFSR0VUX1NTRSAmJiAhVEFSR0VUX1NTRTIpIgotICAiYW5k bnBzXHR7JTIsICUwfCUwLCAlMn0iCi0gIFsoc2V0X2F0dHIgInR5cGUiICJz c2Vsb2ciKQotICAgKHNldF9hdHRyICJtb2RlIiAiVjRTRiIpXSkKKyhkZWZp bmVfaW5zbiAiKmFuZG5vdDxtb2RlPjMiCisgIFsoc2V0IChtYXRjaF9vcGVy YW5kOlZJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9eCx4IikKKwkoYW5kOlZJ CisJICAobm90OlZJIChtYXRjaF9vcGVyYW5kOlZJIDEgInJlZ2lzdGVyX29w ZXJhbmQiICIwLHgiKSkKKwkgIChtYXRjaF9vcGVyYW5kOlZJIDIgIm5vbmlt bWVkaWF0ZV9vcGVyYW5kIiAieG0seG0iKSkpXQorICAiVEFSR0VUX1NTRSIK K3sKKyAgc3RhdGljIGNoYXIgYnVmWzMyXTsKKyAgY29uc3QgY2hhciAqb3Bz OworICBjb25zdCBjaGFyICp0bXAKKyAgICA9IChnZXRfYXR0cl9tb2RlIChp bnNuKSA9PSBNT0RFX1RJKSA/ICJwYW5kbiIgOiAiYW5kbnBzIjsKIAotKGRl ZmluZV9pbnNuICIqYXZ4X2FuZG5vdDxtb2RlPjMiCi0gIFsoc2V0IChtYXRj aF9vcGVyYW5kOlNTRU1PREVJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9eCIp Ci0JKGFuZDpTU0VNT0RFSQotCSAgKG5vdDpTU0VNT0RFSSAobWF0Y2hfb3Bl cmFuZDpTU0VNT0RFSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAieCIpKQotCSAg KG1hdGNoX29wZXJhbmQ6U1NFTU9ERUkgMiAibm9uaW1tZWRpYXRlX29wZXJh bmQiICJ4bSIpKSldCi0gICJUQVJHRVRfQVZYIgotICAidnBhbmRuXHR7JTIs ICUxLCAlMHwlMCwgJTEsICUyfSIKLSAgWyhzZXRfYXR0ciAidHlwZSIgInNz ZWxvZyIpCi0gICAoc2V0X2F0dHIgInByZWZpeCIgInZleCIpCi0gICAoc2V0 X2F0dHIgIm1vZGUiICJUSSIpXSkKKyAgc3dpdGNoICh3aGljaF9hbHRlcm5h dGl2ZSkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgb3BzID0gIiVzXHR7 JSUyLCAlJTB8JSUwLCAlJTJ9IjsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug MToKKyAgICAgIG9wcyA9ICJ2JXNcdHslJTIsICUlMSwgJSUwfCUlMCwgJSUx LCAlJTJ9IjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBn Y2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQogCi0oZGVmaW5lX2luc24gInNz ZTJfYW5kbm90PG1vZGU+MyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U1NF TU9ERUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14IikKLQkoYW5kOlNTRU1P REVJCi0JICAobm90OlNTRU1PREVJIChtYXRjaF9vcGVyYW5kOlNTRU1PREVJ IDEgInJlZ2lzdGVyX29wZXJhbmQiICIwIikpCi0JICAobWF0Y2hfb3BlcmFu ZDpTU0VNT0RFSSAyICJub25pbW1lZGlhdGVfb3BlcmFuZCIgInhtIikpKV0K LSAgIlRBUkdFVF9TU0UyIgotICAicGFuZG5cdHslMiwgJTB8JTAsICUyfSIK LSAgWyhzZXRfYXR0ciAidHlwZSIgInNzZWxvZyIpCi0gICAoc2V0X2F0dHIg InByZWZpeF9kYXRhMTYiICIxIikKLSAgIChzZXRfYXR0ciAibW9kZSIgIlRJ IildKQorICBzbnByaW50ZiAoYnVmLCBzaXplb2YgKGJ1ZiksIG9wcywgdG1w KTsKKyAgcmV0dXJuIGJ1ZjsKK30KKyAgWyhzZXRfYXR0ciAiaXNhIiAibm9h dngsYXZ4IikKKyAgIChzZXRfYXR0ciAidHlwZSIgInNzZWxvZyIpCisgICAo c2V0IChhdHRyICJwcmVmaXhfZGF0YTE2IikKKyAgICAgKGlmX3RoZW5fZWxz ZQorICAgICAgIChhbmQgKGVxX2F0dHIgImFsdGVybmF0aXZlIiAiMCIpCisJ ICAgIChlcV9hdHRyICJtb2RlIiAiVEkiKSkKKyAgICAgICAoY29uc3Rfc3Ry aW5nICIxIikKKyAgICAgICAoY29uc3Rfc3RyaW5nICIqIikpKQorICAgKHNl dF9hdHRyICJwcmVmaXgiICJvcmlnLHZleCIpCisgICAoc2V0IChhdHRyICJt b2RlIikKKyAgICAgKGNvbmQgWyhuZSAoc3ltYm9sX3JlZiAiR0VUX01PREVf U0laRSAoPE1PREU+bW9kZSkgPiAxMjgiKSAoY29uc3RfaW50IDApKQorCSAg ICAgIChjb25zdF9zdHJpbmcgIlY4U0YiKQorCSAgICAobmUgKHN5bWJvbF9y ZWYgIlRBUkdFVF9TU0VfUEFDS0VEX1NJTkdMRV9JTlNOX09QVElNQUwiKQor CQkoY29uc3RfaW50IDApKQorCSAgICAgIChjb25zdF9zdHJpbmcgIlY0U0Yi KQorCSAgICAobmUgKHN5bWJvbF9yZWYgIlRBUkdFVF9TU0UyIikgKGNvbnN0 X2ludCAwKSkKKwkgICAgICAoY29uc3Rfc3RyaW5nICJUSSIpCisJICAgXQor CSAgIChjb25zdF9zdHJpbmcgIlY0U0YiKSkpXSkKIAotKGRlZmluZV9pbnNu ICIqYW5kbm90dGYzIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpURiAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPXgiKQotCShhbmQ6VEYKLQkgIChub3Q6VEYg KG1hdGNoX29wZXJhbmQ6VEYgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkK LQkgIChtYXRjaF9vcGVyYW5kOlRGIDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5k IiAieG0iKSkpXQotICAiVEFSR0VUX1NTRTIiCi0gICJwYW5kblx0eyUyLCAl MHwlMCwgJTJ9IgotICBbKHNldF9hdHRyICJ0eXBlIiAic3NlbG9nIikKLSAg IChzZXRfYXR0ciAicHJlZml4X2RhdGExNiIgIjEiKQotICAgKHNldF9hdHRy ICJtb2RlIiAiVEkiKV0pCi0KIChkZWZpbmVfZXhwYW5kICI8Y29kZT48bW9k ZT4zIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTU0VNT0RFSSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiIikKLQkoYW55X2xvZ2ljOlNTRU1PREVJCi0JICAo bWF0Y2hfb3BlcmFuZDpTU0VNT0RFSSAxICJub25pbW1lZGlhdGVfb3BlcmFu ZCIgIiIpCi0JICAobWF0Y2hfb3BlcmFuZDpTU0VNT0RFSSAyICJub25pbW1l ZGlhdGVfb3BlcmFuZCIgIiIpKSldCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlZJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQorCShhbnlfbG9naWM6VkkK KwkgIChtYXRjaF9vcGVyYW5kOlZJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5k IiAiIikKKwkgIChtYXRjaF9vcGVyYW5kOlZJIDIgIm5vbmltbWVkaWF0ZV9v cGVyYW5kIiAiIikpKV0KICAgIlRBUkdFVF9TU0UiCiAgICJpeDg2X2ZpeHVw X2JpbmFyeV9vcGVyYW5kc19ub19jb3B5ICg8Q09ERT4sIDxNT0RFPm1vZGUs IG9wZXJhbmRzKTsiKQogCi0oZGVmaW5lX2luc24gIiphdnhfPGNvZGU+PG1v ZGU+MyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6QVZYMjU2TU9ERUkgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj14IikKLSAgICAgICAgKGFueV9sb2dpYzpB VlgyNTZNT0RFSQotICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkFWWDI1Nk1P REVJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiJXgiKQotICAgICAgICAg IChtYXRjaF9vcGVyYW5kOkFWWDI1Nk1PREVJIDIgIm5vbmltbWVkaWF0ZV9v cGVyYW5kIiAieG0iKSkpXQotICAiVEFSR0VUX0FWWAorKGRlZmluZV9pbnNu ICIqPGNvZGU+PG1vZGU+MyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Vkkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14LHgiKQorCShhbnlfbG9naWM6VkkK KwkgIChtYXRjaF9vcGVyYW5kOlZJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5k IiAiJTAseCIpCisJICAobWF0Y2hfb3BlcmFuZDpWSSAyICJub25pbW1lZGlh dGVfb3BlcmFuZCIgInhtLHhtIikpKV0KKyAgIlRBUkdFVF9TU0UKICAgICYm IGl4ODZfYmluYXJ5X29wZXJhdG9yX29rICg8Q09ERT4sIDxNT0RFPm1vZGUs IG9wZXJhbmRzKSIKLSAgInY8bG9naWM+cHNcdHslMiwgJTEsICUwfCUwLCAl MSwgJTJ9IgotICBbKHNldF9hdHRyICJ0eXBlIiAic3NlbG9nIikKLSAgIChz ZXRfYXR0ciAicHJlZml4IiAidmV4IikKLSAgIChzZXRfYXR0ciAibW9kZSIg Ijxhdnh2ZWNwc21vZGU+IildKQoreworICBzdGF0aWMgY2hhciBidWZbMzJd OworICBjb25zdCBjaGFyICpvcHM7CisgIGNvbnN0IGNoYXIgKnRtcAorICAg ID0gKGdldF9hdHRyX21vZGUgKGluc24pID09IE1PREVfVEkpID8gInA8bG9n aWM+IiA6ICI8bG9naWM+cHMiOwogCi0oZGVmaW5lX2luc24gIipzc2VfPGNv ZGU+PG1vZGU+MyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U1NFTU9ERUkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14IikKLSAgICAgICAgKGFueV9sb2dp YzpTU0VNT0RFSQotICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNTRU1PREVJ IDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiJTAiKQotICAgICAgICAgICht YXRjaF9vcGVyYW5kOlNTRU1PREVJIDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5k IiAieG0iKSkpXQotICAiKFRBUkdFVF9TU0UgJiYgIVRBUkdFVF9TU0UyKQot ICAgJiYgaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2sgKDxDT0RFPiwgPE1PREU+ bW9kZSwgb3BlcmFuZHMpIgotICAiPGxvZ2ljPnBzXHR7JTIsICUwfCUwLCAl Mn0iCi0gIFsoc2V0X2F0dHIgInR5cGUiICJzc2Vsb2ciKQotICAgKHNldF9h dHRyICJtb2RlIiAiVjRTRiIpXSkKKyAgc3dpdGNoICh3aGljaF9hbHRlcm5h dGl2ZSkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgb3BzID0gIiVzXHR7 JSUyLCAlJTB8JSUwLCAlJTJ9IjsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug MToKKyAgICAgIG9wcyA9ICJ2JXNcdHslJTIsICUlMSwgJSUwfCUlMCwgJSUx LCAlJTJ9IjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBn Y2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQogCi0oZGVmaW5lX2luc24gIiph dnhfPGNvZGU+PG1vZGU+MyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U1NF TU9ERUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14IikKLSAgICAgICAgKGFu eV9sb2dpYzpTU0VNT0RFSQotICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNT RU1PREVJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiJXgiKQotICAgICAg ICAgIChtYXRjaF9vcGVyYW5kOlNTRU1PREVJIDIgIm5vbmltbWVkaWF0ZV9v cGVyYW5kIiAieG0iKSkpXQotICAiVEFSR0VUX0FWWAotICAgJiYgaXg4Nl9i aW5hcnlfb3BlcmF0b3Jfb2sgKDxDT0RFPiwgPE1PREU+bW9kZSwgb3BlcmFu ZHMpIgotICAidnA8bG9naWM+XHR7JTIsICUxLCAlMHwlMCwgJTEsICUyfSIK LSAgWyhzZXRfYXR0ciAidHlwZSIgInNzZWxvZyIpCi0gICAoc2V0X2F0dHIg InByZWZpeCIgInZleCIpCi0gICAoc2V0X2F0dHIgIm1vZGUiICJUSSIpXSkK KyAgc25wcmludGYgKGJ1Ziwgc2l6ZW9mIChidWYpLCBvcHMsIHRtcCk7Cisg IHJldHVybiBidWY7Cit9CisgIFsoc2V0X2F0dHIgImlzYSIgIm5vYXZ4LGF2 eCIpCisgICAoc2V0X2F0dHIgInR5cGUiICJzc2Vsb2ciKQorICAgKHNldCAo YXR0ciAicHJlZml4X2RhdGExNiIpCisgICAgIChpZl90aGVuX2Vsc2UKKyAg ICAgICAoYW5kIChlcV9hdHRyICJhbHRlcm5hdGl2ZSIgIjAiKQorCSAgICAo ZXFfYXR0ciAibW9kZSIgIlRJIikpCisgICAgICAgKGNvbnN0X3N0cmluZyAi MSIpCisgICAgICAgKGNvbnN0X3N0cmluZyAiKiIpKSkKKyAgIChzZXRfYXR0 ciAicHJlZml4IiAib3JpZyx2ZXgiKQorICAgKHNldCAoYXR0ciAibW9kZSIp CisgICAgIChjb25kIFsobmUgKHN5bWJvbF9yZWYgIkdFVF9NT0RFX1NJWkUg KDxNT0RFPm1vZGUpID4gMTI4IikgKGNvbnN0X2ludCAwKSkKKwkgICAgICAo Y29uc3Rfc3RyaW5nICJWOFNGIikKKwkgICAgKG5lIChzeW1ib2xfcmVmICJU QVJHRVRfU1NFX1BBQ0tFRF9TSU5HTEVfSU5TTl9PUFRJTUFMIikKKwkJKGNv bnN0X2ludCAwKSkKKwkgICAgICAoY29uc3Rfc3RyaW5nICJWNFNGIikKKwkg ICAgKG5lIChzeW1ib2xfcmVmICJUQVJHRVRfU1NFMiIpIChjb25zdF9pbnQg MCkpCisJICAgICAgKGNvbnN0X3N0cmluZyAiVEkiKQorCSAgIF0KKwkgICAo Y29uc3Rfc3RyaW5nICJWNFNGIikpKV0pCiAKLShkZWZpbmVfaW5zbiAiKnNz ZTJfPGNvZGU+PG1vZGU+MyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U1NF TU9ERUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14IikKLQkoYW55X2xvZ2lj OlNTRU1PREVJCi0JICAobWF0Y2hfb3BlcmFuZDpTU0VNT0RFSSAxICJub25p bW1lZGlhdGVfb3BlcmFuZCIgIiUwIikKLQkgIChtYXRjaF9vcGVyYW5kOlNT RU1PREVJIDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAieG0iKSkpXQotICAi VEFSR0VUX1NTRTIgJiYgaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2sgKDxDT0RF PiwgPE1PREU+bW9kZSwgb3BlcmFuZHMpIgotICAicDxsb2dpYz5cdHslMiwg JTB8JTAsICUyfSIKLSAgWyhzZXRfYXR0ciAidHlwZSIgInNzZWxvZyIpCi0g ICAoc2V0X2F0dHIgInByZWZpeF9kYXRhMTYiICIxIikKLSAgIChzZXRfYXR0 ciAibW9kZSIgIlRJIildKQorKGRlZmluZV9pbnNuICIqYW5kbm90dGYzIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpURiAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPXgseCIpCisJKGFuZDpURgorCSAgKG5vdDpURiAobWF0Y2hfb3BlcmFu ZDpURiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCx4IikpCisJICAobWF0Y2hf b3BlcmFuZDpURiAyICJub25pbW1lZGlhdGVfb3BlcmFuZCIgInhtLHhtIikp KV0KKyAgIlRBUkdFVF9TU0UiCit7CisgIHN0YXRpYyBjaGFyIGJ1ZlszMl07 CisgIGNvbnN0IGNoYXIgKm9wczsKKyAgY29uc3QgY2hhciAqdG1wCisgICAg PSAoZ2V0X2F0dHJfbW9kZSAoaW5zbikgPT0gTU9ERV9USSkgPyAicGFuZG4i IDogImFuZG5wcyI7CiAKKyAgc3dpdGNoICh3aGljaF9hbHRlcm5hdGl2ZSkK KyAgICB7CisgICAgY2FzZSAwOgorICAgICAgb3BzID0gIiVzXHR7JSUyLCAl JTB8JSUwLCAlJTJ9IjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAg ICAgIG9wcyA9ICJ2JXNcdHslJTIsICUlMSwgJSUwfCUlMCwgJSUxLCAlJTJ9 IjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBnY2NfdW5y ZWFjaGFibGUgKCk7CisgICAgfQorCisgIHNucHJpbnRmIChidWYsIHNpemVv ZiAoYnVmKSwgb3BzLCB0bXApOworICByZXR1cm4gYnVmOworfQorICBbKHNl dF9hdHRyICJpc2EiICJub2F2eCxhdngiKQorICAgKHNldF9hdHRyICJ0eXBl IiAic3NlbG9nIikKKyAgIChzZXQgKGF0dHIgInByZWZpeF9kYXRhMTYiKQor ICAgICAoaWZfdGhlbl9lbHNlCisgICAgICAgKGFuZCAoZXFfYXR0ciAiYWx0 ZXJuYXRpdmUiICIwIikKKwkgICAgKGVxX2F0dHIgIm1vZGUiICJUSSIpKQor ICAgICAgIChjb25zdF9zdHJpbmcgIjEiKQorICAgICAgIChjb25zdF9zdHJp bmcgIioiKSkpCisgICAoc2V0X2F0dHIgInByZWZpeCIgIm9yaWcsdmV4IikK KyAgIChzZXQgKGF0dHIgIm1vZGUiKQorICAgICAoY29uZCBbKG5lIChzeW1i b2xfcmVmICJUQVJHRVRfU1NFX1BBQ0tFRF9TSU5HTEVfSU5TTl9PUFRJTUFM IikKKwkJKGNvbnN0X2ludCAwKSkKKwkgICAgICAoY29uc3Rfc3RyaW5nICJW NFNGIikKKwkgICAgKG5lIChzeW1ib2xfcmVmICJUQVJHRVRfU1NFMiIpIChj b25zdF9pbnQgMCkpCisJICAgICAgKGNvbnN0X3N0cmluZyAiVEkiKQorCSAg IF0KKwkgICAoY29uc3Rfc3RyaW5nICJWNFNGIikpKV0pCisKIChkZWZpbmVf ZXhwYW5kICI8Y29kZT50ZjMiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlRG IDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQogCShhbnlfbG9naWM6VEYKIAkg IChtYXRjaF9vcGVyYW5kOlRGIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAi IikKIAkgIChtYXRjaF9vcGVyYW5kOlRGIDIgIm5vbmltbWVkaWF0ZV9vcGVy YW5kIiAiIikpKV0KLSAgIlRBUkdFVF9TU0UyIgorICAiVEFSR0VUX1NTRSIK ICAgIml4ODZfZml4dXBfYmluYXJ5X29wZXJhbmRzX25vX2NvcHkgKDxDT0RF PiwgVEZtb2RlLCBvcGVyYW5kcyk7IikKIAogKGRlZmluZV9pbnNuICIqPGNv ZGU+dGYzIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpURiAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPXgiKQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpURiAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXgseCIpCiAJKGFueV9sb2dpYzpURgot CSAgKG1hdGNoX29wZXJhbmQ6VEYgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQi ICIlMCIpCi0JICAobWF0Y2hfb3BlcmFuZDpURiAyICJub25pbW1lZGlhdGVf b3BlcmFuZCIgInhtIikpKV0KLSAgIlRBUkdFVF9TU0UyICYmIGl4ODZfYmlu YXJ5X29wZXJhdG9yX29rICg8Q09ERT4sIFRGbW9kZSwgb3BlcmFuZHMpIgot ICAicDxsb2dpYz5cdHslMiwgJTB8JTAsICUyfSIKLSAgWyhzZXRfYXR0ciAi dHlwZSIgInNzZWxvZyIpCi0gICAoc2V0X2F0dHIgInByZWZpeF9kYXRhMTYi ICIxIikKLSAgIChzZXRfYXR0ciAibW9kZSIgIlRJIildKQorCSAgKG1hdGNo X29wZXJhbmQ6VEYgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIlMCx4IikK KwkgIChtYXRjaF9vcGVyYW5kOlRGIDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5k IiAieG0seG0iKSkpXQorICAiVEFSR0VUX1NTRSAKKyAgICYmIGl4ODZfYmlu YXJ5X29wZXJhdG9yX29rICg8Q09ERT4sIFRGbW9kZSwgb3BlcmFuZHMpIgor eworICBzdGF0aWMgY2hhciBidWZbMzJdOworICBjb25zdCBjaGFyICpvcHM7 CisgIGNvbnN0IGNoYXIgKnRtcAorICAgID0gKGdldF9hdHRyX21vZGUgKGlu c24pID09IE1PREVfVEkpID8gInA8bG9naWM+IiA6ICI8bG9naWM+cHMiOwog CisgIHN3aXRjaCAod2hpY2hfYWx0ZXJuYXRpdmUpCisgICAgeworICAgIGNh c2UgMDoKKyAgICAgIG9wcyA9ICIlc1x0eyUlMiwgJSUwfCUlMCwgJSUyfSI7 CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICBvcHMgPSAidiVz XHR7JSUyLCAlJTEsICUlMHwlJTAsICUlMSwgJSUyfSI7CisgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOwor ICAgIH0KKworICBzbnByaW50ZiAoYnVmLCBzaXplb2YgKGJ1ZiksIG9wcywg dG1wKTsKKyAgcmV0dXJuIGJ1ZjsKK30KKyAgWyhzZXRfYXR0ciAiaXNhIiAi bm9hdngsYXZ4IikKKyAgIChzZXRfYXR0ciAidHlwZSIgInNzZWxvZyIpCisg ICAoc2V0IChhdHRyICJwcmVmaXhfZGF0YTE2IikKKyAgICAgKGlmX3RoZW5f ZWxzZQorICAgICAgIChhbmQgKGVxX2F0dHIgImFsdGVybmF0aXZlIiAiMCIp CisJICAgIChlcV9hdHRyICJtb2RlIiAiVEkiKSkKKyAgICAgICAoY29uc3Rf c3RyaW5nICIxIikKKyAgICAgICAoY29uc3Rfc3RyaW5nICIqIikpKQorICAg KHNldF9hdHRyICJwcmVmaXgiICJvcmlnLHZleCIpCisgICAoc2V0IChhdHRy ICJtb2RlIikKKyAgICAgKGNvbmQgWyhuZSAoc3ltYm9sX3JlZiAiVEFSR0VU X1NTRV9QQUNLRURfU0lOR0xFX0lOU05fT1BUSU1BTCIpCisJCShjb25zdF9p bnQgMCkpCisJICAgICAgKGNvbnN0X3N0cmluZyAiVjRTRiIpCisJICAgIChu ZSAoc3ltYm9sX3JlZiAiVEFSR0VUX1NTRTIiKSAoY29uc3RfaW50IDApKQor CSAgICAgIChjb25zdF9zdHJpbmcgIlRJIikKKwkgICBdCisJICAgKGNvbnN0 X3N0cmluZyAiVjRTRiIpKSldKQorCiA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 OzsKIDs7CiA7OyBQYXJhbGxlbCBpbnRlZ3JhbCBlbGVtZW50IHN3aXp6bGlu Zwo= --000e0cd2e2c687e07304a0aac876--