From owner-freebsd-toolchain@FreeBSD.ORG Sun Sep 23 04:12:49 2012 Return-Path: Delivered-To: freebsd-toolchain@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3267F1065670; Sun, 23 Sep 2012 04:12:49 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-oa0-f54.google.com (mail-oa0-f54.google.com [209.85.219.54]) by mx1.freebsd.org (Postfix) with ESMTP id CE6218FC12; Sun, 23 Sep 2012 04:12:47 +0000 (UTC) Received: by oagm1 with SMTP id m1so5760475oag.13 for ; Sat, 22 Sep 2012 21:12:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=bzgd74Lb9TOanuVHex5VupFRW9S/olVKwWYyvEuzmec=; b=nJKa+ly9rm0PbVSLcP/yx9TntDTMdmVrTS889BJu7HFo9zHEkjbL5vS/9287neeaRZ ihkcIKArv28bewarumkqsXb+suFUnTNe0x6yhXup1oO0Xg4Frb0W0uz11W0PveIyTX5e MZP9R0nnlynJFdtrZbsyPwh1QkvrkthKWxLrLnONcIlF2UPO71Zv8vDtomHWh5/scs+i LKqJkIgNKWM29XE2KHczeu38qidZeQCLyYgcwLLrn1JBOv3J02ijRVpVotTL7J8S5iv+ HkW34Wnvyea9ANBQCqjXDJ/cfQWzOphtdkU6TCJazJ1ipOboxEwFDMbegx4RjOuW2098 tdWg== MIME-Version: 1.0 Received: by 10.60.20.69 with SMTP id l5mr7008395oee.114.1348373565539; Sat, 22 Sep 2012 21:12:45 -0700 (PDT) Received: by 10.76.142.201 with HTTP; Sat, 22 Sep 2012 21:12:44 -0700 (PDT) In-Reply-To: References: Date: Sat, 22 Sep 2012 21:12:44 -0700 Message-ID: From: Garrett Cooper To: freebsd-toolchain@freebsd.org Content-Type: multipart/mixed; boundary=e89a8fb206686603e204ca56aff2 Cc: freebsd-hackers@freebsd.org, Bruce Evans Subject: Re: [CFT/RFC]: refactor bsd.prog.mk to understand multiple programs instead of a singular program X-BeenThere: freebsd-toolchain@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Maintenance of FreeBSD's integrated toolchain List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 Sep 2012 04:12:49 -0000 --e89a8fb206686603e204ca56aff2 Content-Type: text/plain; charset=ISO-8859-1 On Sun, Sep 2, 2012 at 11:01 PM, Garrett Cooper wrote: > Hello, > I've been a bit busy working on porting over ATF from NetBSD, and > one of the pieces that's currently not available in FreeBSD that's > available in NetBSD is the ability to understand and compile multiple > programs. In order to do this I had to refactor bsd.prog.mk (a lot). > The attached patch is the end result so far, and I was wondering if > anyone could please review it and/or test it (outside of me doing so). > I wrote over 40 tests, but it's not exercising everything, and I would > like for someone to please review/test this out who has an interest in > NLS support (ala bsd.nls.mk) in particular. AFAICT this is the only > gap that I couldn't resolve right away (there isn't a ton of recent > documentation on how to use bsd.nls.mk). > I'll run a micro benchmark and buildworld a few times (in > progress) with and without the change to measure the performance > effect. > Any assistance would be much appreciated. I've attached an updated version of the patch (run through buildworld successfully multiple times; make universe successfully; going to submit for an -exp run). I needed to modify bsd.crunchgen.mk to grok OBJS.${PROG}, but apart from that backwards compatibility has been maintained -- sans-INSTALLFLAGS_EDIT (does anyone still use that undocumented functionality?). Performance wise, it's slightly slower on my W3520 with the change, but not by much (~20 seconds). As always, questions and comments are welcome, and if someone has a chance, please review the proposed patch. Thanks! -Garrett Without the change: $ python calc_runtime.py bw.*_without.log | ministat -w 72 x +------------------------------------------------------------------------+ | x | |x x x x x xx x x| | |_________________________A_________M________________| | +------------------------------------------------------------------------+ N Min Max Median Avg Stddev x 10 919 1010 972 958.9 33.994934 With the change: $ python calc_runtime.py bw.*.log | ministat -w 72 x +------------------------------------------------------------------------+ | x | |xx x x x x x xx| | |___________________________A_________________M_________| | +------------------------------------------------------------------------+ N Min Max Median Avg Stddev x 10 940 1002 988 972.3 24.476973 make universe results: # make universe MAKE_JUST_WORLDS=y -------------------------------------------------------------- >>> make universe started on Tue Sep 18 09:30:04 PDT 2012 -------------------------------------------------------------- >> amd64 started on Tue Sep 18 09:30:04 PDT 2012 >> amd64.amd64 buildworld started on Tue Sep 18 09:30:04 PDT 2012 >> amd64.amd64 buildworld completed on Tue Sep 18 11:20:19 PDT 2012 >> amd64 completed on Tue Sep 18 11:20:19 PDT 2012 >> arm started on Tue Sep 18 11:20:19 PDT 2012 >> arm.arm buildworld started on Tue Sep 18 11:20:19 PDT 2012 >> arm.arm buildworld completed on Tue Sep 18 12:25:24 PDT 2012 >> arm.armeb buildworld started on Tue Sep 18 12:25:24 PDT 2012 >> arm.armeb buildworld completed on Tue Sep 18 13:30:25 PDT 2012 >> arm.armv6 buildworld started on Tue Sep 18 13:30:25 PDT 2012 >> arm.armv6 buildworld completed on Tue Sep 18 14:35:14 PDT 2012 >> arm.armv6eb buildworld started on Tue Sep 18 14:35:14 PDT 2012 >> arm.armv6eb buildworld completed on Tue Sep 18 15:40:05 PDT 2012 >> arm completed on Tue Sep 18 15:40:05 PDT 2012 >> i386 started on Tue Sep 18 15:40:05 PDT 2012 >> i386.i386 buildworld started on Tue Sep 18 15:40:05 PDT 2012 >> i386.i386 buildworld completed on Tue Sep 18 16:56:06 PDT 2012 >> i386 completed on Tue Sep 18 16:56:06 PDT 2012 >> ia64 started on Tue Sep 18 16:56:06 PDT 2012 >> ia64.ia64 buildworld started on Tue Sep 18 16:56:06 PDT 2012 >> ia64.ia64 buildworld completed on Tue Sep 18 18:27:49 PDT 2012 >> ia64 completed on Tue Sep 18 18:27:49 PDT 2012 >> mips started on Tue Sep 18 18:27:49 PDT 2012 >> mips.mipsel buildworld started on Tue Sep 18 18:27:49 PDT 2012 >> mips.mipsel buildworld completed on Tue Sep 18 19:34:50 PDT 2012 >> mips.mips buildworld started on Tue Sep 18 19:34:50 PDT 2012 >> mips.mips buildworld completed on Tue Sep 18 20:41:49 PDT 2012 >> mips.mips64el buildworld started on Tue Sep 18 20:41:49 PDT 2012 >> mips.mips64el buildworld completed on Tue Sep 18 21:49:21 PDT 2012 >> mips.mips64 buildworld started on Tue Sep 18 21:49:21 PDT 2012 >> mips.mips64 buildworld completed on Tue Sep 18 22:57:13 PDT 2012 >> mips.mipsn32 buildworld started on Tue Sep 18 22:57:13 PDT 2012 >> mips.mipsn32 buildworld completed on Wed Sep 19 00:04:43 PDT 2012 >> mips completed on Wed Sep 19 00:04:43 PDT 2012 >> pc98 started on Wed Sep 19 00:04:43 PDT 2012 >> pc98.i386 buildworld started on Wed Sep 19 00:04:43 PDT 2012 >> pc98.i386 buildworld completed on Wed Sep 19 01:20:42 PDT 2012 >> pc98 completed on Wed Sep 19 01:20:42 PDT 2012 >> powerpc started on Wed Sep 19 01:20:42 PDT 2012 >> powerpc.powerpc buildworld started on Wed Sep 19 01:20:42 PDT 2012 >> powerpc.powerpc buildworld completed on Wed Sep 19 02:37:34 PDT 2012 >> powerpc.powerpc64 buildworld started on Wed Sep 19 02:37:34 PDT 2012 >> powerpc.powerpc64 buildworld completed on Wed Sep 19 04:28:10 PDT 2012 >> powerpc completed on Wed Sep 19 04:28:10 PDT 2012 >> sparc64 started on Wed Sep 19 04:28:10 PDT 2012 >> sparc64.sparc64 buildworld started on Wed Sep 19 04:28:10 PDT 2012 >> sparc64.sparc64 buildworld completed on Wed Sep 19 05:42:30 PDT 2012 >> sparc64 completed on Wed Sep 19 05:42:30 PDT 2012 -------------------------------------------------------------- >>> make universe completed on Wed Sep 19 05:42:30 PDT 2012 (started Tue Sep 18 09:30:04 PDT 2012) -------------------------------------------------------------- --e89a8fb206686603e204ca56aff2 Content-Type: application/octet-stream; name="share-mk-bsd-prog-mk-CURRENT.patch" Content-Disposition: attachment; filename="share-mk-bsd-prog-mk-CURRENT.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h7fmqx4g0 SW5kZXg6IHNoYXJlL21rL2JzZC5jcnVuY2hnZW4ubWsKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2hhcmUvbWsv YnNkLmNydW5jaGdlbi5tawkocmV2aXNpb24gMjQwNjg5KQorKysgc2hhcmUvbWsvYnNkLmNydW5j aGdlbi5tawkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsNyBAQAogIyAgICAgICBsb2NhbCBh cmNoaXRlY3R1cmUuCiAjCiAjIFNwZWNpYWwgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGZvciBp bmRpdmlkdWFsIHByb2dyYW1zCisjICBDUlVOQ0hfT0JKVkFSXyQoUCk6IE9CSlMgdmFyaWFibGUg Zm9yIHByb2dyYW0gJChQKTsgZGVmYXVsdHMgdG8gT0JKUy4ke1BST0d9LgogIyAgQ1JVTkNIX1NS Q0RJUl8kKFApOiBiYXNlIHNvdXJjZSBkaXJlY3RvcnkgZm9yIHByb2dyYW0gJChQKQogIyAgQ1JV TkNIX0JVSUxET1BUU18kKFApOiBhZGRpdGlvbmFsIGJ1aWxkIG9wdGlvbnMgZm9yICQoUCkKICMg IENSVU5DSF9BTElBU18kKFApOiBhZGRpdGlvbmFsIG5hbWVzIHRvIGJlIHVzZWQgZm9yICQoUCkK QEAgLTQ5LDYgKzUwLDcgQEAKICMgZXhjZXB0IGZvciB0aG9zZSB0aGF0IGdldCBzdXBwcmVzc2Vk LgogLmZvciBEIGluICQoQ1JVTkNIX1NSQ0RJUlMpCiAuZm9yIFAgaW4gJChDUlVOQ0hfUFJPR1Nf JChEKSkKK0NSVU5DSF9PQkpWQVJfJHtQfT89CSdPQkpTLiQke1BST0d9JwogLmlmZGVmIENSVU5D SF9TUkNESVJfJHtQfQogJChPVVRQVVRTKTogJChDUlVOQ0hfU1JDRElSXyR7UH0pL01ha2VmaWxl CiAuZWxzZQpAQCAtOTUsNiArOTcsNyBAQAogLmVsc2UKIAllY2hvIHNwZWNpYWwgJChQKSBidWls ZG9wdHMgRElSUFJGWD0ke0RJUlBSRlh9JHtQfS8gPj4kKC5UQVJHRVQpCiAuZW5kaWYKKwllY2hv IHNwZWNpYWwgJChQKSBvYmp2YXIgJChDUlVOQ0hfT0JKVkFSXyR7UH0pID4+ICQoLlRBUkdFVCkK IC5mb3IgQSBpbiAkKENSVU5DSF9BTElBU18kKFApKQogCWVjaG8gbG4gJChQKSAkKEEpID4+JCgu VEFSR0VUKQogLmVuZGZvcgpJbmRleDogc2hhcmUvbWsvYnNkLmR0cmFjZS5tawo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBzaGFyZS9tay9ic2QuZHRyYWNlLm1rCShyZXZpc2lvbiAyNDA2ODkpCisrKyBzaGFyZS9t ay9ic2QuZHRyYWNlLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiBEUEFERCs9 JHtMSUJFTEZ9CiBMREFERCs9LWxlbGYKIAotLmlmIGRlZmluZWQoUFJPRykKKy5pZiBkZWZpbmVk KFBST0cpIHx8IGRlZmluZWQoUFJPR1MpCiBfRFRSQUNFTElOS0lORz0ke09CSlN9CiBPQkpTKz0k e0RUUkFDRU9CSlN9CiAuZWxzZQpJbmRleDogc2hhcmUvbWsvYnNkLnByb2cubWsKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gc2hhcmUvbWsvYnNkLnByb2cubWsJKHJldmlzaW9uIDI0MDY4OSkKKysrIHNoYXJlL21r L2JzZC5wcm9nLm1rCSh3b3JraW5nIGNvcHkpCkBAIC01LDIyMiArNSwzMzYgQEAKIAogLlNVRkZJ WEVTOiAub3V0IC5vIC5jIC5jYyAuY3BwIC5jeHggLkMgLm0gLnkgLmwgLmxuIC5zIC5TIC5hc20K IAotIyBYWFggVGhlIHVzZSBvZiBDT1BUUyBpbiBtb2Rlcm4gbWFrZWZpbGVzIGlzIGRpc2NvdXJh Z2VkLgorLmlmICR7TUtfTUFOfSA9PSAibm8iCitOT19NQU49CisuZW5kaWYKKworIyBMZWdhY3kg a25vYnMKKy5pZiBkZWZpbmVkKFBST0cpIHx8IGRlZmluZWQoUFJPR19DWFgpCisuIGlmIGRlZmlu ZWQoUFJPRykKK1BST0dTPQkJJHtQUk9HfQorLiBlbmRpZgorLiBpZiBkZWZpbmVkKFBST0dfQ1hY KQorUFJPR1M9CQkke1BST0dfQ1hYfQorUFJPR1NfQ1hYPQkke1BST0dfQ1hYfQorLiBlbmRpZgor IyBMb29wIG9uY2UgdG8ga2VlcCBwYXR0ZXJuIGFuZCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9u CisuIGZvciBfUCBpbiAke1BST0dTfQorLiAgaWYgZGVmaW5lZChJTlRFUk5BTFBST0cpCitJTlRF Uk5BTFBST0cuJHtfUH09CisuICBlbmRpZgorLiAgaWYgIWRlZmluZWQoTk9fTUFOKQorLiAgIGlm IGRlZmluZWQoTUFOKQorTUFOLiR7X1B9PQkke01BTn0KKy4gICBlbHNlCisuICAgIGZvciBzZWN0 IGluIDEgMWFvdXQgMiAzIDQgNSA2IDcgOCA5CisuICAgICBpZiBkZWZpbmVkKE1BTiR7c2VjdH0p CitNQU4uJHtfUH09CSR7TUFOJHtzZWN0fX0KKy4gICAgIGVuZGlmCisuICAgIGVuZGZvcgorLiAg IGVuZGlmCisuICBlbmRpZiAjIGRlZmluZWQoTk9fTUFOKQorLiAgaWYgZGVmaW5lZChOTFNOQU1F KSAmJiAhZW1wdHkoTkxTTkFNRSkKK05MU05BTUUuJHtQfTo9CSR7TkxTTkFNRX0KKy4gIGVuZGlm CisuICBpZiBkZWZpbmVkKE9CSlMpCitPQkpTLiR7X1B9Oj0JJHtPQkpTfQorLiAgZW5kaWYKKy4g IGlmIGRlZmluZWQoUFJFQ0lPVVNQUk9HKQorUFJFQ0lPVVNQUk9HLiR7X1B9PQorLiAgZW5kaWYK Ky4gIGlmIGRlZmluZWQoUFJPR05BTUUpCitQUk9HTkFNRS4ke19QfT0JJHtQUk9HTkFNRX0KKy4g IGVuZGlmCisuICBpZiBkZWZpbmVkKFNSQ1MpCitTUkNTLiR7X1B9Oj0JJHtTUkNTfQorLiAgZW5k aWYKKy4gZW5kZm9yCisuZWxzZSAjICFkZWZpbmVkKFBST0cpICYmICFkZWZpbmVkKFBST0dfQ1hY KQorLiBpZiBkZWZpbmVkKFBST0dTX0NYWCkgJiYgIWVtcHR5KFBST0dTX0NYWCkKK1BST0dTKz0J CSR7UFJPR1NfQ1hYfQorLiBlbmRpZgorLmVuZGlmICMgZGVmaW5lZChQUk9HKSB8fCBkZWZpbmVk KFBST0dfQ1hYKQorCisuaWYgZGVmaW5lZChQUk9HU19DWFgpICYmICFlbXB0eShQUk9HU19DWFgp CisuIGZvciBfUCBpbiAke1BST0dTX0NYWH0KK1BST0dfQ1hYLiR7X1B9PQorLiBlbmRmb3IKKy5l bmRpZgorCisjIEF2b2lkIHJlY3Vyc2l2ZSB2YXJpYWJsZXMKKy51bmRlZiBOTFNOQU1FCisKIC5p ZiBkZWZpbmVkKENPUFRTKQogQ0ZMQUdTKz0ke0NPUFRTfQogLmVuZGlmCiAKKy5pZiBkZWZpbmVk KERFQlVHX0ZMQUdTKQorLiBpZiAke01LX0NURn0gIT0gIm5vIiAmJiAke0RFQlVHX0ZMQUdTOk0t Z30gIT0gIiIKK0NURkZMQUdTKz0gLWcKKy4gZW5kaWYKK0NGTEFHUys9JHtERUJVR19GTEFHU30K K0NYWEZMQUdTKz0ke0RFQlVHX0ZMQUdTfQorLmVuZGlmCisKK1NUUklQPz0JCS1zCisKIC5pZiAk e01LX0FTU0VSVF9ERUJVR30gPT0gIm5vIgogQ0ZMQUdTKz0gLUROREVCVUcKIE5PX1dFUlJPUj0K IC5lbmRpZgogCi0uaWYgZGVmaW5lZChERUJVR19GTEFHUykKLUNGTEFHUys9JHtERUJVR19GTEFH U30KLUNYWEZMQUdTKz0ke0RFQlVHX0ZMQUdTfQorLmZvciBfUCBpbiAke1BST0dTfQogCi0uaWYg JHtNS19DVEZ9ICE9ICJubyIgJiYgJHtERUJVR19GTEFHUzpNLWd9ICE9ICIiCi1DVEZGTEFHUys9 IC1nCi0uZW5kaWYKLS5lbmRpZgorQklORElSLiR7X1B9Pz0JJHtCSU5ESVJ9CitCSU5HUlAuJHtf UH0/PQkke0JJTkdSUH0KK0JJTk1PREUuJHtfUH0/PQkke0JJTk1PREV9CitCSU5PV04uJHtfUH0/ PQkke0JJTk9XTn0KIAotLmlmIGRlZmluZWQoQ1JVTkNIX0NGTEFHUykKLUNGTEFHUys9JHtDUlVO Q0hfQ0ZMQUdTfQotLmVuZGlmCitDRkxBR1MuJHtfUH0rPQkke0NGTEFHU30KK0NYWEZMQUdTLiR7 X1B9Kz0gJHtDWFhGTEFHU30KK0RQQURELiR7X1B9Kz0JJHtEUEFERH0KK0xEQURELiR7X1B9Kz0J JHtMREFERH0KK0xERkxBR1MuJHtfUH0rPQkke0xERkxBR1N9CiAKLS5pZiAhZGVmaW5lZChERUJV R19GTEFHUykKLVNUUklQPz0JLXMKLS5lbmRpZgorSU5TVEFMTEZMQUdTLiR7X1B9Pz0gJHtJTlNU QUxMRkxBR1N9CiAKLS5pZiBkZWZpbmVkKE5PX1NIQVJFRCkgJiYgKCR7Tk9fU0hBUkVEfSAhPSAi bm8iICYmICR7Tk9fU0hBUkVEfSAhPSAiTk8iKQotTERGTEFHUys9IC1zdGF0aWMKLS5lbmRpZgor LiBpZiBkZWZpbmVkKFBSRUNJT1VTUFJPRy4ke19QfSkKKy4gIGlmICFkZWZpbmVkKE5PX0ZTQ0hH KSAmJiAhZGVmaW5lZChOT19GU0NIRy4ke19QfSkKK0lOU1RBTExGTEFHUy4ke19QfSs9IC1mc2No ZworLiAgZW5kaWYKK0lOU1RBTExGTEFHUy4ke19QfSs9IC1TCisuIGVuZGlmCiAKLS5pZiBkZWZp bmVkKFBST0dfQ1hYKQotUFJPRz0JJHtQUk9HX0NYWH0KLS5lbmRpZgorTk9fU0hBUkVELiR7X1B9 Pz0JJHtOT19TSEFSRUR9CiAKLS5pZiBkZWZpbmVkKFBST0cpCi0uaWYgZGVmaW5lZChTUkNTKQor LiBpZiAhZGVmaW5lZChOTFNESVIuJHtfUH0pCitOTFNESVIuJHtfUH06PQkke05MU0RJUn0KKy4g ZW5kaWYKKy4gdW5kZWYgTkxTRElSCiAKLU9CSlMrPSAgJHtTUkNTOk4qLmg6UjpTLyQvLm8vZ30K Ky4gaWYgIWVtcHR5KE5PX1NIQVJFRC4ke19QfSkgJiYgJHtOT19TSEFSRUQuJHtfUH06dGx9ICE9 ICJubyIKK0xERkxBR1MuJHtfUH0rPSAtc3RhdGljCisuIGVuZGlmCiAKLS5pZiB0YXJnZXQoYmVm b3JlbGlua2luZykKLSR7UFJPR306ICR7T0JKU30gYmVmb3JlbGlua2luZwotLmVsc2UKLSR7UFJP R306ICR7T0JKU30KLS5lbmRpZgotLmlmIGRlZmluZWQoUFJPR19DWFgpCi0JJHtDWFh9ICR7Q1hY RkxBR1N9ICR7TERGTEFHU30gLW8gJHsuVEFSR0VUfSAke09CSlN9ICR7TERBRER9Ci0uZWxzZQot CSR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IC1vICR7LlRBUkdFVH0gJHtPQkpTfSAke0xEQURE fQotLmVuZGlmCi0uaWYgJHtNS19DVEZ9ICE9ICJubyIKLQkke0NURk1FUkdFfSAke0NURkZMQUdT fSAtbyAkey5UQVJHRVR9ICR7T0JKU30KLS5lbmRpZgorLiBpZiBkZWZpbmVkKFNSQ1MuJHtfUH0p CiAKLS5lbHNlCSMgIWRlZmluZWQoU1JDUykKK19TUkNTOj0JCSR7U1JDUy4ke19QfX0KK09CSlMu JHtfUH0rPQkke19TUkNTOk4qLmg6UjpTLyQvLm8vZ30KIAotLmlmICF0YXJnZXQoJHtQUk9HfSkK LS5pZiBkZWZpbmVkKFBST0dfQ1hYKQotU1JDUz0JJHtQUk9HfS5jYwotLmVsc2UKLVNSQ1M9CSR7 UFJPR30uYwotLmVuZGlmCisuICBpZiB0YXJnZXQoYmVmb3JlbGlua2luZykKKyR7X1B9OiAke09C SlMuJHtfUH19IGJlZm9yZWxpbmtpbmcKKy4gIGVsc2UKKyR7X1B9OiAke09CSlMuJHtfUH19Cisu ICBlbmRpZgorLiAgaWYgZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKKwkke0NYWH0gJHtDWFhGTEFH Uy4ke19QfX0gJHtMREZMQUdTLiR7X1B9fSAtbyAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0gXAor CSAgICAke0xEQURELiR7X1B9fQorLiAgZWxzZQorCSR7Q0N9ICR7Q0ZMQUdTLiR7X1B9fSAke0xE RkxBR1MuJHtfUH19IC1vICR7LlRBUkdFVH0gJHtPQkpTLiR7X1B9fSBcCisJICAgICR7TERBREQu JHtfUH19CisuICBlbmRpZgorLiAgaWYgJHtNS19DVEZ9ICE9ICJubyIKKwkke0NURk1FUkdFfSAk e0NURkZMQUdTfSAtbyAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0KKy4gIGVuZGlmCiAKKy4gZWxz ZSAjICFkZWZpbmVkKFNSQ1MuJHtfUH0pCisKKy4gIGlmICF0YXJnZXQoJHtfUH0pCisuICAgaWYg ZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKK1NSQ1MuJHtfUH0/PQkke19QfS5jYworLiAgIGVsc2UK K1NSQ1MuJHtfUH0/PQkke19QfS5jCisuICAgZW5kaWYKKwogIyBBbHdheXMgbWFrZSBhbiBpbnRl cm1lZGlhdGUgb2JqZWN0IGZpbGUgYmVjYXVzZToKICMgLSBpdCBzYXZlcyB0aW1lIHJlYnVpbGRp bmcgd2hlbiBvbmx5IHRoZSBsaWJyYXJ5IGhhcyBjaGFuZ2VkCiAjIC0gdGhlIG5hbWUgb2YgdGhl IG9iamVjdCBnZXRzIHB1dCBpbnRvIHRoZSBleGVjdXRhYmxlIHN5bWJvbCB0YWJsZSBpbnN0ZWFk IG9mCiAjICAgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSB0ZW1wb3Jhcnkgb2JqZWN0LgogIyAtIGl0 J3MgdXNlZnVsIHRvIGtlZXAgb2JqZWN0cyBhcm91bmQgZm9yIGNydW5jaGluZy4KLU9CSlM9CSR7 UFJPR30ubworT0JKUy4ke19QfTo9CSR7X1B9Lm8KIAotLmlmIHRhcmdldChiZWZvcmVsaW5raW5n KQotJHtQUk9HfTogJHtPQkpTfSBiZWZvcmVsaW5raW5nCi0uZWxzZQotJHtQUk9HfTogJHtPQkpT fQotLmVuZGlmCi0uaWYgZGVmaW5lZChQUk9HX0NYWCkKLQkke0NYWH0gJHtDWFhGTEFHU30gJHtM REZMQUdTfSAtbyAkey5UQVJHRVR9ICR7T0JKU30gJHtMREFERH0KLS5lbHNlCi0JJHtDQ30gJHtD RkxBR1N9ICR7TERGTEFHU30gLW8gJHsuVEFSR0VUfSAke09CSlN9ICR7TERBRER9Ci0uZW5kaWYK LS5pZiAke01LX0NURn0gIT0gIm5vIgotCSR7Q1RGTUVSR0V9ICR7Q1RGRkxBR1N9IC1vICR7LlRB UkdFVH0gJHtPQkpTfQotLmVuZGlmCi0uZW5kaWYKKy4gICBpZiB0YXJnZXQoYmVmb3JlbGlua2lu ZykKKyR7X1B9OiAke09CSlMuJHtfUH19IGJlZm9yZWxpbmtpbmcKKy4gICBlbHNlCiske19QfTog JHtPQkpTLiR7X1B9fQorLiAgIGVuZGlmICMgdGFyZ2V0KGJlZm9yZWxpbmtpbmcpCisuICAgaWYg ZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKKwkke0NYWH0gJHtDWFhGTEFHUy4ke19QfX0gJHtMREZM QUdTLiR7X1B9fSAtbyAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0gXAorCSAgICAke0xEQURELiR7 X1B9fQorLiAgIGVsc2UKKwkke0NDfSAke0NGTEFHUy4ke19QfX0gJHtMREZMQUdTLiR7X1B9fSAt byAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0gXAorCSAgICAke0xEQURELiR7X1B9fQorLiAgIGVu ZGlmCisuICAgaWYgJHtNS19DVEZ9ICE9ICJubyIKKwkke0NURk1FUkdFfSAke0NURkZMQUdTfSAt byAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0KKy4gICBlbmRpZgogCi0uZW5kaWYKKy4gIGVuZGlm ICMgIXRhcmdldCgke19QfSkKIAotLmlmCSR7TUtfTUFOfSAhPSAibm8iICYmICFkZWZpbmVkKE1B TikgJiYgXAotCSFkZWZpbmVkKE1BTjEpICYmICFkZWZpbmVkKE1BTjIpICYmICFkZWZpbmVkKE1B TjMpICYmIFwKLQkhZGVmaW5lZChNQU40KSAmJiAhZGVmaW5lZChNQU41KSAmJiAhZGVmaW5lZChN QU42KSAmJiBcCi0JIWRlZmluZWQoTUFONykgJiYgIWRlZmluZWQoTUFOOCkgJiYgIWRlZmluZWQo TUFOOSkgJiYgXAotCSFkZWZpbmVkKE1BTjFhb3V0KQotTUFOPQkke1BST0d9LjEKLU1BTjE9CSR7 TUFOfQotLmVuZGlmCi0uZW5kaWYKKy4gZW5kaWYgIyBkZWZpbmVkKFNSQ1MuJHtfUH0pCiAKLWFs bDogb2Jqd2FybiAke1BST0d9ICR7U0NSSVBUU30KLS5pZiAke01LX01BTn0gIT0gIm5vIgorQ0xF QU5GSUxFUys9IAkke09CSlMuJHtfUH19CisKKy5lbmRmb3IgIyBmb3IgX1AgaW4gJHtQUk9HU30K KworYWxsOiBvYmp3YXJuICR7UFJPR1N9ICR7U0NSSVBUU30KKworLmlmICFkZWZpbmVkKE5PX01B TikKKy4gZm9yIF9QIGluICR7UFJPR1N9CitNQU4uJHtfUH0/PQkke19QfS4xCitNQU46PQkJJHtN QU4uJHtfUH19CisuICBpbmNsdWRlIDxic2QubWFuLm1rPgorLiBlbmRmb3IKKy4gaWYgdGFyZ2V0 KF9tYW5wYWdlcykgIyBic2QubWFuLm1rIHdhcyBpbmNsdWRlZAogYWxsOiBfbWFucGFnZXMKKy4g ZW5kaWYKIC5lbmRpZgogCi0uaWYgZGVmaW5lZChQUk9HKQotQ0xFQU5GSUxFUys9ICR7UFJPR30K LS5lbmRpZgorQ0xFQU5GSUxFUys9CSR7UFJPR1N9CiAKLS5pZiBkZWZpbmVkKE9CSlMpCi1DTEVB TkZJTEVTKz0gJHtPQkpTfQotLmVuZGlmCi0KIC5pbmNsdWRlIDxic2QubGlibmFtZXMubWs+CiAK LS5pZiBkZWZpbmVkKFBST0cpCiBfRVhUUkFERVBFTkQ6Ci0uaWYgZGVmaW5lZChMREZMQUdTKSAm JiAhZW1wdHkoTERGTEFHUzpNLW5vc3RkbGliKQotLmlmIGRlZmluZWQoRFBBREQpICYmICFlbXB0 eShEUEFERCkKLQllY2hvICR7UFJPR306ICR7RFBBRER9ID4+ICR7REVQRU5ERklMRX0KLS5lbmRp ZgotLmVsc2UKLQllY2hvICR7UFJPR306ICR7TElCQ30gJHtEUEFERH0gPj4gJHtERVBFTkRGSUxF fQotLmlmIGRlZmluZWQoUFJPR19DWFgpCi0uaWYgIWVtcHR5KENYWEZMQUdTOk0tc3RkbGliPWxp YmMrKykKLQllY2hvICR7UFJPR306ICR7TElCQ1BMVVNQTFVTfSA+PiAke0RFUEVOREZJTEV9Ci0u ZWxzZQotCWVjaG8gJHtQUk9HfTogJHtMSUJTVERDUExVU1BMVVN9ID4+ICR7REVQRU5ERklMRX0K LS5lbmRpZgotLmVuZGlmCi0uZW5kaWYKLS5lbmRpZgorLmZvciBfUCBpbiAke1BST0dTfQorLiBp ZiAhZW1wdHkoTERGTEFHUy4ke1B9Ok0tbm9zdGRsaWIpCisuICBpZiAhZW1wdHkoRFBBREQuJHtf UH0pCisJZWNobyAke19QfTogJHtEUEFERC4ke19QfX0gPj4gJHtERVBFTkRGSUxFfQorLiAgZW5k aWYKKy4gZWxzZQorCWVjaG8gJHtfUH06ICR7TElCQ30gJHtEUEFERC4ke19QfX0gPj4gJHtERVBF TkRGSUxFfQorLiAgaWYgZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKKy4gICBpZiAhZW1wdHkoQ1hY RkxBR1MuJHtQfTpNLXN0ZGxpYj1saWJjKyspCisJZWNobyAke19QfTogJHtMSUJDUExVU1BMVVN9 ID4+ICR7REVQRU5ERklMRX0KKy4gICBlbHNlCisJZWNobyAke19QfTogJHtMSUJTVERDUExVU1BM VVN9ID4+ICR7REVQRU5ERklMRX0KKy4gICBlbmRpZgorLiAgZW5kaWYKKy4gZW5kaWYKKy5lbmRm b3IKIAogLmlmICF0YXJnZXQoaW5zdGFsbCkKIAotLmlmIGRlZmluZWQoUFJFQ0lPVVNQUk9HKQot LmlmICFkZWZpbmVkKE5PX0ZTQ0hHKQotSU5TVEFMTEZMQUdTKz0gLWZzY2hnCi0uZW5kaWYKLUlO U1RBTExGTEFHUys9IC1TCi0uZW5kaWYKKy4gaWYgIXRhcmdldChyZWFsaW5zdGFsbCkKIAotX0lO U1RBTExGTEFHUzo9CSR7SU5TVEFMTEZMQUdTfQotLmZvciBpZSBpbiAke0lOU1RBTExGTEFHU19F RElUfQotX0lOU1RBTExGTEFHUzo9CSR7X0lOU1RBTExGTEFHUyR7aWV9fQotLmVuZGZvcgorLiAg Zm9yIF9QIGluICR7UFJPR1N9CiAKLS5pZiAhdGFyZ2V0KHJlYWxpbnN0YWxsKSAmJiAhZGVmaW5l ZChJTlRFUk5BTFBST0cpCi1yZWFsaW5zdGFsbDogX3Byb2dpbnN0YWxsCi0uT1JERVI6IGJlZm9y ZWluc3RhbGwgX3Byb2dpbnN0YWxsCi1fcHJvZ2luc3RhbGw6Ci0uaWYgZGVmaW5lZChQUk9HKQot LmlmIGRlZmluZWQoUFJPR05BTUUpCi0JJHtJTlNUQUxMfSAke1NUUklQfSAtbyAke0JJTk9XTn0g LWcgJHtCSU5HUlB9IC1tICR7QklOTU9ERX0gXAotCSAgICAke19JTlNUQUxMRkxBR1N9ICR7UFJP R30gJHtERVNURElSfSR7QklORElSfS8ke1BST0dOQU1FfQotLmVsc2UKLQkke0lOU1RBTEx9ICR7 U1RSSVB9IC1vICR7QklOT1dOfSAtZyAke0JJTkdSUH0gLW0gJHtCSU5NT0RFfSBcCi0JICAgICR7 X0lOU1RBTExGTEFHU30gJHtQUk9HfSAke0RFU1RESVJ9JHtCSU5ESVJ9Ci0uZW5kaWYKLS5lbmRp ZgotLmVuZGlmCSMgIXRhcmdldChyZWFsaW5zdGFsbCkKKy4gICBpZiAhZGVmaW5lZChJTlRFUk5B TFBST0cuJHtfUH0pCiAKLS5pZiBkZWZpbmVkKFNDUklQVFMpICYmICFlbXB0eShTQ1JJUFRTKQot cmVhbGluc3RhbGw6IF9zY3JpcHRzaW5zdGFsbAotLk9SREVSOiBiZWZvcmVpbnN0YWxsIF9zY3Jp cHRzaW5zdGFsbAorLk9SREVSOiBiZWZvcmVpbnN0YWxsIF9wcm9naW5zdGFsbC4ke19QfQorX3By b2dpbnN0YWxsLiR7X1B9OgorLiAgICBpZiBkZWZpbmVkKFBST0dOQU1FLiR7X1B9KQorCSR7SU5T VEFMTH0gJHtTVFJJUH0gLW8gJHtCSU5PV04uJHtfUH19IC1nICR7QklOR1JQLiR7X1B9fSBcCisJ ICAgIC1tICR7QklOTU9ERS4ke19QfX0gJHtJTlNUQUxMRkxBR1MuJHtfUH19ICR7X1B9IFwKKwkg ICAgJHtERVNURElSfSR7QklORElSLiR7X1B9fS8ke1BST0dOQU1FLiR7X1B9fQorLiAgICBlbHNl CisJJHtJTlNUQUxMfSAke1NUUklQfSAtbyAke0JJTk9XTi4ke19QfX0gLWcgJHtCSU5HUlAuJHtf UH19IFwKKwkgICAgLW0gJHtCSU5NT0RFLiR7X1B9fSAke0lOU1RBTExGTEFHUy4ke19QfX0gJHtf UH0gXAorCSAgICAke0RFU1RESVJ9JHtCSU5ESVIuJHtfUH19CisuICAgIGVuZGlmIAogCityZWFs aW5zdGFsbDogX3Byb2dpbnN0YWxsLiR7X1B9CisKKy4gICBlbmRpZiAjICFkZWZpbmVkKElOVEVS TkFMUFJPRy4ke19QfSkKKworLiAgZW5kZm9yICMgZm9yIF9QIGluICR7UFJPR1N9CisKKy4gZW5k aWYgIyAhdGFyZ2V0KHJlYWxpbnN0YWxsKQorCisuIGlmIGRlZmluZWQoU0NSSVBUUykgJiYgIWVt cHR5KFNDUklQVFMpCiBTQ1JJUFRTRElSPz0JJHtCSU5ESVJ9CiBTQ1JJUFRTT1dOPz0JJHtCSU5P V059CiBTQ1JJUFRTR1JQPz0JJHtCSU5HUlB9CiBTQ1JJUFRTTU9ERT89CSR7QklOTU9ERX0KIAot LmZvciBzY3JpcHQgaW4gJHtTQ1JJUFRTfQotLmlmIGRlZmluZWQoU0NSSVBUU05BTUUpCi1TQ1JJ UFRTTkFNRV8ke3NjcmlwdDpUfT89CSR7U0NSSVBUU05BTUV9Ci0uZWxzZQotU0NSSVBUU05BTUVf JHtzY3JpcHQ6VH0/PQkke3NjcmlwdDpUOlJ9Ci0uZW5kaWYKLVNDUklQVFNESVJfJHtzY3JpcHQ6 VH0/PQkke1NDUklQVFNESVJ9Ci1TQ1JJUFRTT1dOXyR7c2NyaXB0OlR9Pz0JJHtTQ1JJUFRTT1dO fQotU0NSSVBUU0dSUF8ke3NjcmlwdDpUfT89CSR7U0NSSVBUU0dSUH0KLVNDUklQVFNNT0RFXyR7 c2NyaXB0OlR9Pz0JJHtTQ1JJUFRTTU9ERX0KLV9zY3JpcHRzaW5zdGFsbDogX1NDUklQVFNJTlNf JHtzY3JpcHQ6VH0KLV9TQ1JJUFRTSU5TXyR7c2NyaXB0OlR9OiAke3NjcmlwdH0KLQkke0lOU1RB TEx9IC1vICR7U0NSSVBUU09XTl8key5BTExTUkM6VH19IFwKLQkgICAgLWcgJHtTQ1JJUFRTR1JQ XyR7LkFMTFNSQzpUfX0gLW0gJHtTQ1JJUFRTTU9ERV8key5BTExTUkM6VH19IFwKKy4gIGZvciBT IGluICR7U0NSSVBUU30KKworcmVhbGluc3RhbGw6IHNjcmlwdHNpbnN0YWxsCisuT1JERVI6IGJl Zm9yZWluc3RhbGwgc2NyaXB0c2luc3RhbGwKKworLiAgIGlmIGRlZmluZWQoU0NSSVBUU05BTUUp CitTQ1JJUFRTTkFNRV8ke1N9Pz0gJHtTQ1JJUFRTTkFNRX0KKy4gICBlbHNlCitTQ1JJUFRTTkFN RV8ke1N9Pz0gJHtTOlQ6Un0KKy4gICBlbmRpZgorCitTQ1JJUFRTRElSXyR7U30/PSAke1NDUklQ VFNESVJ9CitTQ1JJUFRTT1dOXyR7U30/PSAke1NDUklQVFNPV059CitTQ1JJUFRTR1JQXyR7U30/ PSAke1NDUklQVFNHUlB9CitTQ1JJUFRTTU9ERV8ke1N9Pz0gJHtTQ1JJUFRTTU9ERX0KKworc2Ny aXB0c2luc3RhbGw6ICR7REVTVERJUn0ke1NDUklQVFNESVJfJHtTfX0vJHtTQ1JJUFRTTkFNRV8k e1N9fQorCiske0RFU1RESVJ9JHtTQ1JJUFRTRElSXyR7U319LyR7U0NSSVBUU05BTUVfJHtTfX06 ICR7U30KKwkke0lOU1RBTEx9IC1vICR7U0NSSVBUU09XTl8ke1N9fSBcCisJICAgIC1nICR7U0NS SVBUU0dSUF8ke1N9fSBcCisJICAgIC1tICR7U0NSSVBUU01PREVfJHtTfX0gXAogCSAgICAkey5B TExTUkN9IFwKLQkgICAgJHtERVNURElSfSR7U0NSSVBUU0RJUl8key5BTExTUkM6VH19LyR7U0NS SVBUU05BTUVfJHsuQUxMU1JDOlR9fQotLmVuZGZvcgorCSAgICAkey5UQVJHRVR9CisKKy4gIGVu ZGZvciAjIGZvciBTIGluICR7U0NSSVBUU30KKworLiBlbmRpZiAjIGRlZmluZWQoU0NSSVBUUykg JiYgIWVtcHR5KFNDUklQVFMpCisKKy5lbmRpZiAjICF0YXJnZXQoaW5zdGFsbCkKKworLmlmICFk ZWZpbmVkKE5PX01BTikKKy4gaWYgdGFyZ2V0KF9tYW5wYWdlcykgIyBic2QubWFuLm1rIHdhcyBp bmNsdWRlZAorcmVhbGluc3RhbGw6IF9tYW5pbnN0YWxsCisuIGVuZGlmCiAuZW5kaWYKIAotTkxT TkFNRT89CSR7UFJPR30KKyMgV3JhcCBic2QubmxzLm1rIGJlY2F1c2UgSSBjYW4ndCBmb3JjZSB0 aGF0IE1ha2VmaWxlIHNuaXBwZXQgdG8gd29yayBvbmx5IHdpdGgKKyMgJHtQUk9HU30uCisuZm9y IF9QIGluICR7UFJPR1N9CitOTFNOQU1FLiR7X1B9Pz0JJHtfUH0KK05MUzo9CQkke05MUy4ke19Q fX0KK05MU0RJUjo9CSR7TkxTRElSLiR7X1B9fQorTkxTTkFNRTo9CSR7TkxTTkFNRS4ke19QfX0K IC5pbmNsdWRlIDxic2QubmxzLm1rPgorLmVuZGZvcgogCiAuaW5jbHVkZSA8YnNkLmZpbGVzLm1r PgogLmluY2x1ZGUgPGJzZC5pbmNzLm1rPgogLmluY2x1ZGUgPGJzZC5saW5rcy5taz4KIAotLmlm ICR7TUtfTUFOfSAhPSAibm8iCi1yZWFsaW5zdGFsbDogX21hbmluc3RhbGwKLS5PUkRFUjogYmVm b3JlaW5zdGFsbCBfbWFuaW5zdGFsbAotLmVuZGlmCisuaWYgIXRhcmdldChsaW50KQorLiBmb3Ig X1AgaW4gJHtQUk9HU30KKy4gIGlmICF0YXJnZXQobGludC4ke19QfSkKKy4gICBpZiBkZWZpbmVk KFBST0dfQ1hYLiR7X1B9KQorbGludC4ke19QfToKKy4gICBlbHNlCitfQ0ZMQUdTOj0JJHtDRkxB R1MuJHtfUH19CitfU1JDUzo9CQkke1NSQ1MuJHtfUH19CitsaW50LiR7X1B9OiAke19TUkNTOk0q LmN9CisJJHtMSU5UfSAke0xJTlRGTEFHU30gJHtfQ0ZMQUdTOk0tW0RJVV0qfSAkey5BTExTUkN9 CisuICAgZW5kaWYKKy4gIGVuZGlmCitsaW50OiBsaW50LiR7X1B9CiAKLS5lbmRpZgorLiBlbmRm b3IKKy5lbmRpZiAjICF0YXJnZXQobGludCkKIAotLmlmICF0YXJnZXQobGludCkKLWxpbnQ6ICR7 U1JDUzpNKi5jfQotLmlmIGRlZmluZWQoUFJPRykKLQkke0xJTlR9ICR7TElOVEZMQUdTfSAke0NG TEFHUzpNLVtESVVdKn0gJHsuQUxMU1JDfQotLmVuZGlmCi0uZW5kaWYKKy5mb3IgX1AgaW4gJHtQ Uk9HU30KK0NGTEFHUzo9CSR7Q0ZMQUdTLiR7X1B9fQorQ1hYRkxBR1M6PQkke0NYWEZMQUdTLiR7 X1B9fQorU1JDUzo9CQkke1NSQ1MuJHtfUH19CisuIGluY2x1ZGUgPGJzZC5kZXAubWs+CisjIGJz ZC5kZXAubWsgbWFuZ2xlcyBTUkNTCitTUkNTLiR7X1B9Oj0JJHtTUkNTfQorLmVuZGZvcgogCi0u aWYgJHtNS19NQU59ICE9ICJubyIKLS5pbmNsdWRlIDxic2QubWFuLm1rPgorIyBYWFg6IGVtdWxh dGUgdGhlIG9sZCBic2QucHJvZy5tayBieSBhbGxvd2luZyBNYWtlZmlsZXMgdGhhdCBkaWRuJ3Qg c2V0CisjICR7UFJPRyp9IHRvIGZ1bmN0aW9uIHdpdGggdGhpcyBNYWtlZmlsZSBzbmlwcGV0Lgor LmlmIGVtcHR5KFBST0dTKQorLiBpbmNsdWRlIDxic2QuZGVwLm1rPgogLmVuZGlmCiAKLS5pbmNs dWRlIDxic2QuZGVwLm1rPgotCi0uaWYgZGVmaW5lZChQUk9HKSAmJiAhZXhpc3RzKCR7Lk9CSkRJ Un0vJHtERVBFTkRGSUxFfSkKLSR7T0JKU306ICR7U1JDUzpNKi5ofQorLmlmICFleGlzdHMoJHsu T0JKRElSfS8ke0RFUEVOREZJTEV9KQorLiBmb3IgX1AgaW4gJHtQUk9HU30KK19TUkNTOj0JCSR7 U1JDUy4ke19QfX0KKyR7T0JKUy4ke19QfX06ICR7X1NSQ1M6TSouaH0KKy4gZW5kZm9yCiAuZW5k aWYKIAogLmluY2x1ZGUgPGJzZC5vYmoubWs+CkluZGV4OiBzaGFyZS9tay9ic2QuUkVBRE1FCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHNoYXJlL21rL2JzZC5SRUFETUUJKHJldmlzaW9uIDI0MDY4OSkKKysrIHNo YXJlL21rL2JzZC5SRUFETUUJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw5OCArMjA3LDE1NyBAQAog CiBJdCBzZXRzL3VzZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CiAKLUJJTkdSUAkJQmluYXJ5 IGdyb3VwLgorVmFyaWFibGVzIGdsb2JhbCB0byBhbGwgcHJvZ3JhbXM6CiAKLUJJTk9XTgkJQmlu YXJ5IG93bmVyLgorQ0xFQU5GSUxFUwkJQWRkaXRpb25hbCBmaWxlcyB0byByZW1vdmUgYW5kCitD TEVBTkRJUlMJCWFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgdG8gcmVtb3ZlIGR1cmluZyBjbGVhbiBh bmQgY2xlYW5kaXIKKwkJCXRhcmdldHMuICAicm0gLWYiIGFuZCAicm0gLXJmIiB1c2VkIHJlc3Bl Y3RpdmVseS4KIAotQklOTU9ERQkJQmluYXJ5IG1vZGUuCitERUJVR19GTEFHUwkJZGVidWdnaW5n IHNwZWNpZmljIENGTEFHUy9MREZMQUdTOyBpZiBzZXQgYW55IGJpbmFyaWVzCisgCQkJcHJvZHVj ZWQgd2lsbCBub3QgYmUgc3RyaXBwZWQuICBTZWUgYWxzbzogV0lUSF9DVEYKIAotQ0xFQU5GSUxF UwlBZGRpdGlvbmFsIGZpbGVzIHRvIHJlbW92ZSBhbmQKLUNMRUFORElSUwlhZGRpdGlvbmFsIGRp cmVjdG9yaWVzIHRvIHJlbW92ZSBkdXJpbmcgY2xlYW4gYW5kIGNsZWFuZGlyCi0JCXRhcmdldHMu ICAicm0gLWYiIGFuZCAicm0gLXJmIiB1c2VkIHJlc3BlY3RpdmVseS4KK0ZJTEVTCQkJQSBsaXN0 IG9mIG5vbi1leGVjdXRhYmxlIGZpbGVzLgorCQkJVGhlIGluc3RhbGxhdGlvbiBpcyBjb250cm9s bGVkIGJ5IHRoZSBGSUxFU05BTUUsIEZJTEVTT1dOLAorCQkJRklMRVNHUlAsIEZJTEVTTU9ERSwg RklMRVNESVIgdmFyaWFibGVzIHRoYXQgY2FuIGJlCisJCQlmdXJ0aGVyIHNwZWNpYWxpemVkIGJ5 IEZJTEVTPFZBUj5fPGZpbGU+LgogCi1DRkxBR1MJCUZsYWdzIHRvIHRoZSBjb21waWxlciB3aGVu IGNyZWF0aW5nIEMgb2JqZWN0cy4KK0xJTktTCQkJVGhlIGxpc3Qgb2YgYmluYXJ5IGxpbmtzOyBz aG91bGQgYmUgZnVsbCBwYXRobmFtZXMsIHRoZQorCQkJbGlua2VkLXRvIGZpbGUgY29taW5nIGZp cnN0LCBmb2xsb3dlZCBieSB0aGUgbGlua2VkCisJCQlmaWxlLiAgVGhlIGZpbGVzIGFyZSBoYXJk LWxpbmtlZC4gIEZvciBleGFtcGxlLCB0byBsaW5rCisJCQkvYmluL3Rlc3QgYW5kIC9iaW4vWywg dXNlOgogCi1GSUxFUwkJQSBsaXN0IG9mIG5vbi1leGVjdXRhYmxlIGZpbGVzLgotCQlUaGUgaW5z dGFsbGF0aW9uIGlzIGNvbnRyb2xsZWQgYnkgdGhlIEZJTEVTTkFNRSwgRklMRVNPV04sCi0JCUZJ TEVTR1JQLCBGSUxFU01PREUsIEZJTEVTRElSIHZhcmlhYmxlcyB0aGF0IGNhbiBiZQotCQlmdXJ0 aGVyIHNwZWNpYWxpemVkIGJ5IEZJTEVTPFZBUj5fPGZpbGU+LgorCQkJTElOS1M9CSR7REVTVERJ Un0vYmluL3Rlc3QgJHtERVNURElSfS9iaW4vWwogCi1MREFERAkJQWRkaXRpb25hbCBsb2FkZXIg b2JqZWN0cy4gIFVzdWFsbHkgdXNlZCBmb3IgbGlicmFyaWVzLgotCQlGb3IgZXhhbXBsZSwgdG8g bG9hZCB3aXRoIHRoZSBjb21wYXRpYmlsaXR5IGFuZCB1dGlsaXR5Ci0JCWxpYnJhcmllcywgdXNl OgorUFJPRwkJCVRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIGJ1aWxkLiAgSWYgbm90IHN1cHBs aWVkLAorCQkJbm90aGluZyBpcyBidWlsdC4KIAorUFJPR19DWFgJCUlmIGRlZmluZWQsIHRoZSBu YW1lIG9mIHRoZSBDKysgcHJvZ3JhbSB0byBidWlsZC4gIEFsc28KKwkJCWNhdXNlcyA8YnNkLnBy b2cubWs+IHRvIGxpbmsgdGhlIHByb2dyYW0gd2l0aCB0aGUKKwkJCXN0YW5kYXJkIEMrKyBsaWJy YXJ5LiAgUFJPR19DWFggb3ZlcnJpZGVzIHRoZSB2YWx1ZQorCQkJb2YgUFJPRyBpZiBQUk9HIGlz IGFsc28gc2V0LgorCitTVFJJUAkJCVRoZSBmbGFnIHBhc3NlZCB0byB0aGUgaW5zdGFsbCBwcm9n cmFtIHRvIGNhdXNlIHRoZQorCQkJYmluYXJ5IHRvIGJlIHN0cmlwcGVkLiAgVGhpcyBpcyB0byBi ZSB1c2VkIHdoZW4KKwkJCWJ1aWxkaW5nIHlvdXIgb3duIGluc3RhbGwgc2NyaXB0IHNvIHRoYXQg dGhlIGVudGlyZQorCQkJc3lzdGVtIGNhbiBiZSBtYWRlIHN0cmlwcGVkL25vdC1zdHJpcHBlZCB1 c2luZyBhCisJCQlzaW5nbGUga25vYi4KKworU1VCRElSCQkJQSBsaXN0IG9mIHN1YmRpcmVjdG9y aWVzIHRoYXQgc2hvdWxkIGJlIGJ1aWx0IGFzIHdlbGwuCisJCQlFYWNoIG9mIHRoZSB0YXJnZXRz IHdpbGwgZXhlY3V0ZSB0aGUgc2FtZSB0YXJnZXQgaW4gdGhlCisJCQlzdWJkaXJlY3Rvcmllcy4K KworVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgY2FuIGJlIHR1bmVkIGZvciBzcGVjaWZpYyBwcm9n cmFtIHVzZSAoeW91IHdpbGwgbmVlZAordG8gc3VmZml4IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB3 aXRoIC4ke1BST0d9LCBlLmcuIFBST0c9IGZvbyAtPiBTUkNTLmZvbyk6CisKK0JJTkRJUgkJCUJp bmFyeSBkaXJlY3RvcnkuCisKK0JJTkdSUAkJCUJpbmFyeSBncm91cC4KKworQklOT1dOCQkJQmlu YXJ5IG93bmVyLgorCitCSU5NT0RFCQkJQmluYXJ5IG1vZGUuCisKK0NGTEFHUwkJCUZsYWdzIHRv IHRoZSBjb21waWxlciB3aGVuIGNyZWF0aW5nIEMgb2JqZWN0cy4KKworRFBBREQJCQlBZGRpdGlv bmFsIGRlcGVuZGVuY2llcyBmb3IgdGhlIHByb2dyYW0uICBVc3VhbGx5IHVzZWQKKwkJCWZvciBs aWJyYXJpZXMuICBGb3IgZXhhbXBsZSwgdG8gZGVwZW5kIG9uIHRoZQorCQkJY29tcGF0aWJpbGl0 eSBhbmQgdXRpbGl0eSBsaWJyYXJpZXMgdXNlOgorCisJCQkJRFBBREQ9JHtMSUJDT01QQVR9ICR7 TElCVVRJTH0KKworCQkJVGhlcmUgaXMgYSBwcmVkZWZpbmVkIGlkZW50aWZpZXIgZm9yIGVhY2gK KwkJCShub24tcHJvZmlsZWQsIG5vbi1zaGFyZWQpIGxpYnJhcnkgYW5kIG9iamVjdC4gIExpYnJh cnkKKwkJCWZpbGUgbmFtZXMgYXJlIHRyYW5zZm9ybWVkIHRvIGlkZW50aWZpZXJzIGJ5IHJlbW92 aW5nCisJCQl0aGUgZXh0ZW5zaW9uIGFuZCBjb252ZXJ0aW5nIHRvIHVwcGVyIGNhc2UuCisKKwkJ CVRoZXJlIGFyZSBubyBzcGVjaWFsIGlkZW50aWZpZXJzIGZvciBwcm9maWxlZCBvciBzaGFyZWQK KwkJCWxpYnJhcmllcyBvciBvYmplY3RzLiAgVGhlIGlkZW50aWZpZXJzIGZvciB0aGUgc3RhbmRh cmQKKwkJCWxpYnJhcmllcyBhcmUgdXNlZCBpbiBEUEFERC4gIFRoaXMgd29ya3MgY29ycmVjdGx5 IGlmZgorCQkJYWxsIHRoZSBsaWJyYXJpZXMgYXJlIGJ1aWx0IGF0IHRoZSBzYW1lIHRpbWUuCisJ CQlVbmZvcnR1bmF0ZWx5LCBpdCBjYXVzZXMgdW5uZWNlc3NhcnkgcmVsaW5rcyB0byBzaGFyZWQK KwkJCWxpYnJhcmllcyB3aGVuIG9ubHkgdGhlIHN0YXRpYyBsaWJyYXJpZXMgaGF2ZSBjaGFuZ2Vk LgorCQkJRGVwZW5kZW5jaWVzIG9uIHNoYXJlZCBsaWJyYXJpZXMgc2hvdWxkIGJlIG9ubHkgb24g dGhlCisJCQlsaWJyYXJ5IHZlcnNpb24gbnVtYmVycy4KKworSU5TVEFMTEZMQUdTCQlpbnN0YWxs KDEpIGZsYWdzLgorCitMREFERAkJCUFkZGl0aW9uYWwgbG9hZGVyIG9iamVjdHMuICBVc3VhbGx5 IHVzZWQgZm9yIGxpYnJhcmllcy4KKwkJCUZvciBleGFtcGxlLCB0byBsb2FkIHdpdGggdGhlIGNv bXBhdGliaWxpdHkgYW5kIHV0aWxpdHkKKwkJCWxpYnJhcmllcywgdXNlOgorCiAJCQlMREFERD0t bHV0aWwgLWxjb21wYXQKIAotTERGTEFHUwkJQWRkaXRpb25hbCBsb2FkZXIgZmxhZ3MuCitMREZM QUdTCQkJQWRkaXRpb25hbCBsb2FkZXIgZmxhZ3MuCiAKLUxJTktTCQlUaGUgbGlzdCBvZiBiaW5h cnkgbGlua3M7IHNob3VsZCBiZSBmdWxsIHBhdGhuYW1lcywgdGhlCi0JCWxpbmtlZC10byBmaWxl IGNvbWluZyBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIGxpbmtlZAotCQlmaWxlLiAgVGhlIGZpbGVz IGFyZSBoYXJkLWxpbmtlZC4gIEZvciBleGFtcGxlLCB0byBsaW5rCi0JCS9iaW4vdGVzdCBhbmQg L2Jpbi9bLCB1c2U6CitNQU4JCQlNYW51YWwgcGFnZXMgKHNob3VsZCBlbmQgaW4gLjEgLSAuOSku ICBJZiBubyBNQU4KKwkJCXZhcmlhYmxlIGlzIGRlZmluZWQsICJNQU49PFBST0c+LjEiIGlzIGFz c3VtZWQuCiAKLQkJCUxJTktTPQkke0RFU1RESVJ9L2Jpbi90ZXN0ICR7REVTVERJUn0vYmluL1sK K05PX0ZTQ0hHCQlEbyBub3QgY2FsbCBpbnN0YWxsKDEpIHdpdGggLWYgc2NoZy4KIAotTUFOCQlN YW51YWwgcGFnZXMgKHNob3VsZCBlbmQgaW4gLjEgLSAuOSkuICBJZiBubyBNQU4gdmFyaWFibGUK LQkJaXMgZGVmaW5lZCwgIk1BTj0ke1BST0d9LjEiIGlzIGFzc3VtZWQuCitQUkVDSU9VU1BST0cJ CUluc3RhbGwgd2l0aCAtUyAoc2FmZSBjb3B5KSBhbmQgaGFuZGxlIE5PX0ZTQ0hHCisJCQl2YXJp YWJsZSBjYXNlIGFzIHdlbGwuCiAKLVBST0cJCVRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIGJ1 aWxkLiAgSWYgbm90IHN1cHBsaWVkLCBub3RoaW5nCi0JCWlzIGJ1aWx0LgorUFJPR19DWFgJCUMr KyBhcHBsaWNhdGlvbiBuYW1lKHMpOyB0aGUgc291cmNlcyBmb3IgdGhlCisJCQlhcHBsaWNhdGlv bihzKSBhcmUgY29tcGlsZWQgdmlhICR7Q1hYfQogCi1QUk9HX0NYWAlJZiBkZWZpbmVkLCB0aGUg bmFtZSBvZiB0aGUgcHJvZ3JhbSB0byBidWlsZC4gIEFsc28KLQkJY2F1c2VzIDxic2QucHJvZy5t az4gdG8gbGluayB0aGUgcHJvZ3JhbSB3aXRoIHRoZQotCQlzdGFuZGFyZCBDKysgbGlicmFyeS4g IFBST0dfQ1hYIG92ZXJyaWRlcyB0aGUgdmFsdWUKLQkJb2YgUFJPRyBpZiBQUk9HIGlzIGFsc28g c2V0LgorUFJPR05BTUUJCVRoZSBuYW1lIHRoYXQgdGhlIGFib3ZlIHByb2dyYW0gd2lsbCBiZSBp bnN0YWxsZWQsIGlmCisJCQlkaWZmZXJlbnQgZnJvbSA8UFJPRz4uCiAKLVBST0dOQU1FCVRoZSBu YW1lIHRoYXQgdGhlIGFib3ZlIHByb2dyYW0gd2lsbCBiZSBpbnN0YWxsZWQgYXMsIGlmCi0JCWRp ZmZlcmVudCBmcm9tICR7UFJPR30uCitTUkNTCQkJTGlzdCBvZiBzb3VyY2UgZmlsZXMgdG8gYnVp bGQgdGhlIHByb2dyYW0uICBJZiBTUkNTIGlzCisJCQlub3QgZGVmaW5lZCwgaXQncyBhc3N1bWVk IHRvIGJlICR7UFJPR30uYyBvciwgaWYKKwkJCVBST0dfQ1hYIGlzIGRlZmluZWQsICR7UFJPR19D WFh9LmNjLgogCi1TUkNTCQlMaXN0IG9mIHNvdXJjZSBmaWxlcyB0byBidWlsZCB0aGUgcHJvZ3Jh bS4gIElmIFNSQ1MgaXMgbm90Ci0JCWRlZmluZWQsIGl0J3MgYXNzdW1lZCB0byBiZSAke1BST0d9 LmMgb3IsIGlmIFBST0dfQ1hYIGlzCi0JCWRlZmluZWQsICR7UFJPR19DWFh9LmNjLgorU0NSSVBU UwkJCUEgbGlzdCBvZiBpbnRlcnByZXRlciBzY3JpcHRzIFtmaWxlLntzaCxjc2gscGwsYXdrLC4u Ln1dLgorCQkJVGhlIGluc3RhbGxhdGlvbiBpcyBjb250cm9sbGVkIGJ5IHRoZSBTQ1JJUFRTTkFN RSwgU0NSSVBUU09XTiwKKwkJCVNDUklQVFNHUlAsIFNDUklQVFNNT0RFLCBTQ1JJUFRTRElSIHZh cmlhYmxlcyB0aGF0IGNhbiBiZQorCQkJZnVydGhlciBzcGVjaWFsaXplZCBieSBTQ1JJUFRTPFZB Uj5fPHNjcmlwdD4uCiAKLURQQURECQlBZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBmb3IgdGhlIHBy b2dyYW0uICBVc3VhbGx5IHVzZWQgZm9yCi0JCWxpYnJhcmllcy4gIEZvciBleGFtcGxlLCB0byBk ZXBlbmQgb24gdGhlIGNvbXBhdGliaWxpdHkgYW5kCi0JCXV0aWxpdHkgbGlicmFyaWVzIHVzZToK K1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGNhbiBiZSB0dW5lZCBmb3Igc3BlY2lmaWMgc2NyaXB0 czsgeW91IHdpbGwgbmVlZAordG8gc3VmZml4IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB3aXRoIF88 U0NSSVBUPiwgZS5nLgorU0NSSVBUIC0+IGZvbywgLT4gU0NSSVBURElSX2Zvby4gIEluIGFsbCBj YXNlcywgdGhlIHBlci1zY3JpcHQgdmFyaWFibGVzCitkZWZhdWx0IHRvIHRoZSBlcXVpdmFsZW50 IGdsb2JhbCBTQ1JJUFQqIHZhcmlhYmxlIGFuZCBmYWxsYmFjayB0byB0aGUKK0JJTiogZXF1aXZh bGVudHMsIGUuZy4gU0NSSVBURElSX2ZvbyBmYWxscyBiYWNrIHRvIFNDUklQVERJUiBpZiBTQ1JJ UFRESVJfZm9vCitpcyBub3QgZGVmaW5lZCwgdGhlbiBCSU5ESVIgaWYgU0NSSVBURElSIGlzIG5v dCBkZWZpbmVkOgogCi0JCQlEUEFERD0ke0xJQkNPTVBBVH0gJHtMSUJVVElMfQorU0NSSVBUU0RJ UgkJRGlyZWN0b3J5IHRvIGluc3RhbGwgYSBzY3JpcHQgdG8uCiAKLQkJVGhlcmUgaXMgYSBwcmVk ZWZpbmVkIGlkZW50aWZpZXIgZm9yIGVhY2ggKG5vbi1wcm9maWxlZCwKLQkJbm9uLXNoYXJlZCkg bGlicmFyeSBhbmQgb2JqZWN0LiAgTGlicmFyeSBmaWxlIG5hbWVzIGFyZQotCQl0cmFuc2Zvcm1l ZCB0byBpZGVudGlmaWVycyBieSByZW1vdmluZyB0aGUgZXh0ZW5zaW9uIGFuZAotCQljb252ZXJ0 aW5nIHRvIHVwcGVyIGNhc2UuCitTQ1JJUFRHUlAJCUdyb3VwIHRvIHNldCBmb3IgYSBzY3JpcHQu CiAKLQkJVGhlcmUgYXJlIG5vIHNwZWNpYWwgaWRlbnRpZmllcnMgZm9yIHByb2ZpbGVkIG9yIHNo YXJlZAotCQlsaWJyYXJpZXMgb3Igb2JqZWN0cy4gIFRoZSBpZGVudGlmaWVycyBmb3IgdGhlIHN0 YW5kYXJkCi0JCWxpYnJhcmllcyBhcmUgdXNlZCBpbiBEUEFERC4gIFRoaXMgd29ya3MgY29ycmVj dGx5IGlmZiBhbGwKLQkJdGhlIGxpYnJhcmllcyBhcmUgYnVpbHQgYXQgdGhlIHNhbWUgdGltZS4g IFVuZm9ydHVuYXRlbHksCi0JCWl0IGNhdXNlcyB1bm5lY2Vzc2FyeSByZWxpbmtzIHRvIHNoYXJl ZCBsaWJyYXJpZXMgd2hlbgotCQlvbmx5IHRoZSBzdGF0aWMgbGlicmFyaWVzIGhhdmUgY2hhbmdl ZC4gIERlcGVuZGVuY2llcyBvbgotCQlzaGFyZWQgbGlicmFyaWVzIHNob3VsZCBiZSBvbmx5IG9u IHRoZSBsaWJyYXJ5IHZlcnNpb24KLQkJbnVtYmVycy4KK1NDUklQVE1PREUJCU1vZGUgdG8gYXBw bHkgdG8gYSBzY3JpcHQuCiAKLVNUUklQCQlUaGUgZmxhZyBwYXNzZWQgdG8gdGhlIGluc3RhbGwg cHJvZ3JhbSB0byBjYXVzZSB0aGUgYmluYXJ5Ci0JCXRvIGJlIHN0cmlwcGVkLiAgVGhpcyBpcyB0 byBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgeW91cgotCQlvd24gaW5zdGFsbCBzY3JpcHQgc28gdGhh dCB0aGUgZW50aXJlIHN5c3RlbSBjYW4gYmUgbWFkZQotCQlzdHJpcHBlZC9ub3Qtc3RyaXBwZWQg dXNpbmcgYSBzaW5nbGUgbm9iLgorU0NSSVBUT1dOCQlPd25lciB0byBzZXQgZm9yIGEgc2NyaXB0 LgogCi1TVUJESVIJCUEgbGlzdCBvZiBzdWJkaXJlY3RvcmllcyB0aGF0IHNob3VsZCBiZSBidWls dCBhcyB3ZWxsLgotCQlFYWNoIG9mIHRoZSB0YXJnZXRzIHdpbGwgZXhlY3V0ZSB0aGUgc2FtZSB0 YXJnZXQgaW4gdGhlCi0JCXN1YmRpcmVjdG9yaWVzLgorTGVnYWN5IHZhcmlhYmxlcyBhcmUgYXMg Zm9sbG93czoKIAotU0NSSVBUUwkJQSBsaXN0IG9mIGludGVycHJldGVyIHNjcmlwdHMgW2ZpbGUu e3NoLGNzaCxwbCxhd2ssLi4ufV0uCi0JCVRoZSBpbnN0YWxsYXRpb24gaXMgY29udHJvbGxlZCBi eSB0aGUgU0NSSVBUU05BTUUsIFNDUklQVFNPV04sCi0JCVNDUklQVFNHUlAsIFNDUklQVFNNT0RF LCBTQ1JJUFRTRElSIHZhcmlhYmxlcyB0aGF0IGNhbiBiZQotCQlmdXJ0aGVyIHNwZWNpYWxpemVk IGJ5IFNDUklQVFM8VkFSPl88c2NyaXB0Pi4KK0NPUFRTCQkJT3B0aW1pemF0aW9uIGZsYWdzIGFw cGVuZGVkIHRvIENGTEFHUzsgaGlnaGx5CisgCQkJZGlzY291cmFnZWQgaW4gbW9kZXJuIE1ha2Vm aWxlcy4KIAorUFJPRwkJCUxlZ2FjeSBmb3JtIG9mIGBQUk9HU2AKKworUFJPR19DWFgJCUxlZ2Fj eSBmb3JtIG9mIGBQUk9HU19DWFhgCisKK1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSB3cmFw cGVkIHRvIGJlIG1hZGUgYFBST0dTIGF3YXJlYDoKKworTkxTCQkJU2VlIGJzZC5ubHMubWsgZGVz Y3JpcHRpb24gZm9yIG1vcmUgZGV0YWlscy4KK05MU0RJUgorTkxTTkFNRQorCitEZXZlbG9wZXIg Y29udmVuaWVuY2UgdmFyaWFibGVzOgorCitXSVRIX0FTU0VSVF9ERUJVRwlDb21waWxlIHdpdGgg Q0ZMQUdTKz0tRE5ERUJVRworCiBUaGUgaW5jbHVkZSBmaWxlIDxic2QucHJvZy5taz4gaW5jbHVk ZXMgdGhlIGZpbGUgbmFtZWQgIi4uL01ha2VmaWxlLmluYyIKLWlmIGl0IGV4aXN0cywgYXMgd2Vs bCBhcyB0aGUgaW5jbHVkZSBmaWxlIDxic2QubWFuLm1rPi4KK2lmIGl0IGV4aXN0cywgYXMgd2Vs bCBhcyB0aGUgaW5jbHVkZSBmaWxlIDxic2QubWFuLm1rPi4gIEZ1cnRoZXJtb3JlLCBpZgorV0lU SF9OTFMgaXMgZGVmaW5lZCBhbmQgTkxTLjxQUk9HPiBpcyBhbHNvIGRlZmluZWQsIHRoZW4gYnNk Lm5scy5tayBpcworaW5jbHVkZWQgYXMgd2VsbC4KIAogU29tZSBzaW1wbGUgZXhhbXBsZXM6CiAK KzEuIFNpbmdsZSBDIFByb2dyYW06CisKIFRvIGJ1aWxkIGZvbyBmcm9tIGZvby5jIHdpdGggYSBt YW51YWwgcGFnZSBmb28uMSwgdXNlOgogCi0JUFJPRz0JZm9vCisJUFJPR1M9CWZvbwogCiAJLmlu Y2x1ZGUgPGJzZC5wcm9nLm1rPgogCkBAIC0zMTQsNiArMzczLDM0IEBACiAKIAlTUkNTPQlhLmMg Yi5jIGMuYyBkLmMKIAorMi4gU2luZ2xlIEMrKyBQcm9ncmFtOgorCitUbyBidWlsZCBiYXIgd2l0 aCBiYXIuY2Mgd2l0aCBhIG1hbnVhbCBwYWdlIGJhci4xLCB1c2U6CisKKwlQUk9HU19DWFg9CWJh cgorCisJLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgorCitBbGwgb3RoZXIgY29uc3RydWN0cyBhcmUg dGhlIHNhbWUgYXMgaW4gdGhlIFNpbmdsZSBDIFByb2dyYW0gY2FzZS4KKworMy4gTXVsdGlwbGUg QyBwcm9ncmFtczoKKworVG8gYnVpbGQgZm9vIGZyb20gZm9vLmMgYW5kIGJhciB3aXRoIGJhci5j LCB1c2U6CisKKwlQUk9HUz0JZm9vIGJhcgorCisJLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgorCitU byBidWlsZCBmb28gZnJvbSBiYXIuYyBhbmQgYmFyIHdpdGggZm9vLmMsIHVzZToKKworCVBST0dT PQlmb28gYmFyCisKKwlTUkNTLmZvbz0gYmFyLmMKKworCVNSQ1MuYmFyPSBmb28uYworCisJLmlu Y2x1ZGUgPGJzZC5wcm9nLm1rPgorCiA9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09CiAKIFRoZSBpbmNsdWRlIGZp bGUgPGJzZC5zdWJkaXIubWs+IGNvbnRhaW5zIHRoZSBkZWZhdWx0IHRhcmdldHMgZm9yIGJ1aWxk aW5nCg== --e89a8fb206686603e204ca56aff2-- From owner-freebsd-toolchain@FreeBSD.ORG Sun Sep 23 06:56:24 2012 Return-Path: Delivered-To: toolchain@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 20FD8106566B; Sun, 23 Sep 2012 06:56:24 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-ob0-f182.google.com (mail-ob0-f182.google.com [209.85.214.182]) by mx1.freebsd.org (Postfix) with ESMTP id C1EF78FC08; Sun, 23 Sep 2012 06:56:23 +0000 (UTC) Received: by obbun3 with SMTP id un3so5716864obb.13 for ; Sat, 22 Sep 2012 23:56:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=HJcRXREgak9FIhXq54ZdbMC1+HXTI2rVVnDEaqgQNAc=; b=gpFofAmuRyAvBLdQqsb3fxUy8tfau3qyH48j/SUJ/vI8+CNHCJXJMSSehR6DaiE3vt MrpMKSm1TzaX30rk2p1PZsQaeqOOGdyo9wWL+/T9mKvHcxg+qfLqFwu/N6WeOZcvMmz2 jepX0d/M1pselJgXuB/KeUy2PaSQeqk4iepAlr4s8x2MUm1TE7/OpkWEoLM/u4DLykod IFGN5h/aPqG0Je3QSdU6nur25mGRHHRgFXBkvNuotesL7t8TitQKfa4QBOTnL35rMFml sxu0bvq7Bs/hN8Vdq0DKl5FNknxYKP8+cDWe7ZIvSh5ne3iXaAdy4hyeb3aEuKz6nraP Ly7g== MIME-Version: 1.0 Received: by 10.182.121.38 with SMTP id lh6mr7287121obb.16.1348383376745; Sat, 22 Sep 2012 23:56:16 -0700 (PDT) Received: by 10.76.142.201 with HTTP; Sat, 22 Sep 2012 23:56:16 -0700 (PDT) In-Reply-To: <61600.1348381832@critter.freebsd.dk> References: <61600.1348381832@critter.freebsd.dk> Date: Sat, 22 Sep 2012 23:56:16 -0700 Message-ID: From: Garrett Cooper To: Poul-Henning Kamp Content-Type: text/plain; charset=ISO-8859-1 Cc: freebsd-hackers@freebsd.org, toolchain@freebsd.org Subject: Re: [CFT/RFC]: refactor bsd.prog.mk to understand multiple programs instead of a singular program X-BeenThere: freebsd-toolchain@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Maintenance of FreeBSD's integrated toolchain List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 Sep 2012 06:56:24 -0000 On Sat, Sep 22, 2012 at 11:30 PM, Poul-Henning Kamp wrote: > In message > , Garrett Cooper writes: > >>Without the change: >> >>$ python calc_runtime.py bw.*_without.log | ministat -w 72 >>[...] >>$ python calc_runtime.py bw.*.log | ministat -w 72 > > Try: > python calc_runtime.py bw.*_without.log > _without > python calc_runtime.py bw.*.log > _with > ministat -w 72 _with _without > > :-) > > (PS: your two chosen glob patterns are not exclusive, but I suppose > that was for illustration only) Forgot to mention that I ran the "with" results before the "without" results, so technically the files didn't exist yet and hence the results are separate. But, just for absolute clarity for archiving sake (and provided your suggestion on how to overlay both graphs), here are the results: $ for i in bw.*[0-9].log; do mv $i `echo $i | sed -e 's/\.log/_with\.log/g'`; done $ python calc_runtime.py bw.*_with.log > _with $ python calc_runtime.py bw.*_without.log > _without $ ministat -w 72 _with _without x _with + _without +------------------------------------------------------------------------+ | + x | |+ + + xx + x x x + ++ x x + xx +| | |________________|________A_________MA___________M___|__| | +------------------------------------------------------------------------+ N Min Max Median Avg Stddev x 10 940 1002 988 972.3 24.476973 + 10 919 1010 972 958.9 33.994934 No difference proven at 95.0% confidence Thanks for the tip :)! -Garrett From owner-freebsd-toolchain@FreeBSD.ORG Mon Sep 24 08:21:15 2012 Return-Path: Delivered-To: toolchain@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7F3A1106566B; Mon, 24 Sep 2012 08:21:15 +0000 (UTC) (envelope-from phk@phk.freebsd.dk) Received: from phk.freebsd.dk (phk.freebsd.dk [130.225.244.222]) by mx1.freebsd.org (Postfix) with ESMTP id 3ADC08FC12; Mon, 24 Sep 2012 08:21:14 +0000 (UTC) Received: from critter.freebsd.dk (unknown [192.168.61.3]) by phk.freebsd.dk (Postfix) with ESMTP id 4FD623B784; Mon, 24 Sep 2012 08:21:13 +0000 (UTC) Received: from critter.freebsd.dk (localhost [127.0.0.1]) by critter.freebsd.dk (8.14.5/8.14.5) with ESMTP id q8O8LCkX003783; Mon, 24 Sep 2012 08:21:12 GMT (envelope-from phk@phk.freebsd.dk) To: Garrett Cooper From: "Poul-Henning Kamp" In-Reply-To: Your message of "Sat, 22 Sep 2012 23:56:16 MST." Content-Type: text/plain; charset=ISO-8859-1 Date: Mon, 24 Sep 2012 08:21:12 +0000 Message-ID: <3782.1348474872@critter.freebsd.dk> Cc: freebsd-hackers@freebsd.org, toolchain@freebsd.org Subject: Re: [CFT/RFC]: refactor bsd.prog.mk to understand multiple programs instead of a singular program X-BeenThere: freebsd-toolchain@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Maintenance of FreeBSD's integrated toolchain List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 24 Sep 2012 08:21:15 -0000 In message , Garrett Cooper writes: >No difference proven at 95.0% confidence This is the important bit of information... >Thanks for the tip :)! You're welcome :-) -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence. From owner-freebsd-toolchain@FreeBSD.ORG Mon Sep 24 15:17:15 2012 Return-Path: Delivered-To: toolchain@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9B905106566B; Mon, 24 Sep 2012 15:17:15 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-pa0-f54.google.com (mail-pa0-f54.google.com [209.85.220.54]) by mx1.freebsd.org (Postfix) with ESMTP id 657238FC0A; Mon, 24 Sep 2012 15:17:15 +0000 (UTC) Received: by padbi1 with SMTP id bi1so1589007pad.13 for ; Mon, 24 Sep 2012 08:17:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=references:in-reply-to:mime-version:content-transfer-encoding :content-type:message-id:cc:x-mailer:from:subject:date:to; bh=ufekhq8x3tIW+aVeUeFWl4lY0CmLFXSRP7RYeyxKdfY=; b=Doz/KyNIPw2FXQGab7XsqTygu2t7YIgtntNFVJ9OSvwoh7JRwVdn9lrSMt1QvSoWMR +NYMVClatodkzk2k8TvWfjmSr1zVIbdtP9WKYQUy1/M4FKLaxPMdFGtQXiTRzh8QuiuV dFz/3XI51IBy/pnJjUAPTudt7g1FgyMGy6a6oq0vlRtHoFu9HJdNJfjR40UbPEMYwcBJ GsRsz23AyqBkAK6zMVsOxPpJKh5vPfi4L97UtrCDcL+BBnwg7kmVITFChNsREnc8gFlZ X43Fa0MzpJJpKxtNSPbX4cF8zsAfvw4d84vImv59v4AgQx6g/mayCP6VW5fDREhmMCJO Wf9A== Received: by 10.68.228.1 with SMTP id se1mr37539027pbc.110.1348499834847; Mon, 24 Sep 2012 08:17:14 -0700 (PDT) Received: from [10.173.174.42] (mobile-166-147-095-147.mycingular.net. [166.147.95.147]) by mx.google.com with ESMTPS id it6sm9788562pbc.14.2012.09.24.08.17.13 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 24 Sep 2012 08:17:13 -0700 (PDT) References: <3782.1348474872@critter.freebsd.dk> In-Reply-To: <3782.1348474872@critter.freebsd.dk> Mime-Version: 1.0 (1.0) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Message-Id: <705174EE-4803-450F-8F41-3876DBCD65E6@gmail.com> X-Mailer: iPhone Mail (9B206) From: Garrett Cooper Date: Mon, 24 Sep 2012 08:17:07 -0700 To: Poul-Henning Kamp Cc: "freebsd-hackers@freebsd.org" , "toolchain@freebsd.org" Subject: Re: [CFT/RFC]: refactor bsd.prog.mk to understand multiple programs instead of a singular program X-BeenThere: freebsd-toolchain@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Maintenance of FreeBSD's integrated toolchain List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 24 Sep 2012 15:17:15 -0000 On Sep 24, 2012, at 1:21 AM, "Poul-Henning Kamp" wrote:= > In message > , Garrett Cooper writes: >=20 >> No difference proven at 95.0% confidence >=20 > This is the important bit of information... Yeah.. It's been a few moons since I've taken statistics. Some other pieces of data: This was done with... - testing was done multiuser on a lightly loaded system. - build was done with -j24 on a my workstation with 4 SMT enabled cores. - the scratch disk is ata enabled, whereas the sources were housed on an mfi= backed disk. Thanks! -Garrett