From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x22d.google.com (mail-oi1-x22d.google.com [IPv6:2607:f8b0:4864:20::22d]) by sourceware.org (Postfix) with ESMTPS id 0D8573850423 for ; Thu, 6 Aug 2020 11:25:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 0D8573850423 Received: by mail-oi1-x22d.google.com with SMTP id 25so18949735oir.0 for ; Thu, 06 Aug 2020 04:25:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=9sV7gH+ULaM0W6DLZMQZM0+1JfAgcvZ4AJWza50UaMM=; b=UIOxF81nOs8v3kwbKci9QNkTXIlugAn7EaYztCdimb32Wt2nFkFW4tClep2mi9c94i 2eyplVwHEttAZLyKHj3WIDVZ1You1oV6sjadS4pd27uklLv9o0mh111P8MW++5KLYZmD ibzrK8prxCYLF2ylxi+nJSxLLIkKc5fVCE8S/6TYNDuCT1VI95kuVaG5q1khD31+4DPa 9V4g+ppQipMQkT7giB6cRwsUzAsGTKMceeMQ1wr7Y4URKVkAvQAVeyjgf21kzdkHYejQ VoUbSrw6ElzzGXlIptj77JCMNnCBtgs38KSCT6uocRn95GhocUhvXNgoJCGpEOB/NvNS tWyg== X-Gm-Message-State: AOAM533GP1HL8W2wdOHPLKnIpnjU+dkmEGUtxYjkBznrkj0hGgAAkpaU RsIUacxZcsEY1lJ79dhQDzdPHRlPyhdKzMITls0iIQ== X-Google-Smtp-Source: ABdhPJxd9TdhGKNpErjlIqGFp4DAtOPL6GMdBAeXmZgE1erLi/wAnkZ9Guw3bTMkOhKBU3uUuhoIfQBN5xb+ZvRWwtM= X-Received: by 2002:aca:51c5:: with SMTP id f188mr6195252oib.114.1596713113037; Thu, 06 Aug 2020 04:25:13 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Christophe Lyon Date: Thu, 6 Aug 2020 13:25:01 +0200 Message-ID: Subject: Re: VEC_COND_EXPR optimizations v2 To: Marc Glisse Cc: Richard Biener , GCC Patches Content-Type: multipart/mixed; boundary="000000000000e961da05ac33bd97" X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_NUMSUBJECT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Aug 2020 11:25:20 -0000 --000000000000e961da05ac33bd97 Content-Type: text/plain; charset="UTF-8" On Thu, 6 Aug 2020 at 11:06, Marc Glisse wrote: > > On Thu, 6 Aug 2020, Christophe Lyon wrote: > > >>> 2020-08-05 Marc Glisse > >>> > >>> PR tree-optimization/95906 > >>> PR target/70314 > >>> * match.pd ((c ? a : b) op d, (c ? a : b) op (c ? d : e), > >>> (v ? w : 0) ? a : b, c1 ? c2 ? a : b : b): New transformations. > >>> (op (c ? a : b)): Update to match the new transformations. > >>> > >>> * gcc.dg/tree-ssa/andnot-2.c: New file. > >>> * gcc.dg/tree-ssa/pr95906.c: Likewise. > >>> * gcc.target/i386/pr70314.c: Likewise. > >>> > > > > I think this patch is causing several ICEs on arm-none-linux-gnueabihf > > --with-cpu cortex-a9 --with-fpu neon-fp16: > > Executed from: gcc.c-torture/compile/compile.exp > > gcc.c-torture/compile/20160205-1.c -O3 -fomit-frame-pointer > > -funroll-loops -fpeel-loops -ftracer -finline-functions (internal > > compiler error) > > gcc.c-torture/compile/20160205-1.c -O3 -g (internal compiler error) > > Executed from: gcc.dg/dg.exp > > gcc.dg/pr87746.c (internal compiler error) > > Executed from: gcc.dg/tree-ssa/tree-ssa.exp > > gcc.dg/tree-ssa/ifc-cd.c (internal compiler error) > > I tried a cross from x86_64-linux with current master > > .../configure --target=arm-none-linux-gnueabihf --enable-languages=c,c++ --with-system-zlib --disable-nls --with-cpu=cortex-a9 --with-fpu=neon-fp16 > make > > it stops at some point with an error, but I have xgcc and cc1 in > build/gcc. > > I copied 2 of the testcases and compiled > > ./xgcc pr87746.c -Ofast -S -B. > ./xgcc -O3 -fdump-tree-ifcvt-details-blocks-details ifc-cd.c -S -B. > > without getting any ICE. Sorry for the delay, I had to reproduce the problem manually. > > Is there a machine on the compile farm where this is easy to reproduce? I don't think there is any arm machine in the compile farm. > Or could you attach the .optimized dump that corresponds to the > backtrace below? It looks like we end up with a comparison with an > unexpected return type. > I've compiled pr87746.c with -fdump-tree-ifcvt-details-blocks-details, here is the log. Is that what you need? Thanks, Christophe > > Executed from: gcc.dg/vect/vect.exp > > gcc.dg/vect/pr59591-1.c (internal compiler error) > > gcc.dg/vect/pr59591-1.c -flto -ffat-lto-objects (internal compiler error) > > gcc.dg/vect/pr86927.c (internal compiler error) > > gcc.dg/vect/pr86927.c -flto -ffat-lto-objects (internal compiler error) > > gcc.dg/vect/slp-cond-5.c (internal compiler error) > > gcc.dg/vect/slp-cond-5.c -flto -ffat-lto-objects (internal compiler error) > > gcc.dg/vect/vect-23.c (internal compiler error) > > gcc.dg/vect/vect-23.c -flto -ffat-lto-objects (internal compiler error) > > gcc.dg/vect/vect-24.c (internal compiler error) > > gcc.dg/vect/vect-24.c -flto -ffat-lto-objects (internal compiler error) > > gcc.dg/vect/vect-cond-reduc-6.c (internal compiler error) > > gcc.dg/vect/vect-cond-reduc-6.c -flto -ffat-lto-objects (internal > > compiler error) > > > > Backtrace for gcc.c-torture/compile/20160205-1.c -O3 > > -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer > > -finline-functions > > during RTL pass: expand > > /gcc/testsuite/gcc.c-torture/compile/20160205-1.c:2:5: internal > > compiler error: in do_store_flag, at expr.c:12259 > > 0x8feb26 do_store_flag > > /gcc/expr.c:12259 > > 0x900201 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > > expand_modifier) > > /gcc/expr.c:9617 > > 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > > expand_modifier, rtx_def**, bool) > > /gcc/expr.c:10159 > > 0x91174e expand_expr > > /gcc/expr.h:282 > > 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**, > > rtx_def**, expand_modifier) > > /gcc/expr.c:8065 > > 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > > expand_modifier) > > /gcc/expr.c:9950 > > 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > > expand_modifier, rtx_def**, bool) > > /gcc/expr.c:10159 > > 0x91174e expand_expr > > /gcc/expr.h:282 > > 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**, > > rtx_def**, expand_modifier) > > /gcc/expr.c:8065 > > 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > > expand_modifier) > > /gcc/expr.c:9950 > > 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > > expand_modifier, rtx_def**, bool) > > /gcc/expr.c:10159 > > 0x91174e expand_expr > > /gcc/expr.h:282 > > 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**, > > rtx_def**, expand_modifier) > > /gcc/expr.c:8065 > > 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > > expand_modifier) > > /gcc/expr.c:9950 > > 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > > expand_modifier, rtx_def**, bool) > > /gcc/expr.c:10159 > > 0x91174e expand_expr > > /gcc/expr.h:282 > > 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**, > > rtx_def**, expand_modifier) > > /gcc/expr.c:8065 > > 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > > expand_modifier) > > /gcc/expr.c:9950 > > 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > > expand_modifier, rtx_def**, bool) > > /gcc/expr.c:10159 > > 0x91174e expand_expr > > /gcc/expr.h:282 > > > > Christophe > > -- > Marc Glisse --000000000000e961da05ac33bd97 Content-Type: application/octet-stream; name="pr87746.c.162t.ifcvt" Content-Disposition: attachment; filename="pr87746.c.162t.ifcvt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kdipqwz40 Cjs7IEZ1bmN0aW9uIG1vdmVfcmVwbGFjZW1lbnRzIChtb3ZlX3JlcGxhY2VtZW50cywgZnVuY2Rl Zl9ubz0wLCBkZWNsX3VpZD01Njc4LCBjZ3JhcGhfdWlkPTEsIHN5bWJvbF9vcmRlcj0xKQoKQ3Jl YXRpbmcgZHIgZm9yIHJlcGxhY2VtZW50c1tpXzE2XS5zdWJyZWdfbG9jCmFuYWx5emVfaW5uZXJt b3N0OiBzdWNjZXNzLgoJYmFzZV9hZGRyZXNzOiAmcmVwbGFjZW1lbnRzCglvZmZzZXQgZnJvbSBi YXNlIGFkZHJlc3M6IDAKCWNvbnN0YW50IG9mZnNldCBmcm9tIGJhc2UgYWRkcmVzczogNAoJc3Rl cDogMTIKCWJhc2UgYWxpZ25tZW50OiA0CgliYXNlIG1pc2FsaWdubWVudDogMAoJb2Zmc2V0IGFs aWdubWVudDogNjQKCXN0ZXAgYWxpZ25tZW50OiA0CgliYXNlX29iamVjdDogcmVwbGFjZW1lbnRz CglBY2Nlc3MgZnVuY3Rpb24gMDogMzIKCUFjY2VzcyBmdW5jdGlvbiAxOiB7MCwgKywgMX1fMQpD cmVhdGluZyBkciBmb3IgcmVwbGFjZW1lbnRzW2lfMTZdLndoZXJlCmFuYWx5emVfaW5uZXJtb3N0 OiBzdWNjZXNzLgoJYmFzZV9hZGRyZXNzOiAmcmVwbGFjZW1lbnRzCglvZmZzZXQgZnJvbSBiYXNl IGFkZHJlc3M6IDAKCWNvbnN0YW50IG9mZnNldCBmcm9tIGJhc2UgYWRkcmVzczogMAoJc3RlcDog MTIKCWJhc2UgYWxpZ25tZW50OiA0CgliYXNlIG1pc2FsaWdubWVudDogMAoJb2Zmc2V0IGFsaWdu bWVudDogNjQKCXN0ZXAgYWxpZ25tZW50OiA0CgliYXNlX29iamVjdDogcmVwbGFjZW1lbnRzCglB Y2Nlc3MgZnVuY3Rpb24gMDogMAoJQWNjZXNzIGZ1bmN0aW9uIDE6IHswLCArLCAxfV8xCkNyZWF0 aW5nIGRyIGZvciByZXBsYWNlbWVudHNbaV8xNl0ud2hlcmUKYW5hbHl6ZV9pbm5lcm1vc3Q6IHN1 Y2Nlc3MuCgliYXNlX2FkZHJlc3M6ICZyZXBsYWNlbWVudHMKCW9mZnNldCBmcm9tIGJhc2UgYWRk cmVzczogMAoJY29uc3RhbnQgb2Zmc2V0IGZyb20gYmFzZSBhZGRyZXNzOiAwCglzdGVwOiAxMgoJ YmFzZSBhbGlnbm1lbnQ6IDQKCWJhc2UgbWlzYWxpZ25tZW50OiAwCglvZmZzZXQgYWxpZ25tZW50 OiA2NAoJc3RlcCBhbGlnbm1lbnQ6IDQKCWJhc2Vfb2JqZWN0OiByZXBsYWNlbWVudHMKCUFjY2Vz cyBmdW5jdGlvbiAwOiAwCglBY2Nlc3MgZnVuY3Rpb24gMTogezAsICssIDF9XzEKQ3JlYXRpbmcg ZHIgZm9yIHJlcGxhY2VtZW50c1tpXzE2XS5zdWJyZWdfbG9jCmFuYWx5emVfaW5uZXJtb3N0OiBz dWNjZXNzLgoJYmFzZV9hZGRyZXNzOiAmcmVwbGFjZW1lbnRzCglvZmZzZXQgZnJvbSBiYXNlIGFk ZHJlc3M6IDAKCWNvbnN0YW50IG9mZnNldCBmcm9tIGJhc2UgYWRkcmVzczogNAoJc3RlcDogMTIK CWJhc2UgYWxpZ25tZW50OiA0CgliYXNlIG1pc2FsaWdubWVudDogMAoJb2Zmc2V0IGFsaWdubWVu dDogNjQKCXN0ZXAgYWxpZ25tZW50OiA0CgliYXNlX29iamVjdDogcmVwbGFjZW1lbnRzCglBY2Nl c3MgZnVuY3Rpb24gMDogMzIKCUFjY2VzcyBmdW5jdGlvbiAxOiB7MCwgKywgMX1fMQpDcmVhdGlu ZyBkciBmb3IgcmVwbGFjZW1lbnRzW2lfMTZdLnN1YnJlZ19sb2MKYW5hbHl6ZV9pbm5lcm1vc3Q6 IHN1Y2Nlc3MuCgliYXNlX2FkZHJlc3M6ICZyZXBsYWNlbWVudHMKCW9mZnNldCBmcm9tIGJhc2Ug YWRkcmVzczogMAoJY29uc3RhbnQgb2Zmc2V0IGZyb20gYmFzZSBhZGRyZXNzOiA0CglzdGVwOiAx MgoJYmFzZSBhbGlnbm1lbnQ6IDQKCWJhc2UgbWlzYWxpZ25tZW50OiAwCglvZmZzZXQgYWxpZ25t ZW50OiA2NAoJc3RlcCBhbGlnbm1lbnQ6IDQKCWJhc2Vfb2JqZWN0OiByZXBsYWNlbWVudHMKCUFj Y2VzcyBmdW5jdGlvbiAwOiAzMgoJQWNjZXNzIGZ1bmN0aW9uIDE6IHswLCArLCAxfV8xCi0tLS0t LS0tLS1bM10tLS0tLS0tLS0tLS0tCi0tLS0tLS0tLS1bNF0tLS0tLS0tLS0tLS0tCi0tLS0tLS0t LS1bNV0tLS0tLS0tLS0tLS0tCi0tLS0tLS0tLS1bNl0tLS0tLS0tLS0tLS0tCi0tLS0tLS0tLS1b MTJdLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tWzddLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tWzEw XS0tLS0tLS0tLS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpyZXBsYWNlbWVudHNbaV8x Nl0uc3VicmVnX2xvYyA9IHlfOShEKTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpfMiA9IHJl cGxhY2VtZW50c1tpXzE2XS53aGVyZTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpyZXBsYWNl bWVudHNbaV8xNl0ud2hlcmUgPSB5XzkoRCk7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcmVw bGFjZW1lbnRzW2lfMTZdLnN1YnJlZ19sb2MgPSAwQjsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQppXzE2ID0gUEhJIDwwKDkpLCBpXzEzKDEwKT4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQou TUVNXzE3ID0gUEhJIDwuTUVNXzYoRCkoOSksIC5NRU1fNCgxMCk+Ci0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLk1FTV80ID0gUEhJIDwuTUVNXzEyKDQpLCAuTUVNXzExKDYpLCAuTUVNXzE3KDEy KT4KQXBwbHlpbmcgaWYtY29udmVyc2lvbgoKVXBkYXRpbmcgU1NBOgpSZWdpc3RlcmluZyBuZXcg UEhJIG5vZGVzIGluIGJsb2NrICMyClJlZ2lzdGVyaW5nIG5ldyBQSEkgbm9kZXMgaW4gYmxvY2sg IzkKUmVnaXN0ZXJpbmcgbmV3IFBISSBub2RlcyBpbiBibG9jayAjMjAKUmVnaXN0ZXJpbmcgbmV3 IFBISSBub2RlcyBpbiBibG9jayAjMjEKUmVnaXN0ZXJpbmcgbmV3IFBISSBub2RlcyBpbiBibG9j ayAjMwpVcGRhdGluZyBTU0EgaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCBfMSA9IHJlcGxhY2Vt ZW50c1tpXzE2XS5zdWJyZWdfbG9jOwpVcGRhdGluZyBTU0EgaW5mb3JtYXRpb24gZm9yIHN0YXRl bWVudCBpZiAoXzEgPT0geF84KEQpKQpSZWdpc3RlcmluZyBuZXcgUEhJIG5vZGVzIGluIGJsb2Nr ICM1ClVwZGF0aW5nIFNTQSBpbmZvcm1hdGlvbiBmb3Igc3RhdGVtZW50IF8yID0gcmVwbGFjZW1l bnRzW2lfMTZdLndoZXJlOwpVcGRhdGluZyBTU0EgaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCBp ZiAoXzIgPT0geF84KEQpKQpSZWdpc3RlcmluZyBuZXcgUEhJIG5vZGVzIGluIGJsb2NrICMxMgpS ZWdpc3RlcmluZyBuZXcgUEhJIG5vZGVzIGluIGJsb2NrICM2ClVwZGF0aW5nIFNTQSBpbmZvcm1h dGlvbiBmb3Igc3RhdGVtZW50IHJlcGxhY2VtZW50c1tpXzE2XS53aGVyZSA9IHlfOShEKTsKVXBk YXRpbmcgU1NBIGluZm9ybWF0aW9uIGZvciBzdGF0ZW1lbnQgcmVwbGFjZW1lbnRzW2lfMTZdLnN1 YnJlZ19sb2MgPSAwQjsKUmVnaXN0ZXJpbmcgbmV3IFBISSBub2RlcyBpbiBibG9jayAjNApVcGRh dGluZyBTU0EgaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCByZXBsYWNlbWVudHNbaV8xNl0uc3Vi cmVnX2xvYyA9IHlfOShEKTsKUmVnaXN0ZXJpbmcgbmV3IFBISSBub2RlcyBpbiBibG9jayAjNwpV cGRhdGluZyBTU0EgaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCBpXzEzID0gaV8xNiArIDE7ClVw ZGF0aW5nIFNTQSBpbmZvcm1hdGlvbiBmb3Igc3RhdGVtZW50IGlmIChuX3JlcGxhY2VtZW50c183 KEQpID4gaV8xMykKUmVnaXN0ZXJpbmcgbmV3IFBISSBub2RlcyBpbiBibG9jayAjMTAKUmVnaXN0 ZXJpbmcgbmV3IFBISSBub2RlcyBpbiBibG9jayAjMjIKUmVnaXN0ZXJpbmcgbmV3IFBISSBub2Rl cyBpbiBibG9jayAjMTMKVXBkYXRpbmcgU1NBIGluZm9ybWF0aW9uIGZvciBzdGF0ZW1lbnQgXzI3 ID0gcmVwbGFjZW1lbnRzW2lfMTZdLnN1YnJlZ19sb2M7ClVwZGF0aW5nIFNTQSBpbmZvcm1hdGlv biBmb3Igc3RhdGVtZW50IGlmIChfMSA9PSB4XzgoRCkpClJlZ2lzdGVyaW5nIG5ldyBQSEkgbm9k ZXMgaW4gYmxvY2sgIzE0ClVwZGF0aW5nIFNTQSBpbmZvcm1hdGlvbiBmb3Igc3RhdGVtZW50IF8y OCA9IHJlcGxhY2VtZW50c1tpXzE2XS53aGVyZTsKVXBkYXRpbmcgU1NBIGluZm9ybWF0aW9uIGZv ciBzdGF0ZW1lbnQgaWYgKF8yID09IHhfOChEKSkKUmVnaXN0ZXJpbmcgbmV3IFBISSBub2RlcyBp biBibG9jayAjMTUKUmVnaXN0ZXJpbmcgbmV3IFBISSBub2RlcyBpbiBibG9jayAjMTYKVXBkYXRp bmcgU1NBIGluZm9ybWF0aW9uIGZvciBzdGF0ZW1lbnQgcmVwbGFjZW1lbnRzW2lfMTZdLndoZXJl ID0geV85KEQpOwpVcGRhdGluZyBTU0EgaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCByZXBsYWNl bWVudHNbaV8xNl0uc3VicmVnX2xvYyA9IDBCOwpSZWdpc3RlcmluZyBuZXcgUEhJIG5vZGVzIGlu IGJsb2NrICMxNwpVcGRhdGluZyBTU0EgaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCByZXBsYWNl bWVudHNbaV8xNl0uc3VicmVnX2xvYyA9IHlfOShEKTsKUmVnaXN0ZXJpbmcgbmV3IFBISSBub2Rl cyBpbiBibG9jayAjMTgKVXBkYXRpbmcgU1NBIGluZm9ybWF0aW9uIGZvciBzdGF0ZW1lbnQgaV8z MyA9IGlfMTYgKyAxOwpVcGRhdGluZyBTU0EgaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCBpZiAo bl9yZXBsYWNlbWVudHNfNyhEKSA+IGlfMTMpClJlZ2lzdGVyaW5nIG5ldyBQSEkgbm9kZXMgaW4g YmxvY2sgIzE5ClJlZ2lzdGVyaW5nIG5ldyBQSEkgbm9kZXMgaW4gYmxvY2sgIzgKClNTQSByZXBs YWNlbWVudCB0YWJsZQpOX2kgLT4geyBPXzEgLi4uIE9faiB9IG1lYW5zIHRoYXQgTl9pIHJlcGxh Y2VzIE9fMSwgLi4uLCBPX2oKCmlfMjUgLT4geyBpXzE2IH0KLk1FTV8yNiAtPiB7IC5NRU1fMTcg fQpfMjcgLT4geyBfMSB9Cl8yOCAtPiB7IF8yIH0KLk1FTV8yOSAtPiB7IC5NRU1fMTAgfQouTUVN XzMwIC0+IHsgLk1FTV8xMSB9Ci5NRU1fMzEgLT4geyAuTUVNXzEyIH0KLk1FTV8zMiAtPiB7IC5N RU1fNCB9CmlfMzMgLT4geyBpXzEzIH0KSW5jcmVtZW50YWwgU1NBIHVwZGF0ZSBzdGFydGVkIGF0 IGJsb2NrOiAyCk51bWJlciBvZiBibG9ja3MgaW4gQ0ZHOiAyMwpOdW1iZXIgb2YgYmxvY2tzIHRv IHVwZGF0ZTogMTcgKCA3NCUpCkFmZmVjdGVkIGJsb2NrczogMyA0IDUgNiA3IDggMTAgMTIgMTMg MTQgMTUgMTYgMTcgMTggMTkgMjEgMjIKCgpSZW1vdmluZyBiYXNpYyBibG9jayA0Cjs7IGJhc2lj IGJsb2NrIDQsIGxvb3AgZGVwdGggMQo7OyAgcHJlZDogICAgICAKOzsgIHN1Y2M6ICAgICAgCgoK UmVtb3ZpbmcgYmFzaWMgYmxvY2sgNQo7OyBiYXNpYyBibG9jayA1LCBsb29wIGRlcHRoIDEKOzsg IHByZWQ6ICAgICAgCjs7ICBzdWNjOiAgICAgIAoKClJlbW92aW5nIGJhc2ljIGJsb2NrIDYKOzsg YmFzaWMgYmxvY2sgNiwgbG9vcCBkZXB0aCAxCjs7ICBwcmVkOiAgICAgIAo7OyAgc3VjYzogICAg ICAKCgpSZW1vdmluZyBiYXNpYyBibG9jayAxMgo7OyBiYXNpYyBibG9jayAxMiwgbG9vcCBkZXB0 aCAxCjs7ICBwcmVkOiAgICAgIAo7OyAgc3VjYzogICAgICAKCgpNZXJnaW5nIGJsb2NrcyAzIGFu ZCA3ClJlZ2lvbiBkb2VzIG5vdCBjb250YWluIGFsbCBlZGdlcyBpbnRvIHRoZSBlbnRyeSBibG9j aywgc2tpcHBpbmcgaXRzIFBISXMuClByb2Nlc3NpbmcgYmxvY2sgMDogQkIzCkNhbm5vdCB0cnVz dCBzdGF0ZSBvZiBwcmVkZWNlc3NvciBlZGdlIDEwIC0+IDMsIG1hcmtpbmcgZXhlY3V0YWJsZQpW YWx1ZSBudW1iZXJpbmcgc3RtdCA9IF8xID0gcmVwbGFjZW1lbnRzW2lfMTZdLnN1YnJlZ19sb2M7 ClNldHRpbmcgdmFsdWUgbnVtYmVyIG9mIF8xIHRvIF8xIChjaGFuZ2VkKQpNYWtpbmcgYXZhaWxh YmxlIGJleW9uZCBCQjMgXzEgZm9yIHZhbHVlIF8xClZhbHVlIG51bWJlcmluZyBzdG10ID0gX2lm Y19fMzQgPSByZXBsYWNlbWVudHNbaV8xNl0uc3VicmVnX2xvYzsKU2V0dGluZyB2YWx1ZSBudW1i ZXIgb2YgX2lmY19fMzQgdG8gXzEgKGNoYW5nZWQpClJlcGxhY2VkIHJlcGxhY2VtZW50c1tpXzE2 XS5zdWJyZWdfbG9jIHdpdGggXzEgaW4gYWxsIHVzZXMgb2YgX2lmY19fMzQgPSByZXBsYWNlbWVu dHNbaV8xNl0uc3VicmVnX2xvYzsKVmFsdWUgbnVtYmVyaW5nIHN0bXQgPSBfaWZjX18zNSA9IHlf OShEKTsKU2V0dGluZyB2YWx1ZSBudW1iZXIgb2YgX2lmY19fMzUgdG8geV85KEQpIChjaGFuZ2Vk KQpWYWx1ZSBudW1iZXJpbmcgc3RtdCA9IF9pZmNfXzM2ID0gXzEgPT0geF84KEQpID8gX2lmY19f MzUgOiBfaWZjX18zNDsKU2V0dGluZyB2YWx1ZSBudW1iZXIgb2YgX2lmY19fMzYgdG8gX2lmY19f MzYgKGNoYW5nZWQpCk1ha2luZyBhdmFpbGFibGUgYmV5b25kIEJCMyBfaWZjX18zNiBmb3IgdmFs dWUgX2lmY19fMzYKVmFsdWUgbnVtYmVyaW5nIHN0bXQgPSByZXBsYWNlbWVudHNbaV8xNl0uc3Vi cmVnX2xvYyA9IF9pZmNfXzM2OwpObyBzdG9yZSBtYXRjaApWYWx1ZSBudW1iZXJpbmcgc3RvcmUg cmVwbGFjZW1lbnRzW2lfMTZdLnN1YnJlZ19sb2MgdG8gX2lmY19fMzYKU2V0dGluZyB2YWx1ZSBu dW1iZXIgb2YgLk1FTV8xMiB0byAuTUVNXzEyIChjaGFuZ2VkKQpWYWx1ZSBudW1iZXJpbmcgc3Rt dCA9IF8yID0gcmVwbGFjZW1lbnRzW2lfMTZdLndoZXJlOwpTZXR0aW5nIHZhbHVlIG51bWJlciBv ZiBfMiB0byBfMiAoY2hhbmdlZCkKTWFraW5nIGF2YWlsYWJsZSBiZXlvbmQgQkIzIF8yIGZvciB2 YWx1ZSBfMgpWYWx1ZSBudW1iZXJpbmcgc3RtdCA9IF8xOCA9IF8xID09IHhfOChEKTsKU2V0dGlu ZyB2YWx1ZSBudW1iZXIgb2YgXzE4IHRvIF8xOCAoY2hhbmdlZCkKTWFraW5nIGF2YWlsYWJsZSBi ZXlvbmQgQkIzIF8xOCBmb3IgdmFsdWUgXzE4ClZhbHVlIG51bWJlcmluZyBzdG10ID0gXzUgPSB+ XzE4OwpTZXR0aW5nIHZhbHVlIG51bWJlciBvZiBfNSB0byBfNSAoY2hhbmdlZCkKTWFraW5nIGF2 YWlsYWJsZSBiZXlvbmQgQkIzIF81IGZvciB2YWx1ZSBfNQpWYWx1ZSBudW1iZXJpbmcgc3RtdCA9 IF8xNCA9IF8yID09IHhfOChEKTsKU2V0dGluZyB2YWx1ZSBudW1iZXIgb2YgXzE0IHRvIF8xNCAo Y2hhbmdlZCkKTWFraW5nIGF2YWlsYWJsZSBiZXlvbmQgQkIzIF8xNCBmb3IgdmFsdWUgXzE0ClZh bHVlIG51bWJlcmluZyBzdG10ID0gXzE1ID0gXzUgJiBfMTQ7ClNldHRpbmcgdmFsdWUgbnVtYmVy IG9mIF8xNSB0byBfMTUgKGNoYW5nZWQpCk1ha2luZyBhdmFpbGFibGUgYmV5b25kIEJCMyBfMTUg Zm9yIHZhbHVlIF8xNQpWYWx1ZSBudW1iZXJpbmcgc3RtdCA9IF9pZmNfXzM3ID0gcmVwbGFjZW1l bnRzW2lfMTZdLndoZXJlOwpTZXR0aW5nIHZhbHVlIG51bWJlciBvZiBfaWZjX18zNyB0byBfMiAo Y2hhbmdlZCkKUmVwbGFjZWQgcmVwbGFjZW1lbnRzW2lfMTZdLndoZXJlIHdpdGggXzIgaW4gYWxs IHVzZXMgb2YgX2lmY19fMzcgPSByZXBsYWNlbWVudHNbaV8xNl0ud2hlcmU7ClZhbHVlIG51bWJl cmluZyBzdG10ID0gX2lmY19fMzggPSB5XzkoRCk7ClNldHRpbmcgdmFsdWUgbnVtYmVyIG9mIF9p ZmNfXzM4IHRvIHlfOShEKSAoY2hhbmdlZCkKVmFsdWUgbnVtYmVyaW5nIHN0bXQgPSBfaWZjX18z OSA9IF8xNSA/IF9pZmNfXzM4IDogX2lmY19fMzc7ClNldHRpbmcgdmFsdWUgbnVtYmVyIG9mIF9p ZmNfXzM5IHRvIF9pZmNfXzM5IChjaGFuZ2VkKQpNYWtpbmcgYXZhaWxhYmxlIGJleW9uZCBCQjMg X2lmY19fMzkgZm9yIHZhbHVlIF9pZmNfXzM5ClZhbHVlIG51bWJlcmluZyBzdG10ID0gcmVwbGFj ZW1lbnRzW2lfMTZdLndoZXJlID0gX2lmY19fMzk7Ck5vIHN0b3JlIG1hdGNoClZhbHVlIG51bWJl cmluZyBzdG9yZSByZXBsYWNlbWVudHNbaV8xNl0ud2hlcmUgdG8gX2lmY19fMzkKU2V0dGluZyB2 YWx1ZSBudW1iZXIgb2YgLk1FTV8xMCB0byAuTUVNXzEwIChjaGFuZ2VkKQpWYWx1ZSBudW1iZXJp bmcgc3RtdCA9IF9pZmNfXzQwID0gcmVwbGFjZW1lbnRzW2lfMTZdLnN1YnJlZ19sb2M7ClNldHRp bmcgdmFsdWUgbnVtYmVyIG9mIF9pZmNfXzQwIHRvIF9pZmNfXzM2IChjaGFuZ2VkKQpSZXBsYWNl ZCByZXBsYWNlbWVudHNbaV8xNl0uc3VicmVnX2xvYyB3aXRoIF9pZmNfXzM2IGluIGFsbCB1c2Vz IG9mIF9pZmNfXzQwID0gcmVwbGFjZW1lbnRzW2lfMTZdLnN1YnJlZ19sb2M7ClZhbHVlIG51bWJl cmluZyBzdG10ID0gX2lmY19fNDEgPSAwQjsKUkhTIDBCIHNpbXBsaWZpZWQgdG8gMEIKU2V0dGlu ZyB2YWx1ZSBudW1iZXIgb2YgX2lmY19fNDEgdG8gMEIgKGNoYW5nZWQpClZhbHVlIG51bWJlcmlu ZyBzdG10ID0gX2lmY19fNDIgPSBfMTUgPyBfaWZjX180MSA6IF9pZmNfXzQwOwpTZXR0aW5nIHZh bHVlIG51bWJlciBvZiBfaWZjX180MiB0byBfaWZjX180MiAoY2hhbmdlZCkKTWFraW5nIGF2YWls YWJsZSBiZXlvbmQgQkIzIF9pZmNfXzQyIGZvciB2YWx1ZSBfaWZjX180MgpWYWx1ZSBudW1iZXJp bmcgc3RtdCA9IHJlcGxhY2VtZW50c1tpXzE2XS5zdWJyZWdfbG9jID0gX2lmY19fNDI7Ck5vIHN0 b3JlIG1hdGNoClZhbHVlIG51bWJlcmluZyBzdG9yZSByZXBsYWNlbWVudHNbaV8xNl0uc3VicmVn X2xvYyB0byBfaWZjX180MgpTZXR0aW5nIHZhbHVlIG51bWJlciBvZiAuTUVNXzExIHRvIC5NRU1f MTEgKGNoYW5nZWQpClZhbHVlIG51bWJlcmluZyBzdG10ID0gXzE5ID0gXzEgPT0geF84KEQpOwpT ZXR0aW5nIHZhbHVlIG51bWJlciBvZiBfMTkgdG8gXzE4IChjaGFuZ2VkKQpSZXBsYWNlZCBfMSA9 PSB4XzgoRCkgd2l0aCBfMTggaW4gYWxsIHVzZXMgb2YgXzE5ID0gXzEgPT0geF84KEQpOwpWYWx1 ZSBudW1iZXJpbmcgc3RtdCA9IF8yMCA9IH5fMTk7ClNldHRpbmcgdmFsdWUgbnVtYmVyIG9mIF8y MCB0byBfNSAoY2hhbmdlZCkKUmVwbGFjZWQgfl8xOSB3aXRoIF81IGluIGFsbCB1c2VzIG9mIF8y MCA9IH5fMTk7ClZhbHVlIG51bWJlcmluZyBzdG10ID0gXzIxID0gXzIgPT0geF84KEQpOwpTZXR0 aW5nIHZhbHVlIG51bWJlciBvZiBfMjEgdG8gXzE0IChjaGFuZ2VkKQpSZXBsYWNlZCBfMiA9PSB4 XzgoRCkgd2l0aCBfMTQgaW4gYWxsIHVzZXMgb2YgXzIxID0gXzIgPT0geF84KEQpOwpWYWx1ZSBu dW1iZXJpbmcgc3RtdCA9IF8yMiA9IH5fMjE7ClNldHRpbmcgdmFsdWUgbnVtYmVyIG9mIF8yMiB0 byBfMjIgKGNoYW5nZWQpCk1ha2luZyBhdmFpbGFibGUgYmV5b25kIEJCMyBfMjIgZm9yIHZhbHVl IF8yMgpWYWx1ZSBudW1iZXJpbmcgc3RtdCA9IF8yMyA9IF8yMCAmIF8yMjsKU2V0dGluZyB2YWx1 ZSBudW1iZXIgb2YgXzIzIHRvIF8yMyAoY2hhbmdlZCkKTWFraW5nIGF2YWlsYWJsZSBiZXlvbmQg QkIzIF8yMyBmb3IgdmFsdWUgXzIzClZhbHVlIG51bWJlcmluZyBzdG10ID0gaV8xMyA9IGlfMTYg KyAxOwpTZXR0aW5nIHZhbHVlIG51bWJlciBvZiBpXzEzIHRvIGlfMTMgKGNoYW5nZWQpCk1ha2lu ZyBhdmFpbGFibGUgYmV5b25kIEJCMyBpXzEzIGZvciB2YWx1ZSBpXzEzClZhbHVlIG51bWJlcmlu ZyBzdG10ID0gaWYgKG5fcmVwbGFjZW1lbnRzXzcoRCkgPiBpXzEzKQpSUE8gaXRlcmF0aW9uIG92 ZXIgMSBibG9ja3MgdmlzaXRlZCAxIGJsb2NrcyBpbiB0b3RhbCBkaXNjb3ZlcmluZyAxIGV4ZWN1 dGFibGUgYmxvY2tzIGl0ZXJhdGluZyAxLjAgdGltZXMsIGEgYmxvY2sgd2FzIHZpc2l0ZWQgbWF4 LiAxIHRpbWVzClJQTyB0cmFja2VkIDI4IHZhbHVlcyBhdmFpbGFibGUgYXQgMTIgbG9jYXRpb25z IGFuZCAyOCBsYXR0aWNlIGVsZW1lbnRzClJlbW92aW5nIGRlYWQgc3RtdCBfMjEgPSBfMiA9PSB4 XzgoRCk7ClJlbW92aW5nIGRlYWQgc3RtdCBfMjAgPSB+XzE5OwpSZW1vdmluZyBkZWFkIHN0bXQg XzE5ID0gXzEgPT0geF84KEQpOwpSZW1vdmluZyBkZWFkIHN0bXQgX2lmY19fNDEgPSAwQjsKUmVt b3ZpbmcgZGVhZCBzdG10IF9pZmNfXzQwID0gcmVwbGFjZW1lbnRzW2lfMTZdLnN1YnJlZ19sb2M7 ClJlbW92aW5nIGRlYWQgc3RtdCBfaWZjX18zOCA9IHlfOShEKTsKUmVtb3ZpbmcgZGVhZCBzdG10 IF9pZmNfXzM3ID0gcmVwbGFjZW1lbnRzW2lfMTZdLndoZXJlOwpSZW1vdmluZyBkZWFkIHN0bXQg X2lmY19fMzUgPSB5XzkoRCk7ClJlbW92aW5nIGRlYWQgc3RtdCBfaWZjX18zNCA9IHJlcGxhY2Vt ZW50c1tpXzE2XS5zdWJyZWdfbG9jOwpEZWxldGUgZGVhZCBzdG10IGluIGJiIzMKXzIzID0gXzUg JiBfMjI7CkRlbGV0ZSBkZWFkIHN0bXQgaW4gYmIjMwpfMjIgPSB+XzE0OwogIERlbGV0ZWQgZGVh ZCBzdG9yZTogcmVwbGFjZW1lbnRzW2lfMTZdLnN1YnJlZ19sb2MgPSBfaWZjX18zNjsKClJlbW92 aW5nIGJhc2ljIGJsb2NrIDkKOzsgYmFzaWMgYmxvY2sgOSwgbG9vcCBkZXB0aCAwCjs7ICBwcmVk OiAgICAgIAo7OyAgc3VjYzogICAgICAgMjAKCgpSZW1vdmluZyBiYXNpYyBibG9jayAxNQo7OyBi YXNpYyBibG9jayAxNSwgbG9vcCBkZXB0aCAxCjs7ICBwcmVkOiAgICAgIAo7OyAgc3VjYzogICAg ICAgMTgKCgpmaXhfbG9vcF9zdHJ1Y3R1cmU6IGZpeGluZyB1cCBsb29wcyBmb3IgZnVuY3Rpb24K bW92ZV9yZXBsYWNlbWVudHMgKHN0cnVjdCBydHhfZGVmICogKiB4LCBzdHJ1Y3QgcnR4X2RlZiAq ICogeSwgaW50IG5fcmVwbGFjZW1lbnRzKQp7CiAgaW50IGk7CiAgc3RydWN0IHJ0eF9kZWYgKiAq IF8xOwogIHN0cnVjdCBydHhfZGVmICogKiBfMjsKICBfQm9vbCBfNTsKICBfQm9vbCBfMTQ7CiAg X0Jvb2wgXzE1OwogIF9Cb29sIF8xODsKICBfQm9vbCBfMjQ7CiAgc3RydWN0IHJ0eF9kZWYgKiAq IF8yNzsKICBzdHJ1Y3QgcnR4X2RlZiAqICogXzI4OwogIHN0cnVjdCBydHhfZGVmICogKiBfaWZj X18zNjsKICBzdHJ1Y3QgcnR4X2RlZiAqICogX2lmY19fMzk7CiAgc3RydWN0IHJ0eF9kZWYgKiAq IF9pZmNfXzQyOwoKOzsgICBiYXNpYyBibG9jayAyLCBsb29wIGRlcHRoIDAsIGNvdW50IDExODEx MTU5OCAoZXN0aW1hdGVkIGxvY2FsbHkpLCBtYXliZSBob3QKOzsgICAgcHJldiBibG9jayAwLCBu ZXh0IGJsb2NrIDIwLCBmbGFnczogKE5FVywgUkVBQ0hBQkxFLCBWSVNJVEVEKQo7OyAgICBwcmVk OiAgICAgICBFTlRSWSBbYWx3YXlzXSAgY291bnQ6MTE4MTExNTk4IChlc3RpbWF0ZWQgbG9jYWxs eSkgKEZBTExUSFJVLEVYRUNVVEFCTEUpCiAgaWYgKG5fcmVwbGFjZW1lbnRzXzcoRCkgPiAwKQog ICAgZ290byA8YmIgMjA+OyBbODkuMDAlXQogIGVsc2UKICAgIGdvdG8gPGJiIDg+OyBbMTEuMDAl XQo7OyAgICBzdWNjOiAgICAgICAyMCBbODkuMCUgKGd1ZXNzZWQpXSAgY291bnQ6MTA1MTE5MzIy IChlc3RpbWF0ZWQgbG9jYWxseSkgKFRSVUVfVkFMVUUsRVhFQ1VUQUJMRSkKOzsgICAgICAgICAg ICAgICAgOCBbMTEuMCUgKGd1ZXNzZWQpXSAgY291bnQ6MTI5OTIyNzYgKGVzdGltYXRlZCBsb2Nh bGx5KSAoRkFMU0VfVkFMVUUsRVhFQ1VUQUJMRSkKCjs7ICAgYmFzaWMgYmxvY2sgMjAsIGxvb3Ag ZGVwdGggMCwgY291bnQgMTA1MTE5MzIyIChlc3RpbWF0ZWQgbG9jYWxseSksIG1heWJlIGhvdAo7 OyAgIEludmFsaWQgc3VtIG9mIG91dGdvaW5nIHByb2JhYmlsaXRpZXMgMjAwLjAlCjs7ICAgIHBy ZXYgYmxvY2sgMiwgbmV4dCBibG9jayAyMSwgZmxhZ3M6IChORVcpCjs7ICAgIHByZWQ6ICAgICAg IDIgWzg5LjAlIChndWVzc2VkKV0gIGNvdW50OjEwNTExOTMyMiAoZXN0aW1hdGVkIGxvY2FsbHkp IChUUlVFX1ZBTFVFLEVYRUNVVEFCTEUpCiAgXzI0ID0gLkxPT1BfVkVDVE9SSVpFRCAoMSwgMik7 CiAgaWYgKF8yNCAhPSAwKQogICAgZ290byA8YmIgMjE+OyBbMTAwLjAwJV0KICBlbHNlCiAgICBn b3RvIDxiYiAyMj47IFsxMDAuMDAlXQo7OyAgICBzdWNjOiAgICAgICAyMiBbYWx3YXlzXSAgY291 bnQ6MTA1MTE5MzIyIChlc3RpbWF0ZWQgbG9jYWxseSkgKEZBTFNFX1ZBTFVFKQo7OyAgICAgICAg ICAgICAgICAyMSBbYWx3YXlzXSAgY291bnQ6MTA1MTE5MzIyIChlc3RpbWF0ZWQgbG9jYWxseSkg KFRSVUVfVkFMVUUpCgo7OyAgIGJhc2ljIGJsb2NrIDIxLCBsb29wIGRlcHRoIDAsIGNvdW50IDEw NTExOTMyMiAoZXN0aW1hdGVkIGxvY2FsbHkpLCBtYXliZSBob3QKOzsgICAgcHJldiBibG9jayAy MCwgbmV4dCBibG9jayAzLCBmbGFnczogKE5FVykKOzsgICAgcHJlZDogICAgICAgMjAgW2Fsd2F5 c10gIGNvdW50OjEwNTExOTMyMiAoZXN0aW1hdGVkIGxvY2FsbHkpIChUUlVFX1ZBTFVFKQo7OyAg ICBzdWNjOiAgICAgICAzIFthbHdheXNdICBjb3VudDoxMDUxMTkzMjIgKGVzdGltYXRlZCBsb2Nh bGx5KSAoRkFMTFRIUlUsRVhFQ1VUQUJMRSkKCjs7ICAgYmFzaWMgYmxvY2sgMywgbG9vcCBkZXB0 aCAxLCBjb3VudCA5NTU2MzAyMjYgKGVzdGltYXRlZCBsb2NhbGx5KSwgbWF5YmUgaG90Cjs7ICAg IHByZXYgYmxvY2sgMjEsIG5leHQgYmxvY2sgMTAsIGZsYWdzOiAoTkVXLCBSRUFDSEFCTEUsIFZJ U0lURUQpCjs7ICAgIHByZWQ6ICAgICAgIDEwIFthbHdheXNdICBjb3VudDo4NTA1MTA5MDIgKGVz dGltYXRlZCBsb2NhbGx5KSAoRkFMTFRIUlUsRVhFQ1VUQUJMRSkKOzsgICAgICAgICAgICAgICAg MjEgW2Fsd2F5c10gIGNvdW50OjEwNTExOTMyMiAoZXN0aW1hdGVkIGxvY2FsbHkpIChGQUxMVEhS VSxFWEVDVVRBQkxFKQogICMgaV8xNiA9IFBISSA8aV8xMygxMCksIDAoMjEpPgogIF8xID0gcmVw bGFjZW1lbnRzW2lfMTZdLnN1YnJlZ19sb2M7CiAgX2lmY19fMzYgPSBfMSAhPSB4XzgoRCkgPyBf MSA6IHlfOShEKTsKICBfMiA9IHJlcGxhY2VtZW50c1tpXzE2XS53aGVyZTsKICBfMTggPSBfMSA9 PSB4XzgoRCk7CiAgXzUgPSB+XzE4OwogIF8xNCA9IF8yID09IHhfOChEKTsKICBfMTUgPSBfNSAm IF8xNDsKICBfaWZjX18zOSA9IF8xNSA/IHlfOShEKSA6IF8yOwogIHJlcGxhY2VtZW50c1tpXzE2 XS53aGVyZSA9IF9pZmNfXzM5OwogIF9pZmNfXzQyID0gXzE1ID8gMEIgOiBfaWZjX18zNjsKICBy ZXBsYWNlbWVudHNbaV8xNl0uc3VicmVnX2xvYyA9IF9pZmNfXzQyOwogIGlfMTMgPSBpXzE2ICsg MTsKICBpZiAobl9yZXBsYWNlbWVudHNfNyhEKSA+IGlfMTMpCiAgICBnb3RvIDxiYiAxMD47IFs4 OS4wMCVdCiAgZWxzZQogICAgZ290byA8YmIgOD47IFsxMS4wMCVdCjs7ICAgIHN1Y2M6ICAgICAg IDEwIFs4OS4wJSAoZ3Vlc3NlZCldICBjb3VudDo4NTA1MTA5MDIgKGVzdGltYXRlZCBsb2NhbGx5 KSAoVFJVRV9WQUxVRSxFWEVDVVRBQkxFKQo7OyAgICAgICAgICAgICAgICA4IFsxMS4wJSAoZ3Vl c3NlZCldICBjb3VudDoxMDUxMTkzMjQgKGVzdGltYXRlZCBsb2NhbGx5KSAoRkFMU0VfVkFMVUUs RVhFQ1VUQUJMRSkKCjs7ICAgYmFzaWMgYmxvY2sgMTAsIGxvb3AgZGVwdGggMSwgY291bnQgODUw NTEwOTAyIChlc3RpbWF0ZWQgbG9jYWxseSksIG1heWJlIGhvdAo7OyAgICBwcmV2IGJsb2NrIDMs IG5leHQgYmxvY2sgMjIsIGZsYWdzOiAoTkVXLCBWSVNJVEVEKQo7OyAgICBwcmVkOiAgICAgICAz IFs4OS4wJSAoZ3Vlc3NlZCldICBjb3VudDo4NTA1MTA5MDIgKGVzdGltYXRlZCBsb2NhbGx5KSAo VFJVRV9WQUxVRSxFWEVDVVRBQkxFKQogIGdvdG8gPGJiIDM+OyBbMTAwLjAwJV0KOzsgICAgc3Vj YzogICAgICAgMyBbYWx3YXlzXSAgY291bnQ6ODUwNTEwOTAyIChlc3RpbWF0ZWQgbG9jYWxseSkg KEZBTExUSFJVLEVYRUNVVEFCTEUpCgo7OyAgIGJhc2ljIGJsb2NrIDIyLCBsb29wIGRlcHRoIDAs IGNvdW50IDEwNTExOTMyMiAoZXN0aW1hdGVkIGxvY2FsbHkpLCBtYXliZSBob3QKOzsgICAgcHJl diBibG9jayAxMCwgbmV4dCBibG9jayAxMywgZmxhZ3M6IChORVcpCjs7ICAgIHByZWQ6ICAgICAg IDIwIFthbHdheXNdICBjb3VudDoxMDUxMTkzMjIgKGVzdGltYXRlZCBsb2NhbGx5KSAoRkFMU0Vf VkFMVUUpCjs7ICAgIHN1Y2M6ICAgICAgIDEzIFthbHdheXNdICBjb3VudDoxMDUxMTkzMjIgKGVz dGltYXRlZCBsb2NhbGx5KSAoRkFMTFRIUlUpCgo7OyAgIGJhc2ljIGJsb2NrIDEzLCBsb29wIGRl cHRoIDEsIGNvdW50IDk1NTYzMDIyNSAoZXN0aW1hdGVkIGxvY2FsbHkpLCBtYXliZSBob3QKOzsg ICAgcHJldiBibG9jayAyMiwgbmV4dCBibG9jayAxNywgZmxhZ3M6IChORVcsIFJFQUNIQUJMRSwg VklTSVRFRCkKOzsgICAgcHJlZDogICAgICAgMTkgW2Fsd2F5c10gIGNvdW50Ojg1MDUxMDkwMiAo ZXN0aW1hdGVkIGxvY2FsbHkpIChGQUxMVEhSVSxERlNfQkFDSyxFWEVDVVRBQkxFKQo7OyAgICAg ICAgICAgICAgICAyMiBbYWx3YXlzXSAgY291bnQ6MTA1MTE5MzIyIChlc3RpbWF0ZWQgbG9jYWxs eSkgKEZBTExUSFJVKQogICMgaV8yNSA9IFBISSA8aV8zMygxOSksIDAoMjIpPgogIF8yNyA9IHJl cGxhY2VtZW50c1tpXzI1XS5zdWJyZWdfbG9jOwogIGlmIChfMjcgPT0geF84KEQpKQogICAgZ290 byA8YmIgMTc+OyBbMzAuMDAlXQogIGVsc2UKICAgIGdvdG8gPGJiIDE0PjsgWzcwLjAwJV0KOzsg ICAgc3VjYzogICAgICAgMTcgWzMwLjAlIChndWVzc2VkKV0gIGNvdW50OjI4NjY4OTA2NSAoZXN0 aW1hdGVkIGxvY2FsbHkpIChUUlVFX1ZBTFVFLEVYRUNVVEFCTEUpCjs7ICAgICAgICAgICAgICAg IDE0IFs3MC4wJSAoZ3Vlc3NlZCldICBjb3VudDo2Njg5NDExNjAgKGVzdGltYXRlZCBsb2NhbGx5 KSAoRkFMU0VfVkFMVUUsRVhFQ1VUQUJMRSkKCjs7ICAgYmFzaWMgYmxvY2sgMTcsIGxvb3AgZGVw dGggMSwgY291bnQgMjg2Njg5MDY1IChlc3RpbWF0ZWQgbG9jYWxseSksIG1heWJlIGhvdAo7OyAg ICBwcmV2IGJsb2NrIDEzLCBuZXh0IGJsb2NrIDE0LCBmbGFnczogKE5FVywgUkVBQ0hBQkxFLCBW SVNJVEVEKQo7OyAgICBwcmVkOiAgICAgICAxMyBbMzAuMCUgKGd1ZXNzZWQpXSAgY291bnQ6Mjg2 Njg5MDY1IChlc3RpbWF0ZWQgbG9jYWxseSkgKFRSVUVfVkFMVUUsRVhFQ1VUQUJMRSkKICByZXBs YWNlbWVudHNbaV8yNV0uc3VicmVnX2xvYyA9IHlfOShEKTsKICBnb3RvIDxiYiAxOD47IFsxMDAu MDAlXQo7OyAgICBzdWNjOiAgICAgICAxOCBbYWx3YXlzXSAgY291bnQ6Mjg2Njg5MDY1IChlc3Rp bWF0ZWQgbG9jYWxseSkgKEZBTExUSFJVLEVYRUNVVEFCTEUpCgo7OyAgIGJhc2ljIGJsb2NrIDE0 LCBsb29wIGRlcHRoIDEsIGNvdW50IDY2ODk0MTE2MSAoZXN0aW1hdGVkIGxvY2FsbHkpLCBtYXli ZSBob3QKOzsgICAgcHJldiBibG9jayAxNywgbmV4dCBibG9jayAxNiwgZmxhZ3M6IChORVcsIFJF QUNIQUJMRSwgVklTSVRFRCkKOzsgICAgcHJlZDogICAgICAgMTMgWzcwLjAlIChndWVzc2VkKV0g IGNvdW50OjY2ODk0MTE2MCAoZXN0aW1hdGVkIGxvY2FsbHkpIChGQUxTRV9WQUxVRSxFWEVDVVRB QkxFKQogIF8yOCA9IHJlcGxhY2VtZW50c1tpXzI1XS53aGVyZTsKICBpZiAoXzI4ID09IHhfOChE KSkKICAgIGdvdG8gPGJiIDE2PjsgWzMwLjAwJV0KICBlbHNlCiAgICBnb3RvIDxiYiAxOD47IFs3 MC4wMCVdCjs7ICAgIHN1Y2M6ICAgICAgIDE2IFszMC4wJSAoZ3Vlc3NlZCldICBjb3VudDoyMDA2 ODIzNDYgKGVzdGltYXRlZCBsb2NhbGx5KSAoVFJVRV9WQUxVRSxFWEVDVVRBQkxFKQo7OyAgICAg ICAgICAgICAgICAxOCBbNzAuMCUgKGd1ZXNzZWQpXSAgY291bnQ6NDY4MjU4ODE1IChlc3RpbWF0 ZWQgbG9jYWxseSkgKEZBTFNFX1ZBTFVFLEVYRUNVVEFCTEUpCgo7OyAgIGJhc2ljIGJsb2NrIDE2 LCBsb29wIGRlcHRoIDEsIGNvdW50IDIwMDY4MjM0NiAoZXN0aW1hdGVkIGxvY2FsbHkpLCBtYXli ZSBob3QKOzsgICAgcHJldiBibG9jayAxNCwgbmV4dCBibG9jayAxOCwgZmxhZ3M6IChORVcsIFJF QUNIQUJMRSwgVklTSVRFRCkKOzsgICAgcHJlZDogICAgICAgMTQgWzMwLjAlIChndWVzc2VkKV0g IGNvdW50OjIwMDY4MjM0NiAoZXN0aW1hdGVkIGxvY2FsbHkpIChUUlVFX1ZBTFVFLEVYRUNVVEFC TEUpCiAgcmVwbGFjZW1lbnRzW2lfMjVdLndoZXJlID0geV85KEQpOwogIHJlcGxhY2VtZW50c1tp XzI1XS5zdWJyZWdfbG9jID0gMEI7Cjs7ICAgIHN1Y2M6ICAgICAgIDE4IFthbHdheXNdICBjb3Vu dDoyMDA2ODIzNDYgKGVzdGltYXRlZCBsb2NhbGx5KSAoRkFMTFRIUlUsRVhFQ1VUQUJMRSkKCjs7 ICAgYmFzaWMgYmxvY2sgMTgsIGxvb3AgZGVwdGggMSwgY291bnQgOTU1NjMwMjI2IChlc3RpbWF0 ZWQgbG9jYWxseSksIG1heWJlIGhvdAo7OyAgICBwcmV2IGJsb2NrIDE2LCBuZXh0IGJsb2NrIDE5 LCBmbGFnczogKE5FVywgUkVBQ0hBQkxFLCBWSVNJVEVEKQo7OyAgICBwcmVkOiAgICAgICAxNCBb NzAuMCUgKGd1ZXNzZWQpXSAgY291bnQ6NDY4MjU4ODE1IChlc3RpbWF0ZWQgbG9jYWxseSkgKEZB TFNFX1ZBTFVFLEVYRUNVVEFCTEUpCjs7ICAgICAgICAgICAgICAgIDE2IFthbHdheXNdICBjb3Vu dDoyMDA2ODIzNDYgKGVzdGltYXRlZCBsb2NhbGx5KSAoRkFMTFRIUlUsRVhFQ1VUQUJMRSkKOzsg ICAgICAgICAgICAgICAgMTcgW2Fsd2F5c10gIGNvdW50OjI4NjY4OTA2NSAoZXN0aW1hdGVkIGxv Y2FsbHkpIChGQUxMVEhSVSxFWEVDVVRBQkxFKQogIGlfMzMgPSBpXzI1ICsgMTsKICBpZiAobl9y ZXBsYWNlbWVudHNfNyhEKSA+IGlfMzMpCiAgICBnb3RvIDxiYiAxOT47IFs4OS4wMCVdCiAgZWxz ZQogICAgZ290byA8YmIgOD47IFsxMS4wMCVdCjs7ICAgIHN1Y2M6ICAgICAgIDE5IFs4OS4wJSAo Z3Vlc3NlZCldICBjb3VudDo4NTA1MTA5MDIgKGVzdGltYXRlZCBsb2NhbGx5KSAoVFJVRV9WQUxV RSxFWEVDVVRBQkxFKQo7OyAgICAgICAgICAgICAgICA4IFsxMS4wJSAoZ3Vlc3NlZCldICBjb3Vu dDoxMDUxMTkzMjQgKGVzdGltYXRlZCBsb2NhbGx5KSAoRkFMU0VfVkFMVUUsRVhFQ1VUQUJMRSkK Cjs7ICAgYmFzaWMgYmxvY2sgMTksIGxvb3AgZGVwdGggMSwgY291bnQgODUwNTEwOTAyIChlc3Rp bWF0ZWQgbG9jYWxseSksIG1heWJlIGhvdAo7OyAgICBwcmV2IGJsb2NrIDE4LCBuZXh0IGJsb2Nr IDgsIGZsYWdzOiAoTkVXLCBWSVNJVEVEKQo7OyAgICBwcmVkOiAgICAgICAxOCBbODkuMCUgKGd1 ZXNzZWQpXSAgY291bnQ6ODUwNTEwOTAyIChlc3RpbWF0ZWQgbG9jYWxseSkgKFRSVUVfVkFMVUUs RVhFQ1VUQUJMRSkKICBnb3RvIDxiYiAxMz47IFsxMDAuMDAlXQo7OyAgICBzdWNjOiAgICAgICAx MyBbYWx3YXlzXSAgY291bnQ6ODUwNTEwOTAyIChlc3RpbWF0ZWQgbG9jYWxseSkgKEZBTExUSFJV LERGU19CQUNLLEVYRUNVVEFCTEUpCgo7OyAgIGJhc2ljIGJsb2NrIDgsIGxvb3AgZGVwdGggMCwg Y291bnQgMTE4MTExNjAwIChlc3RpbWF0ZWQgbG9jYWxseSksIG1heWJlIGhvdAo7OyAgIEludmFs aWQgc3VtIG9mIGluY29taW5nIGNvdW50cyAyMjMyMzA5MjQgKGVzdGltYXRlZCBsb2NhbGx5KSwg c2hvdWxkIGJlIDExODExMTYwMCAoZXN0aW1hdGVkIGxvY2FsbHkpCjs7ICAgIHByZXYgYmxvY2sg MTksIG5leHQgYmxvY2sgMSwgZmxhZ3M6IChORVcsIFJFQUNIQUJMRSwgVklTSVRFRCkKOzsgICAg cHJlZDogICAgICAgMiBbMTEuMCUgKGd1ZXNzZWQpXSAgY291bnQ6MTI5OTIyNzYgKGVzdGltYXRl ZCBsb2NhbGx5KSAoRkFMU0VfVkFMVUUsRVhFQ1VUQUJMRSkKOzsgICAgICAgICAgICAgICAgMyBb MTEuMCUgKGd1ZXNzZWQpXSAgY291bnQ6MTA1MTE5MzI0IChlc3RpbWF0ZWQgbG9jYWxseSkgKEZB TFNFX1ZBTFVFLEVYRUNVVEFCTEUpCjs7ICAgICAgICAgICAgICAgIDE4IFsxMS4wJSAoZ3Vlc3Nl ZCldICBjb3VudDoxMDUxMTkzMjQgKGVzdGltYXRlZCBsb2NhbGx5KSAoRkFMU0VfVkFMVUUsRVhF Q1VUQUJMRSkKICByZXR1cm47Cjs7ICAgIHN1Y2M6ICAgICAgIEVYSVQgW2Fsd2F5c10gIGNvdW50 OjExODExMTYwMCAoZXN0aW1hdGVkIGxvY2FsbHkpCgp9CgoK --000000000000e961da05ac33bd97--