From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Drew Adams Newsgroups: gmane.emacs.devel Subject: [PATCH] Let bookmark handlers do everything, including display the destination Date: Sat, 13 Aug 2022 20:59:20 +0000 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="_005_SJ0PR10MB5488B76B824B691EC228B84BF3669SJ0PR10MB5488namp_" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24748"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Karl Fogel To: "emacs-devel@gnu.org" Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Aug 13 23:01:49 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oMyGS-0006IE-QG for ged-emacs-devel@m.gmane-mx.org; Sat, 13 Aug 2022 23:01:49 +0200 Original-Received: from localhost ([::1]:54182 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oMyGR-0007Ee-A9 for ged-emacs-devel@m.gmane-mx.org; Sat, 13 Aug 2022 17:01:47 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oMyEN-0006Oq-9s for emacs-devel@gnu.org; Sat, 13 Aug 2022 16:59:39 -0400 Original-Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:64660) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oMyEI-0001OZ-C3 for emacs-devel@gnu.org; Sat, 13 Aug 2022 16:59:38 -0400 Original-Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 27DEfXYd013098; Sat, 13 Aug 2022 20:59:25 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : content-type : mime-version; s=corp-2022-7-12; bh=4EwZXwUnuos6rT7EvGFwBZfHcX3Rd0lu8Yw+FeUFqIc=; b=O9nYt+V/EgER20YQTy4c04V/HC9YtrH4kqvWeIAbTQ3G6LiYCnulas3FHOBwXAVlGBDk oJIkcB2BpZGER+CoHEON+/fVzonGbVPyQeJMEKW231BX/ekN1Y4q5kqCosVyBPOAbAvj eSFyYL/EOJUd05fxv5Uz4ISTys4IMJEXRkJYUz1K4ZthWrlxrUcRHOKbU9dmLJsLK5B/ Fy4H3p86/sakmjHZCK9Gk0ywHNea1OUf2mWcfJyp8vXK5WwPeTt8epUdOE3e/FhgDQPs t7oW93czwbcLnJJSNodshbdSxF/xBxGlueY6NVRDsfNgPe0TIy8DCUxgprJJXFmFyjWF GQ== Original-Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hx3js0sbr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 13 Aug 2022 20:59:24 +0000 Original-Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 27DA5iER007297; Sat, 13 Aug 2022 20:59:24 GMT Original-Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam02lp2048.outbound.protection.outlook.com [104.47.56.48]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3hx2d6e472-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 13 Aug 2022 20:59:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=b8NzkLlpF42GkV239K/jvF72ERFYryNNXjVkHsqTAA41v5vA/KwKGtDvDTU7lXJqLBQNRnIt+rJ6UOztGGXDdbo5k8vQtLX1ivcxxN9MDyuZKrGZdi7yStRIi3ttSMXu/49DdDMYJ3EplJqTxhewlwYlGgK1kfLmtmwW+1FE1BCK0HTQ2wGkf1riW7vBy4UA/yoFzmFvhp9XfT6KyUCdSoDo7FVxbgrpzxmUWiP/bgwq7pghxVS0ooeffJiCB1duKMo67cvTerEUTfHMDh186Y2A8tKt5W5qzqG6w+uPYJ8hzDLhugrLl2viWurhJGBlCmez49qW5CJQkpVCQJJ1Tw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=4EwZXwUnuos6rT7EvGFwBZfHcX3Rd0lu8Yw+FeUFqIc=; b=mFbHXNjMmpotBPsBPI0d1tFlCN/lhM7pVgm7MWbQTKxFenk18YKAFpm47JPhdANSu9BHMyktqws5r7xuEfOx+nx0m16NeO1a384gb6I9RoHnSTdEJgv7YCEIVwcsCyU2qKngJOUwoKApmn+sbDmwxphCD5E67bxaGqCydFAdTQfA4Cht6+fycxKOJnYdnR5ebgna56TM3A8W/EkQGTuUmr1xwj6zzMeOYh6F36uJxfuqq5jpL4MBv/l/AU/96i7Ng6ziIInilRCMjA7WJrkJPJHOzydZ5cxEMN/ZSd1fswMzOzVofJ8Y60wco0VToZ08NvojO/+EnpP5IfV2+3z6Pg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4EwZXwUnuos6rT7EvGFwBZfHcX3Rd0lu8Yw+FeUFqIc=; b=o7to2gMT0/LSfOB6jo4Vw7W3sroceUx7EmNW43NzjK4hip2yFKAgrgi47l6rvo0377jhMon6jCSAqWDiIIZ7MLAvUL5RiJK5ah79nzMakzMWWeHUq9oreZnRb/zD8uPxlYgrNDz7W8+vKW3hLY2wa/NBGfpaxByEuulpJpBEj2s= Original-Received: from SJ0PR10MB5488.namprd10.prod.outlook.com (2603:10b6:a03:37e::19) by MN2PR10MB4063.namprd10.prod.outlook.com (2603:10b6:208:185::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.16; Sat, 13 Aug 2022 20:59:20 +0000 Original-Received: from SJ0PR10MB5488.namprd10.prod.outlook.com ([fe80::570:ff21:c9e1:22f1]) by SJ0PR10MB5488.namprd10.prod.outlook.com ([fe80::570:ff21:c9e1:22f1%2]) with mapi id 15.20.5525.011; Sat, 13 Aug 2022 20:59:20 +0000 Thread-Topic: [PATCH] Let bookmark handlers do everything, including display the destination Thread-Index: AdivV1Of7BPjLOJdQwK4ZEV0yP9Bkw== Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f5b1aff4-de2a-4607-07c5-08da7d6eb173 x-ms-traffictypediagnostic: MN2PR10MB4063:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: nmmjkjfWi6gPlN6quf4mu+Yq/hioXG2G6Mtl/0+gm7i8/evn2Q9+L7xMLVR5i9IHW5hcPNGEuw+KdJm0pIwpuugUQYNzzPVGrahE2pl0VG4Y16ywJ71CBSEc2LRWQdQBw7zWjq+iMv2PVPFiWR5lHtPAhf0wyUaSHgCcwu1fueDD6Y074zwVwMxAhXX9egZGfwVCiZHrwhwo0ofJxdnbXUHWijEmreQL1sWrAxxpa+4MiCPvTV//QBc5l0KTTJmCrRRIH3s2PWktAiuUXAcfQUojTBzCls65YnkDJZRlylBQ9wv2KEB8GMFK2Ct6yVUr0anlHdEPZMJbjhmvLRQTPNyl0BabgAShev4MjYKhj42T54U+rSEpSA7EknC++oRVjLbybSbhmW7ZN+8JcgPOoO8TrU40TCb8znc+Sw4opy+qpWc8BqlzKimDmvCzMyRYMj9qW7j4D7bkD7x0EwAq16pu1J2950LiXyEvLWbSZJtVTxdcIbiQ9BYqObi6x6XPc7QWxjV7wljUpMwSbjmwaBpNNaACLo5/fTjGZerSVkytvcGSel+shP9Bk+5GelIOEwbGgCqsqWZzM8glhR/GG1NIr4VfAe0OfUDep1yrJYpPQ/Yi2M4LidKPLnTTpJnOZzS8ZuXyLi7DmNBRJE6w51+XUXtbqnsQ5PnJGUOLYqKW/EQKZoW4e2suzCrOejPx6Z1tQWOgEdk+Ubm6prCi/T9kgge0tqHddNsaDkoN8QvLm1Y3aKl91u2VYLq5e /BkQm1pEa819zwQ4jdsqd5m6WBPrbopoktv34t8q4+cerbWefuTnyaqiyvsyKqwOQjpndhtRJ2BL5rmSYyFF4tNpyIBJO7W1HL x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR10MB5488.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(39860400002)(376002)(136003)(366004)(346002)(396003)(8936002)(2906002)(478600001)(41300700001)(66476007)(66446008)(76116006)(38070700005)(316002)(6916009)(55016003)(66556008)(33656002)(6506007)(66946007)(9686003)(26005)(966005)(71200400001)(86362001)(122000001)(83380400001)(38100700002)(186003)(99936003)(4326008)(52536014)(44832011)(7696005)(8676002)(64756008)(5660300002)(30864003); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?sdfMElUoxcruDaYnwtMNbdX8tn5GonlOg6NnB3k1aER8/JLlsxr11zysO2zk?= =?us-ascii?Q?wEXEG1NlMasGOoOf2sKzR4DipFcb1PIcCXChb/D+zVuUVVE0QlzTeTsvPf3A?= =?us-ascii?Q?fq0AoOqMPjfsd8Pz4CW7QtFvpXGHrPCy0OPNzcuT77blr2vQGcEsAc5ztzE6?= =?us-ascii?Q?gNixia80LkTj2hpguBnMiLbnZ1ERRWrPeb8Ufe5T7TbXdM62Uxp+k1ZApj07?= =?us-ascii?Q?/KqA3QHKSSSZY9IWJmRKQ4fEoUvddj9gpvgreIW4Rab69fR7lNtNojPdm1eI?= =?us-ascii?Q?NlNLIFgENWRjaZ9WQ8O1jOAUbtRqxIxdFECIMlSTE4lE1kTtgJDJi+PjQyj2?= =?us-ascii?Q?MsTUMU99TBwM501hEd3fxy5FdBOjbgoPO2WkqpVeeQx1t6jCEC2zPw+ypqJH?= =?us-ascii?Q?AtXHbAQSk6VnS3khseqcAnh/S15AmxwVlG2MP81kIoByguaBD4i32FKoNiWX?= =?us-ascii?Q?PnGmg5w/kSFDFQPJOEKoxoTQiZFpAj1Gz78Vg0Vg83vkVQ0KAswWvRGzDNbW?= =?us-ascii?Q?RugvhvrpNzVD9knVc2eTHYicIljc9hm0ykdtMlq6AjaMMwQ6I6ANgpHAg9rd?= =?us-ascii?Q?m7tS0QvUBVRvfwAchcok52LIjir3BBNmV5WZ/5d0gGFy+KiUkWsaXk6nKYcX?= =?us-ascii?Q?mA X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: I8E3e8u7znujs6nOsM0dwBBkL1jiLjG5WnXAUGaOGRq3lu0ygUGcz0W5l6FxaKwnLIwFmvw+i7uRhPs/JnsLCtgBNxCQhhb9qwJEF3+9S6xrWJW7dk1Ta9tnG2kTshT9kGI2ECxWe1HIurrcLQLlxxgtrtX87NWBZ393hxgdhSlBUy6+CYsC1FMSO9q8H2LUTZ+8New3PHq5IbKJxJ5m3UTrMwgro4I+pjmxJOyaERQP01PXrjcLU1C6GZUbgrCEhFoqrUzyYWd7CJj9PhU7SYGygqjE+c7IrTrQcCRJiQG8NpXTt0ulmkx1L5r8oorr5Xi9/ULX6a7K1fMY+YUCPkoolNvbhlxIm6IFvjIpP9B55EK+u28fa0AUGkRfhKACCHolPWCyKCeggdhiZ7zyHrQar6osEnSxHJX5Ty2/EgZd96jxCtKQoWDs8s7Ixh3iAXPl7cCMqUd+SiXb2DX0apRmfESwUitgbqRKNPZZswA5N0H6C5u4TA96AwmOrhPzWY1HWPMm9IBL+sgtkRnKslyv+raN9HpCAQhffjOHheJFKvxUhq360Zuss6zueZmry1kczuK+8ek/E7LhrvVtuj09QgdYHcUX0TyQqDcLji+M36mOjH6fTF29R5xYJ+ofPKe+1fkhztGjYEYbr84KYVdkPrWaWUdm7nmru2QXMAoKC+1H2yk2/EeYgDf1tf6aS4qwvxA0DgqPwQscSM216xIZB+vz5bqZMURdMQ82WxF+vd 2KBdf/xHzcCpgIQni4 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR10MB5488.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f5b1aff4-de2a-4607-07c5-08da7d6eb173 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Aug 2022 20:59:20.3015 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: FIXutUX2Hw7dUDptjtRtLkxI3nGI6z7HDosANKLmZ0kZ64sWOk9is73f9rBus8vxXgCR1j7/RaftoYgAhFZf2A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR10MB4063 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-08-13_09,2022-08-11_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=995 suspectscore=0 bulkscore=0 phishscore=0 mlxscore=0 spamscore=0 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2207270000 definitions=main-2208130086 X-Proofpoint-GUID: uEd6q7JJTegyuCyVaxWVGPW1-CLNRCgK X-Proofpoint-ORIG-GUID: uEd6q7JJTegyuCyVaxWVGPW1-CLNRCgK Received-SPF: pass client-ip=205.220.177.32; envelope-from=drew.adams@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:293432 Archived-At: --_005_SJ0PR10MB5488B76B824B691EC228B84BF3669SJ0PR10MB5488namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable tl;dr: Let's change the handling of a bookmark - including displaying the bookmark destination - to be the responsibility of its handler. ___ Attached is a patch that does that. It moves the displaying of a bookmark's "destination" from `bookmark-jump' to the bookmark itself - specifically, to its handler. Currently `bookmark-jump', rather than a bookmark's handler, displays the bookmark destination. And the behavior's hard-coded: a bookmark always displays a destination, and that's always the last thing done before the after-jump hook. That's too rigid. It means that a handler function can't do something more after the display, unless it finagles to put that after-display processing on `bookmark-after-jump-hook' (temporarily). And it means that a handler can't choose its own display function - the DISPLAY-FUNCTION passed to `bookmark-jump' is always used. And it means that a handler can't dispense with display altogether. By moving the responsibility for display to the handler, the patch gets rid of this rigidity. Specifically, instead of `bookmark--jump-via' systematically invoking its DISPLAY-FUNCTION argument, it saves the argument value in variable `bookmark-jump-display-function'. And then the default handler, `bookmark-default-handler' invokes that function. Most bookmarks don't have their own handler; they use the default handler. So their behavior doesn't change at all with this approach. Most bookmarks use `bookmark-jump's DISPLAY FUNCTION as the last thing before running `bookmark-after-jump-hook' (and most should do that). The same applies to bookmarks that do have their own handler, if the handler invokes the default handler at the end. For example, the Info bookmark handler, `Info-bookmark-jump' sets up what it needs, and ends by invoking the default handler: (bookmark-default-handler `("" (buffer . ,buf) . ,(bookmark-get-bookmark-record bookmark))) What changes with the proposed approach is only what can happen for a bookmark that has its own handler, if that handler either (1) invokes the default handler at some point other than at the end - so it does something after displaying, or (2) it doesn't invoke the default handler. If a handler doesn't invoke the default handler, it can call whatever display function it likes, whenever it likes. Or it can forego display altogether. This approach gives the handler more control - it can decide whether, when, and how to display the destination. The entire behavior of a bookmark is then up to its handler. And this allows for more kinds of bookmarks, including bookmarks that don't display a destination. For example, Bookmark+, which uses this approach, predefines several kinds of bookmarks with handlers that either provide their own kind of display or don't display anything. This includes bookmarks that do these things: . Combine a sequence of other bookmarks (composition) . Invoke a function . Open `*Bookmark List*' for a set of bookmarks, a sort order, etc. . Switch to a different bookmark file or load another bookmark file . Copy a snippet to the kill-ring . Switch to a desktop . Restore a set of keyboard macros . Restore a set of defvars Other Bookmark+ predefined bookmark types have handlers that do invoke `bookmark-default-handler' (with a definition similar to that in the patch, invoking DISPLAY-FUNCTION), which is the typical case. Though Bookmark+ handling is different from that of vanilla Emacs (it's essentially that of the patch), this difference isn't a problem, in general - nearly all vanilla bookmarks work with Bookmark+. It is a problem in a few cases, however. There's at least one 3rd-party library, PDF Tools, whose handler doesn't make use of the default handler, and it expects that `bookmark--jump-via' will display the destination after handling. There may be a few others; dunno. PDF Tools lives here: https://github.com/vedang/pdf-tools/. It was formerly here: https://github.com/politza/pdf-tools/. Both have the same code for the handler, `pdf-view-bookmark-jump-handler'. That does some finagling that puts a function on the after-jump hook and then uses `set-buffer'. It does nothing to display the buffer - it counts on `bookmark-jump' to display it after the handler ends. The rest of the handling, after display, is done on the after-jump hook. =20 The after-jump hook function depends on the buffer already being displayed. And it just uses the buffer of the currently `selected-window' if the destination buffer isn't displayed. See example #1 in attachment `pdf-tools-handler-fix.el'. As a result, such a bookmark doesn't work with Bookmark+. E.g., if invoked in the window of buffer `*Bookmark List*' it just uses that instead of the intended PDF-file buffer, which is no good. For it to work with Bookmark+, the handler needs to display the intended buffer. E.g., instead of `set-buffer' it needs to call a function such as `pop-to-buffer-same-window'. With such an edit the bookmark works with Bookmark+ (and with vanilla Emacs with the patch). See example #2 in attachment `pdf-tools-handler-fix.el'. Another way to fix the handler is for it to call the default handler. See example #3 in attachment `pdf-tools-handler-fix.el'. Yet another way to fix it is to advise the handler, to have it invoke the default handler at the end: (defun my-pdf-handler-advice (bookmark) (bookmark-default-handler (bookmark-get-bookmark bookmark))) (advice-add 'pdf-view-bookmark-jump-handler :after 'my-pdf-handler-advice) That's example #4 in attachment `pdf-tools-handler-fix.el'. But really, the complications `pdf-view-bookmark-handler' goes through - creating a closure on the fly and adding it to the after-jump hook (and subsequently removing it) - are a workaround for the fact that vanilla `bookmark.el' doesn't let a handler display the destination when it wants to. PDF Tools wants to set up the buffer, display it, and then go to the right PDF page etc. So it sets up the buffer, ends the handler, counts on `bookmark-jump' to display the buffer, and then has a (temporary) after-jump hook do the rest of the handling: go to the right page etc. (The hook function captures some info from the bookmark, so it needs to be a closure.) A clever workaround. With the approach provided by the patch, the handler can do all of that itself: set up the buffer, display it, then go to the page etc. No after-jump-hook workaround. The code is quite a bit simpler. Between setting up the buffer and doing the additional stuff that was relegated to a temporary after-jump hook, the handler can either (1) just invoke the default handler or (2) just call a display function. Code for each of those handler definitions is also attached, for comparison with the above code. Those solutions are examples #5 and #6, respectively, in attachment `pdf-tools-handler-fix.el'. I mention the PDF Tools handler as an example. I'm not aware of other handlers that depend on `bookmark-jump' displaying some buffer and selecting its window, and then depend on the after-jump hook for additional handling in that buffer, but there may be some out there. This is a general problem for Bookmark+, even if it seems to be run into rarely because most handlers invoke the default handler (which in Bookmark+ displays the destination using the DISPLAY-FUNCTION passed to `bookmark-jump'). But this is not just about getting rid of an incompatibility with Bookmark+'s bookmark handling. It's also about improving vanilla `bookmark.el', by letting the handler handle a bookmark's behavior - all of it. Give handlers the control over display, and have the default handler invoke the `bookmark-jump' DISPLAY-FUNCTION arg. That makes possible bookmarks that don't necessarily display a destination - they perform some other action. And it allows bookmarks to do any kind of displaying whatsoever (not just what the `bookmark-jump' DISPLAY-FUNCTION provides). Regardless of whether we adopt the proposed behavior, we might anyway want to post a guideline to let people who define custom bookmark handlers know that it's common/typical for a handler to invoke the default handler - that repositions the bookmark as needed etc. But with the new behavior we should also make clear that for a bookmark destination to be displayed, a custom handler needs to invoke either `bookmark-default-handler' or a display function. More generally, the thing to make clear is that a handler completely defines a bookmark's behavior. And in particular, it decides whether, when, and how to display a bookmark destination. I think the proposed approach (attached patch or similar) would affect very few people. It would affect only library authors who define custom bookmark handlers (few do) that don't invoke the default handler (fewer still), AND whose code relegates some of the handling to the after-jump hook and depends on `bookmark-jump' invoking the DISPLAY-FUNCTION (very few, I expect). The PDF Tools maintainers would need to change their handler code, by having it invoke a display function or the default handler. (The code will be simpler.) If they do that, then there's no problem for users, regardless of what Emacs version they use. In a version without this change, only `bookmark--jump-via' invokes DISPLAY-FUNCTION. In a version with this change, only the default handler invokes it. The behavior is the same. On the other hand, if they don't change their handler code then users of vanilla `bookmark.el' will suffer the same problem Bookmark+ users suffer now with such bookmarks - they won't work because the destination won't be displayed. If, for example, after this change to `bookmark.el', PDF Tools didn't update its handler to display the destination, then `bookmark.el' users of its PDF bookmarks would suffer the same problem they suffer now with Bookmark+ (doesn't work). The patch updates the doc string of variable `bookmark-alist', to clarify the use of alist entry `handler'. Please check that. Please take a look at the patch and see what you think. (Thanks to Roxana Dior for testing the PDF Tools fixes.) --_005_SJ0PR10MB5488B76B824B691EC228B84BF3669SJ0PR10MB5488namp_ Content-Type: application/octet-stream; name="bookmark-2022-08-11.patch" Content-Description: bookmark-2022-08-11.patch Content-Disposition: attachment; filename="bookmark-2022-08-11.patch"; size=7384; creation-date="Thu, 11 Aug 2022 21:00:38 GMT"; modification-date="Sat, 13 Aug 2022 20:59:18 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtdSBib29rbWFyay5lbCBib29rbWFyay1wYXRjaGVkLTIwMjItMDgtMTEuZWwKLS0tIGJv b2ttYXJrLmVsCTIwMjItMDgtMTAgMTc6MzE6MjMuNjI1MDMwOTAwIC0wNzAwCisrKyBib29rbWFy ay1wYXRjaGVkLTIwMjItMDgtMTEuZWwJMjAyMi0wOC0xMSAxMzo1NTo1OS4wMTIyNzY3MDAgLTA3 MDAKQEAgLTI2NSwzNCArMjY1LDczIEBACiBCT09LTUFSSy1OQU1FIGlzIHRoZSBuYW1lIHlvdSBn YXZlIHRvIHRoZSBib29rbWFyayB3aGVuIGNyZWF0aW5nIGl0LgogCiBQQVJBTS1BTElTVCBpcyBh biBhbGlzdCBvZiBib29rbWFyayBpbmZvcm1hdGlvbi4gIFRoZSBvcmRlciBvZiB0aGUKLWVudHJp ZXMgaW4gUEFSQU0tQUxJU1QgaXMgbm90IGltcG9ydGFudC4gIFRoZSBkZWZhdWx0IGVudHJpZXMg YXJlCi1kZXNjcmliZWQgYmVsb3cuICBBbiBlbnRyeSB3aXRoIGEga2V5IGJ1dCBudWxsIHZhbHVl IG1lYW5zIHRoZSBlbnRyeQotaXMgbm90IHVzZWQuCitlbnRyaWVzIGluIFBBUkFNLUFMSVNUIGlz IG5vdCBpbXBvcnRhbnQuICBBbiBlbnRyeSB3aXRoIGEga2V5IGJ1dCBudWxsCit2YWx1ZSBtZWFu cyB0aGUgZW50cnkgaXMgbm90IHVzZWQgLSBqdXN0IGFzIGlmIHRoZSBlbnRyeSB3ZXJlIGFic2Vu dC4KKworVGhpcyBpcyB0aGUgc2V0IG9mIGVudHJpZXMgYXZhaWxhYmxlIGJ5IGRlZmF1bHQ7IHRo ZWlyIHZhbHVlcyBhcmUKK2Rlc2NyaWJlZCBiZWxvdy4KIAogIChmaWxlbmFtZSAuIEZJTEVOQU1F KQogIChidWYgLiBCVUZGRVItT1ItTkFNRSkKICAocG9zaXRpb24gLiBQT1MpCiAgKGZyb250LWNv bnRleHQtc3RyaW5nIC4gU1RSLUFGVEVSLVBPUykKICAocmVhci1jb250ZXh0LXN0cmluZyAgLiBT VFItQkVGT1JFLVBPUykKLSAoaGFuZGxlciAuIEhBTkRMRVIpCiAgKGFubm90YXRpb24gLiBBTk5P VEFUSU9OKQorIChoYW5kbGVyIC4gSEFORExFUikKIAotRklMRU5BTUUgbmFtZXMgdGhlIGJvb2tt YXJrZWQgZmlsZS4KLUJVRkZFUi1PUi1OQU1FIGlzIGEgYnVmZmVyIG9yIHRoZSBuYW1lIG9mIGEg YnVmZmVyIHRoYXQgaXMgdXNlZAotICBpZiBGSUxFTkFNRSBpcyBub3QgZGVmaW5lZCBvciBpdCBy ZWZlcnMgdG8gYSBub24tZXhpc3RlbnQgZmlsZS4KLVBPUyBpcyB0aGUgYm9va21hcmtlZCBidWZm ZXIgcG9zaXRpb24uCi1TVFItQUZURVItUE9TIGlzIGJ1ZmZlciB0ZXh0IHRoYXQgaW1tZWRpYXRl bHkgZm9sbG93cyBQT1MuCi1TVFItQkVGT1JFLVBPUyBpcyBidWZmZXIgdGV4dCB0aGF0IGltbWVk aWF0ZWx5IHByZWNlZGVzIFBPUy4KLUFOTk9UQVRJT04gaXMgYSBzdHJpbmcgdGhhdCBkZXNjcmli ZXMgdGhlIGJvb2ttYXJrLgorQWxsIGV4Y2VwdCBgYW5ub3RhdGlvbicgYW5kIGBoYW5kbGVyJyBh cmUgcHJlc2VudCBieSBkZWZhdWx0IGluIG1vc3QKK2Jvb2ttYXJrcy4gIGBhbm5vdGF0aW9uJyBp cyBwcmVzZW50IG9ubHkgaWYgYSB1c2VyIGdpdmVzIHRoZSBib29rbWFyaworYW4gYW5ub3RhdGlv bi4gIGBoYW5kbGVyJyBpcyB0eXBpY2FsbHkgYWJzZW50LCBpbiB3aGljaCBjYXNlIHRoZQorZGVm YXVsdCBoYW5kbGVyLCBgYm9va21hcmstZGVmYXVsdC1oYW5kbGVyJywgaXMgdXNlZC4KKworQSBi b29rbWFyayByZWNvcmQgaXMgdHlwaWNhbGx5IGNyZWF0ZWQgYnkgdGhlIGZ1bmN0aW9uIHRoYXQn cworY3VycmVudGx5IHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSBgYm9va21hcmstbWFrZS1yZWNvcmQt ZnVuY3Rpb24nLiAgRm9yCithIGdpdmVuIHR5cGUgb2YgYm9va21hcmssIHRoYXQgZnVuY3Rpb24g aXMgcmVzcG9uc2libGUgZm9yIGRlZmluaW5nCit0aGUgYXBwcm9wcmlhdGUgUEFSQU0tQUxJU1Qu ICBNb3N0IGBib29rbWFyay1tYWtlLXJlY29yZC1mdW5jdGlvbicKK3VzZXMgZG9uJ3Qgc3BlY2lm eSBhIGBoYW5kbGVyJy4KKworKiBGSUxFTkFNRSBuYW1lcyB0aGUgYm9va21hcmtlZCBmaWxlLgor KiBCVUZGRVItT1ItTkFNRSBpcyBhIGJ1ZmZlciwgb3IgdGhlIG5hbWUgb2YgYSBidWZmZXIsIHRo YXQncyB1c2VkIGlmCisgIEZJTEVOQU1FIGlzbid0IGRlZmluZWQgb3IgaWYgaXQgcmVmZXJzIHRv IGEgbm9uZXhpc3RlbnQgZmlsZS4KKyogUE9TIGlzIHRoZSBib29rbWFya2VkIGJ1ZmZlciBwb3Np dGlvbi4KKyogU1RSLUFGVEVSLVBPUyBpcyBidWZmZXIgdGV4dCB0aGF0IGltbWVkaWF0ZWx5IGZv bGxvd3MgUE9TLgorKiBTVFItQkVGT1JFLVBPUyBpcyBidWZmZXIgdGV4dCB0aGF0IGltbWVkaWF0 ZWx5IHByZWNlZGVzIFBPUy4KKyogQU5OT1RBVElPTiBpcyBhIHVzZXItcHJvdmlkZWQgc3RyaW5n IGFzc29jaWF0ZWQgd2l0aCB0aGUgYm9va21hcmsuCiAgIFNlZSBvcHRpb25zIGBib29rbWFyay11 c2UtYW5ub3RhdGlvbnMnIGFuZAogICBgYm9va21hcmstYXV0b21hdGljYWxseS1zaG93LWFubm90 YXRpb25zJy4KLUhBTkRMRVIgaXMgYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIHRoZSBgYm9va21h cmstanVtcCcgYmVoYXZpb3IgZm9yIGEKLXNwZWNpZmljIGtpbmQgb2YgYm9va21hcmsgaW5zdGVh ZCBvZiB0aGUgZGVmYXVsdCBgYm9va21hcmstZGVmYXVsdC1oYW5kbGVyJy4KLVRoaXMgaXMgdGhl IGNhc2UgZm9yIEluZm8gYm9va21hcmtzLCBmb3IgaW5zdGFuY2UuICBIQU5ETEVSIG11c3QgYWNj ZXB0Ci1hIGJvb2ttYXJrIGFzIGl0cyBzaW5nbGUgYXJndW1lbnQuCisqIEhBTkRMRVIgaXMgYSBm dW5jdGlvbiB0aGF0IHByb3ZpZGVzIHRoZSBgYm9va21hcmstanVtcCcgYmVoYXZpb3IgZm9yIGEK KyAgc3BlY2lmaWMga2luZCBvZiBib29rbWFyaywgcmVwbGFjaW5nIHRoZSBkZWZhdWx0IGJlaGF2 aW9yIHByb3ZpZGVkCisgIGJ5IGBib29rbWFyay1kZWZhdWx0LWhhbmRsZXInLiAgVGhpcyBpcyB0 aGUgY2FzZSBmb3IgSW5mbyBib29rbWFya3MsCisgIGZvciBpbnN0YW5jZS4gIEhBTkRMRVIgbXVz dCBhY2NlcHQgYSBib29rbWFyayBhcyBpdHMgc29sZSByZXF1aXJlZAorICBhcmd1bWVudC4KKwor ICBIQU5ETEVSIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgdGhlIGJvb2ttYXJrJ3MgYmVo YXZpb3I6IGRvaW5nCisgIGV2ZXJ5dGhpbmcgdGhlIGJvb2ttYXJrIGlzIG1lYW50IHRvIGRvLiAg VGhpcyBpbmNsdWRlcyBkaXNwbGF5aW5nCisgIHRoZSBib29rbWFyayBkZXN0aW5hdGlvbiwgaWYg dGhhdCdzIG5lZWRlZCAoYSBib29rbWFyayBuZWVkIG5vdAorICBkaXNwbGF5IGFueXRoaW5nOyBp dCBjYW4gcGVyZm9ybSBhbnkgYWN0aW9uKS4KKworICBUbyBkaXNwbGF5IHRoZSBkZXN0aW5hdGlv biwgSEFORExFUiBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdGhhdCdzIHRoZQorICB2YWx1ZSBvZiB2 YXJpYWJsZSBgYm9va21hcmstanVtcC1kaXNwbGF5LWZ1bmN0aW9uJywgd2hpY2ggaXMgc2V0IGJ5 CisgIGBib29rbWFyay1qdW1wJyB0byBhdXRvbWF0aWNhbGx5IGFjY29tbW9kYXRlIG90aGVyLXdp bmRvdyBldGMuCisgIGRpc3BsYXlpbmcgdGhhdCBkZXBlbmRzIG9uIHRoZSBqdW1wIGNvbW1hbmQu ICBGb3IgZXhhbXBsZToKKworICAgKGZ1bmNhbGwgYm9va21hcmstanVtcC1kaXNwbGF5LWZ1bmN0 aW9uIChjdXJyZW50LWJ1ZmZlcikpCisKKyAgT3IgSEFORExFUiBjYW4gZGlyZWN0bHkgY2FsbCBh bm90aGVyIGRpc3BsYXkgZnVuY3Rpb24uICBGb3IgZXhhbXBsZToKKworICAgKHN3aXRjaC10by1i dWZmZXItb3RoZXItdGFiIEJVRkZFUikKKworICBPciBIQU5ETEVSIGNhbiBpbnZva2UgYGJvb2tt YXJrLWRlZmF1bHQtaGFuZGxlcicuICBUaGF0IGRpc3BsYXlzIHRoZQorICBkZXN0aW5hdGlvbi4g IEl0IHRoZW4gbW92ZXMgdG8gdGhlIHJlY29yZGVkIGJ1ZmZlciBwb3NpdGlvbiwgUE9TLAorICBy ZXBvc2l0aW9uaW5nIHBvaW50LCBpZiBuZWNlc3NhcnksIHRvIG1hdGNoIHRoZSByZWNvcmRlZCBj b250ZXh0CisgIHN0cmluZ3MgU1RSLUJFRk9SRS1QT1MgYW5kIFNUUi1BRlRFUi1QT1MuICBGb3Ig aW5zdGFuY2UsIHRoZSBJbmZvCisgIGhhbmRsZXIsIGBJbmZvLWJvb2ttYXJrLWp1bXAnLCBkb2Vz IHRoaXMgYXQgaXRzIGVuZDoKIAotQSBmdW5jdGlvbiBgYm9va21hcmstbWFrZS1yZWNvcmQtZnVu Y3Rpb24nIG1heSBkZWZpbmUgYWRkaXRpb25hbCBlbnRyaWVzCi1pbiBQQVJBTS1MSVNUIHRoYXQg Y2FuIGJlIHVzZWQgYnkgSEFORExFUi4iKQorICAgKGJvb2ttYXJrLWRlZmF1bHQtaGFuZGxlcgor ICAgIGAoIiIgKGJ1ZmZlciAuICxidWYpIC4gLChib29rbWFyay1nZXQtYm9va21hcmstcmVjb3Jk IEJPT0tNQVJLKSkpCisKKyAgSEFORExFUiBjYW4gZGlzcGxheSB0aGUgZGVzdGluYXRpb24gd2hl bmV2ZXIgdGhhdCdzIG1vc3QgYXBwcm9wcmlhdGUKKyAgLSBpdCBjYW4gdGh1cyBwZXJmb3JtIG90 aGVyIGFjdGlvbnMgYmVmb3JlIGFuZCBhZnRlciBkaXNwbGF5aW5nLiIpCiAKIChkZWZpbmUtb2Jz b2xldGUtdmFyaWFibGUtYWxpYXMgJ2Jvb2ttYXJrcy1hbHJlYWR5LWxvYWRlZAogICAnYm9va21h cmstYm9va21hcmtzLXRpbWVzdGFtcCAiMjcuMSIpCkBAIC0xMTk0LDIxICsxMjMzLDIyIEBACiAg ICAgICAgICAoYm9va21hcmstbG9hZCAoY2FyIGJvb2ttYXJrLWJvb2ttYXJrcy10aW1lc3RhbXAp IHQgdCkpKSkKIAogCisoZGVmdmFyIGJvb2ttYXJrLWp1bXAtZGlzcGxheS1mdW5jdGlvbiBuaWwK KyAiRnVuY3Rpb24gdXNlZCBjdXJyZW50bHkgdG8gZGlzcGxheSBhIGJvb2ttYXJrLCBvciBuaWwg aWYgbm8gZnVuY3Rpb24uIikKIAogKGRlZnZhciBib29rbWFyay1hZnRlci1qdW1wLWhvb2sgbmls CiAgICJIb29rIHJ1biBhZnRlciBgYm9va21hcmstanVtcCcganVtcHMgdG8gYSBib29rbWFyay4K IFVzZWZ1bCBmb3IgZXhhbXBsZSB0byB1bmhpZGUgdGV4dCBpbiBgb3V0bGluZS1tb2RlJy4iKQog CiAoZGVmdW4gYm9va21hcmstLWp1bXAtdmlhIChib29rbWFyay1uYW1lLW9yLXJlY29yZCBkaXNw bGF5LWZ1bmN0aW9uKQotICAiSGFuZGxlIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JELCB0aGVuIGNh bGwgRElTUExBWS1GVU5DVElPTi4KLURJU1BMQVktRlVOQ1RJT04gaXMgY2FsbGVkIHdpdGggdGhl IGN1cnJlbnQgYnVmZmVyIGFzIGFyZ3VtZW50LgotCi1BZnRlciBjYWxsaW5nIERJU1BMQVktRlVO Q1RJT04sIHNldCB3aW5kb3cgcG9pbnQgdG8gdGhlIHBvaW50IHNwZWNpZmllZAotYnkgQk9PS01B UkstTkFNRS1PUi1SRUNPUkQsIGlmIG5lY2Vzc2FyeSwgcnVuIGBib29rbWFyay1hZnRlci1qdW1w LWhvb2snLAotYW5kIHRoZW4gc2hvdyBhbnkgYW5ub3RhdGlvbnMgZm9yIHRoaXMgYm9va21hcmsu IgorICAiSGFuZGxlIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JELCBwcm92aWRpbmcgdGhlIGJvb2tt YXJrJ3MgYmVoYXZpb3IuCitTYXZlIERJU1BMQVktRlVOQ1RJT04gaW4gdmFyaWFibGUgYGJvb2tt YXJrLWp1bXAtZGlzcGxheS1mdW5jdGlvbicuCitUaGVuIHNldCB0aGUgd2luZG93IHBvaW50IGZv ciB0aGUgY3VycmVudCBidWZmZXIsIGlmIGRpc3BsYXllZCwgdG8KK3BvaW50LiAgVGhlbiBydW4g YGJvb2ttYXJrLWFmdGVyLWp1bXAtaG9vaycuICBGaW5hbGx5LCBpZiBvcHRpb24KK2Bib29rbWFy ay1hdXRvbWF0aWNhbGx5LXNob3ctYW5ub3RhdGlvbnMnIGlzIG5vbi1uaWwgYW5kIHRoZSBib29r bWFyaworaGFzIGFuIGFubm90YXRpb24sIHNob3cgdGhlIGFubm90YXRpb24uIgorICAoc2V0cSBi b29rbWFyay1qdW1wLWRpc3BsYXktZnVuY3Rpb24gIGRpc3BsYXktZnVuY3Rpb24pCiAgIChib29r bWFyay1oYW5kbGUtYm9va21hcmsgYm9va21hcmstbmFtZS1vci1yZWNvcmQpCi0gIChzYXZlLWN1 cnJlbnQtYnVmZmVyCi0gICAgKGZ1bmNhbGwgZGlzcGxheS1mdW5jdGlvbiAoY3VycmVudC1idWZm ZXIpKSkKICAgKGxldCAoKHdpbiAoZ2V0LWJ1ZmZlci13aW5kb3cgKGN1cnJlbnQtYnVmZmVyKSAw KSkpCiAgICAgKGlmIHdpbiAoc2V0LXdpbmRvdy1wb2ludCB3aW4gKHBvaW50KSkpKQogICA7OyBG SVhNRTogd2UgdXNlZCB0byBvbmx5IHJ1biBib29rbWFyay1hZnRlci1qdW1wLWhvb2sgaW4KQEAg LTEzMzcsMTEgKzEzNzcsMTIgQEAKIAogSWYgQk1LLVJFQ09SRCBoYXMgYSBwcm9wZXJ0eSBjYWxs ZWQgYGJ1ZmZlcicsIGl0IHNob3VsZCBiZSBhIGxpdmUKIGJ1ZmZlciBvYmplY3QsIGFuZCB0aGlz IGJ1ZmZlciB3aWxsIGJlIHNlbGVjdGVkLiIKLSAgKGxldCAoKGZpbGUgICAgICAgICAgKGJvb2tt YXJrLWdldC1maWxlbmFtZSBibWstcmVjb3JkKSkKLQkoYnVmICAgICAgICAgICAoYm9va21hcmst cHJvcC1nZXQgYm1rLXJlY29yZCAnYnVmZmVyKSkKLSAgICAgICAgKGZvcndhcmQtc3RyICAgKGJv b2ttYXJrLWdldC1mcm9udC1jb250ZXh0LXN0cmluZyBibWstcmVjb3JkKSkKLSAgICAgICAgKGJl aGluZC1zdHIgICAgKGJvb2ttYXJrLWdldC1yZWFyLWNvbnRleHQtc3RyaW5nIGJtay1yZWNvcmQp KQotICAgICAgICAocGxhY2UgICAgICAgICAoYm9va21hcmstZ2V0LXBvc2l0aW9uIGJtay1yZWNv cmQpKSkKKyAgKGxldCogKChibWsgICAgICAgICAgKGJvb2ttYXJrLWdldC1ib29rbWFyayBibWsp KQorICAgICAgICAgKGZpbGUgICAgICAgICAoYm9va21hcmstZ2V0LWZpbGVuYW1lIGJtaykpCisJ IChidWYgICAgICAgICAgKGJvb2ttYXJrLXByb3AtZ2V0IGJtayAnYnVmZmVyKSkKKyAgICAgICAg IChmb3J3YXJkLXN0ciAgKGJvb2ttYXJrLWdldC1mcm9udC1jb250ZXh0LXN0cmluZyBibWspKQor ICAgICAgICAgKGJlaGluZC1zdHIgICAoYm9va21hcmstZ2V0LXJlYXItY29udGV4dC1zdHJpbmcg Ym1rKSkKKyAgICAgICAgIChwbGFjZSAgICAgICAgKGJvb2ttYXJrLWdldC1wb3NpdGlvbiBibWsp KSkKICAgICAoc2V0LWJ1ZmZlcgogICAgICAoY29uZAogICAgICAgKChhbmQgZmlsZSAoZmlsZS1y ZWFkYWJsZS1wIGZpbGUpIChub3QgKGJ1ZmZlci1saXZlLXAgYnVmKSkpCkBAIC0xMzUwLDYgKzEz OTEsOSBAQAogICAgICAgKChhbmQgYnVmIChnZXQtYnVmZmVyIGJ1ZikpKQogICAgICAgKHQgOzsg SWYgbm90LCByYWlzZSBlcnJvci4KICAgICAgICAoc2lnbmFsICdib29rbWFyay1lcnJvci1uby1m aWxlbmFtZSAobGlzdCAnc3RyaW5ncCBmaWxlKSkpKSkKKyAgICAod2hlbiBib29rbWFyay1qdW1w LWRpc3BsYXktZnVuY3Rpb24KKyAgICAgIChzYXZlLWN1cnJlbnQtYnVmZmVyIChmdW5jYWxsIGJv b2ttYXJrLWp1bXAtZGlzcGxheS1mdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGN1cnJlbnQtYnVmZmVyKSkpKQogICAgIChpZiBwbGFjZSAoZ290by1jaGFyIHBs YWNlKSkKICAgICA7OyBHbyBzZWFyY2hpbmcgZm9yd2FyZCBmaXJzdC4gIFRoZW4sIGlmIGZvcndh cmQtc3RyIGV4aXN0cyBhbmQKICAgICA7OyB3YXMgZm91bmQgaW4gdGhlIGZpbGUsIHdlIGNhbiBz ZWFyY2ggYmFja3dhcmQgZm9yIGJlaGluZC1zdHIuCg== --_005_SJ0PR10MB5488B76B824B691EC228B84BF3669SJ0PR10MB5488namp_ Content-Type: application/octet-stream; name="bookmark-patched-2022-08-11.el" Content-Description: bookmark-patched-2022-08-11.el Content-Disposition: attachment; filename="bookmark-patched-2022-08-11.el"; size=108043; creation-date="Thu, 11 Aug 2022 01:00:10 GMT"; modification-date="Sat, 13 Aug 2022 20:59:19 GMT" Content-Transfer-Encoding: base64 Ozs7IGJvb2ttYXJrLmVsIC0tLSBzZXQgYm9va21hcmtzLCBtYXliZSBhbm5vdGF0ZSB0aGVtLCBq dW1wIHRvIHRoZW0gbGF0ZXIgLSotIGxleGljYWwtYmluZGluZzogdCAtKi0KCjs7IENvcHlyaWdo dCAoQykgMTk5My0xOTk3LCAyMDAxLTIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu Cgo7OyBBdXRob3I6IEthcmwgRm9nZWwgPGtmb2dlbEByZWQtYmVhbi5jb20+Cjs7IENyZWF0ZWQ6 IEp1bHksIDE5OTMKOzsgS2V5d29yZHM6IGNvbnZlbmllbmNlCgo7OyBUaGlzIGZpbGUgaXMgcGFy dCBvZiBHTlUgRW1hY3MuCgo7OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7 OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgR05VIEVtYWNzIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7 IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7 IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCjs7IGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCjs7OyBDb21tZW50YXJ5OgoKOzsgVGhpcyBwYWNrYWdl IGlzIGZvciBzZXR0aW5nICJib29rbWFya3MiIGluIGZpbGVzLiAgQSBib29rbWFyawo7OyBhc3Nv Y2lhdGVzIGEgc3RyaW5nIHdpdGggYSBsb2NhdGlvbiBpbiBhIGNlcnRhaW4gZmlsZS4gIFRodXMs IHlvdQo7OyBjYW4gbmF2aWdhdGUgeW91ciB3YXkgdG8gdGhhdCBsb2NhdGlvbiBieSBwcm92aWRp bmcgdGhlIHN0cmluZy4KOzsKOzsgVHlwZSBgTS14IGN1c3RvbWl6ZS1ncm91cCBSRVQgYm9va21h cmsgUkVUJyBmb3IgdXNlciBvcHRpb25zLgoKDAo7OzsgQ29kZToKCihyZXF1aXJlICdwcCkKKHJl cXVpcmUgJ3RhYnVsYXRlZC1saXN0KQoocmVxdWlyZSAndGV4dC1wcm9wZXJ0eS1zZWFyY2gpCihl dmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wtbGliKSkKCjs7OyBNaXNjIGNvbW1lbnRzOgo7 Owo7OyBUaGUgYm9va21hcmsgbGlzdCBpcyBzb3J0ZWQgbGV4aWNhbGx5IGJ5IGRlZmF1bHQsIGJ1 dCB5b3UgY2FuIHR1cm4KOzsgdGhpcyBvZmYgYnkgc2V0dGluZyBib29rbWFyay1zb3J0LWZsYWcg dG8gbmlsLiAgSWYgaXQgaXMgbmlsLCB0aGVuCjs7IHRoZSBsaXN0IHdpbGwgYmUgcHJlc2VudGVk IGluIHRoZSBvcmRlciBpdCBpcyByZWNvcmRlZAo7OyAoY2hyb25vbG9naWNhbGx5KSwgd2hpY2gg aXMgYWN0dWFsbHkgZmFpcmx5IHVzZWZ1bCBhcyB3ZWxsLgoKOzs7IFVzZXIgVmFyaWFibGVzCgoo ZGVmZ3JvdXAgYm9va21hcmsgbmlsCiAgIlNldHRpbmcsIGFubm90YXRpb24gYW5kIGp1bXBpbmcg dG8gYm9va21hcmtzLiIKICA6Z3JvdXAgJ21hdGNoaW5nKQoKCihkZWZjdXN0b20gYm9va21hcmst dXNlLWFubm90YXRpb25zIG5pbAogICJJZiBub24tbmlsLCBzZXR0aW5nIGEgYm9va21hcmsgcXVl cmllcyBmb3IgYW4gYW5ub3RhdGlvbiBpbiBhIGJ1ZmZlci4iCiAgOnR5cGUgJ2Jvb2xlYW4pCgoK KGRlZmN1c3RvbSBib29rbWFyay1zYXZlLWZsYWcgdAogICJDb250cm9scyB3aGVuIEVtYWNzIHNh dmVzIGJvb2ttYXJrcyB0byBhIGZpbGUuCi0tPiBuaWwgbWVhbnMgbmV2ZXIgc2F2ZSBib29rbWFy a3MsIGV4Y2VwdCB3aGVuIGBib29rbWFyay1zYXZlJyBpcwogICAgZXhwbGljaXRseSBjYWxsZWQg KFxcW2Jvb2ttYXJrLXNhdmVdKS4KLS0+IHQgbWVhbnMgc2F2ZSBib29rbWFya3Mgd2hlbiBFbWFj cyBpcyBraWxsZWQuCi0tPiBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIG51bWJlciB0aGF0IGlz IHRoZSBmcmVxdWVuY3kgd2l0aCB3aGljaAogICAgdGhlIGJvb2ttYXJrIGxpc3QgaXMgc2F2ZWQg KGkuZS46IHRoZSBudW1iZXIgb2YgdGltZXMgd2hpY2gKICAgIEVtYWNzJ3MgYm9va21hcmsgbGlz dCBtYXkgYmUgbW9kaWZpZWQgYmVmb3JlIGl0IGlzIGF1dG9tYXRpY2FsbHkKICAgIHNhdmVkLiku ICBJZiBpdCBpcyBhIG51bWJlciwgRW1hY3Mgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgc2F2ZQog ICAgYm9va21hcmtzIHdoZW4gaXQgaXMga2lsbGVkLgoKVGhlcmVmb3JlLCB0aGUgd2F5IHRvIGdl dCBpdCB0byBzYXZlIGV2ZXJ5IHRpbWUgeW91IG1ha2Ugb3IgZGVsZXRlIGEKYm9va21hcmsgaXMg dG8gc2V0IHRoaXMgdmFyaWFibGUgdG8gMSAob3IgMCwgd2hpY2ggcHJvZHVjZXMgdGhlIHNhbWUK YmVoYXZpb3IuKQoKVG8gc3BlY2lmeSB0aGUgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZW0sIG1v ZGlmeSB0aGUgdmFyaWFibGUKYGJvb2ttYXJrLWRlZmF1bHQtZmlsZScuIgogIDp0eXBlICcoY2hv aWNlIChjb25zdCBuaWwpIGludGVnZXIgKG90aGVyIHQpKSkKCgooZGVmaW5lLW9ic29sZXRlLXZh cmlhYmxlLWFsaWFzICdib29rbWFyay1vbGQtZGVmYXVsdC1maWxlCiAgJ2Jvb2ttYXJrLWRlZmF1 bHQtZmlsZSAiMjcuMSIpCihkZWZpbmUtb2Jzb2xldGUtdmFyaWFibGUtYWxpYXMgJ2Jvb2ttYXJr LWZpbGUgJ2Jvb2ttYXJrLWRlZmF1bHQtZmlsZSAiMjcuMSIpCihkZWZjdXN0b20gYm9va21hcmst ZGVmYXVsdC1maWxlCiAgKGxvY2F0ZS11c2VyLWVtYWNzLWZpbGUgImJvb2ttYXJrcyIgIi5lbWFj cy5ibWsiKQogICJGaWxlIGluIHdoaWNoIHRvIHNhdmUgYm9va21hcmtzIGJ5IGRlZmF1bHQuIgog IDs7IFRoZSBjdXJyZW50IGRlZmF1bHQgZmlsZSBpcyBkZWZpbmVkIHZpYSB0aGUgaW50ZXJuYWwg dmFyaWFibGUKICA7OyBgYm9va21hcmstYm9va21hcmtzLXRpbWVzdGFtcCcuICBUaGlzIGRvZXMg bm90IGFmZmVjdCB0aGUgdmFsdWUKICA7OyBvZiBgYm9va21hcmstZGVmYXVsdC1maWxlJy4KICA6 dHlwZSAnZmlsZSkKCihkZWZjdXN0b20gYm9va21hcmstd2F0Y2gtYm9va21hcmstZmlsZSB0CiAg IklmIG5vbi1uaWwgd2F0Y2ggdGhlIGRlZmF1bHQgYm9va21hcmsgZmlsZS4KSWYgdGhpcyBmaWxl IGhhcyBjaGFuZ2VkIG9uIGRpc2sgc2luY2UgaXQgd2FzIGxhc3QgbG9hZGVkLCBxdWVyeSB0aGUg dXNlcgp3aGV0aGVyIHRvIGxvYWQgaXQgYWdhaW4uICBJZiB0aGUgdmFsdWUgaXMgYHNpbGVudCcg cmVsb2FkIHdpdGhvdXQgcXVlcnlpbmcuClRoaXMgZmlsZSBkZWZhdWx0cyB0byBgYm9va21hcmst ZGVmYXVsdC1maWxlJy4gIEJ1dCBkdXJpbmcgYW4gRW1hY3Mgc2Vzc2lvbiwKYGJvb2ttYXJrLWxv YWQnIGFuZCBgYm9va21hcmstc2F2ZScgY2FuIHJlZGVmaW5lIHRoZSBjdXJyZW50IGRlZmF1bHQg ZmlsZS4iCiAgOnZlcnNpb24gIjI3LjEiCiAgOnR5cGUgJ2Jvb2xlYW4KICA6Z3JvdXAgJ2Jvb2tt YXJrKQoKKGRlZmN1c3RvbSBib29rbWFyay12ZXJzaW9uLWNvbnRyb2wgJ25vc3BlY2lhbAogICJX aGV0aGVyIG9yIG5vdCB0byBtYWtlIG51bWJlcmVkIGJhY2t1cHMgb2YgdGhlIGJvb2ttYXJrIGZp bGUuCkl0IGNhbiBoYXZlIGZvdXIgdmFsdWVzOiB0LCBuaWwsIGBuZXZlcicsIG9yIGBub3NwZWNp YWwnLgpUaGUgZmlyc3QgdGhyZWUgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIHRoYXQgdGhleSBkbyBm b3IgdGhlCnZhcmlhYmxlIGB2ZXJzaW9uLWNvbnRyb2wnOyB0aGUgdmFsdWUgYG5vc3BlY2lhbCcg KHRoZSBkZWZhdWx0KSBtZWFucwpqdXN0IHVzZSB0aGUgdmFsdWUgb2YgYHZlcnNpb24tY29udHJv bCcuIgogIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJJZiBleGlzdGluZyIgbmlsKQogICAg ICAgICAgICAgICAgIChjb25zdCA6dGFnICJOZXZlciIgbmV2ZXIpCiAgICAgICAgICAgICAgICAg KGNvbnN0IDp0YWcgIlVzZSB2YWx1ZSBvZiBvcHRpb24gYHZlcnNpb24tY29udHJvbCciIG5vc3Bl Y2lhbCkKICAgICAgICAgICAgICAgICAob3RoZXIgOnRhZyAiQWx3YXlzIiB0KSkpCgoKKGRlZmN1 c3RvbSBib29rbWFyay1jb21wbGV0aW9uLWlnbm9yZS1jYXNlIHQKICAiTm9uLW5pbCBtZWFucyBi b29rbWFyayBmdW5jdGlvbnMgaWdub3JlIGNhc2UgaW4gY29tcGxldGlvbi4iCiAgOnR5cGUgJ2Jv b2xlYW4pCgoKKGRlZmN1c3RvbSBib29rbWFyay1zb3J0LWZsYWcgdAogICJUaGlzIGNvbnRyb2xz IHRoZSBib29rbWFyayBkaXNwbGF5IHNvcnRpbmcuCm5pbCBtZWFucyB0aGV5IHdpbGwgYmUgZGlz cGxheWVkIGluIExJRk8gb3JkZXIgKHRoYXQgaXMsIG1vc3QKcmVjZW50bHkgY3JlYXRlZCBvbmVz IGNvbWUgZmlyc3QsIG9sZGVzdCBvbmVzIGNvbWUgbGFzdCkuCgpgbGFzdC1tb2RpZmllZCcgbWVh bnMgdGhhdCBib29rbWFya3Mgd2lsbCBiZSBkaXNwbGF5ZWQgc29ydGVkCmZyb20gbW9zdCByZWNl bnRseSBtb2RpZmllZCB0byBsZWFzdCByZWNlbnRseSBtb2RpZmllZC4KCk90aGVyIHZhbHVlcyBt ZWFucyB0aGF0IGJvb2ttYXJrcyB3aWxsIGJlIGRpc3BsYXllZCBzb3J0ZWQgYnkKYm9va21hcmsg bmFtZS4iCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIkJ5IG5hbWUiIHQpCiAgICAgICAg ICAgICAgICAgKGNvbnN0IDp0YWcgIkJ5IG1vZGlmaWVkIHRpbWUiIGxhc3QtbW9kaWZpZWQpCiAg ICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIkJ5IGNyZWF0aW9uIHRpbWUiIG5pbCkpKQoKCihk ZWZjdXN0b20gYm9va21hcmstbWVudS1jb25maXJtLWRlbGV0aW9uIG5pbAogICJOb24tbmlsIG1l YW5zIGNvbmZpcm0gYmVmb3JlIGRlbGV0aW5nIGJvb2ttYXJrcyBpbiBhIGJvb2ttYXJrIG1lbnUg YnVmZmVyLgpOaWwgbWVhbnMgZG9uJ3QgcHJvbXB0IGZvciBjb25maXJtYXRpb24uIgogIDp2ZXJz aW9uICIyOC4xIgogIDp0eXBlICdib29sZWFuKQoKKGRlZmN1c3RvbSBib29rbWFyay1hdXRvbWF0 aWNhbGx5LXNob3ctYW5ub3RhdGlvbnMgdAogICJOb24tbmlsIG1lYW5zIHNob3cgYW5ub3RhdGlv bnMgd2hlbiBqdW1waW5nIHRvIGEgYm9va21hcmsuIgogIDp0eXBlICdib29sZWFuKQoKKGRlZmNv bnN0IGJvb2ttYXJrLWJtZW51LWJ1ZmZlciAiKkJvb2ttYXJrIExpc3QqIgogICJOYW1lIG9mIGJ1 ZmZlciB1c2VkIGZvciBCb29rbWFyayBMaXN0LiIpCgooZGVmdmFyIGJvb2ttYXJrLWJtZW51LXVz ZS1oZWFkZXItbGluZSB0CiAgIk5vbi1uaWwgbWVhbnMgdG8gdXNlIGFuIGltbW92YWJsZSBoZWFk ZXIgbGluZS4KVGhpcyBpcyBhcyBvcHBvc2VkIHRvIGlubGluZSB0ZXh0IGF0IHRoZSB0b3Agb2Yg dGhlIGJ1ZmZlci4iKQoobWFrZS1vYnNvbGV0ZS12YXJpYWJsZSAnYm9va21hcmstYm1lbnUtdXNl LWhlYWRlci1saW5lICJubyBsb25nZXIgdXNlZC4iICIyOC4xIikKCihkZWZjb25zdCBib29rbWFy ay1ibWVudS1pbmxpbmUtaGVhZGVyLWhlaWdodCAyCiAgIk51bWJlciBvZiBsaW5lcyB1c2VkIGZv ciB0aGUgKkJvb2ttYXJrIExpc3QqIGhlYWRlci4KXChUaGlzIGlzIG9ubHkgc2lnbmlmaWNhbnQg d2hlbiBgYm9va21hcmstYm1lbnUtdXNlLWhlYWRlci1saW5lJwppcyBuaWwuKSIpCihtYWtlLW9i c29sZXRlLXZhcmlhYmxlICdib29rbWFyay1ibWVudS1pbmxpbmUtaGVhZGVyLWhlaWdodCAibm8g bG9uZ2VyIHVzZWQuIiAiMjguMSIpCgooZGVmY29uc3QgYm9va21hcmstYm1lbnUtbWFya3Mtd2lk dGggMgogICJOdW1iZXIgb2YgY29sdW1ucyAoY2hhcnMpIHVzZWQgZm9yIHRoZSAqQm9va21hcmsg TGlzdCogbWFya3MgY29sdW1uLgpUaGlzIGluY2x1ZGVzIHRoZSBhbm5vdGF0aW9ucyBjb2x1bW4u IikKCihkZWZjdXN0b20gYm9va21hcmstYm1lbnUtZmlsZS1jb2x1bW4gMzAKICAiQ29sdW1uIGF0 IHdoaWNoIHRvIGRpc3BsYXkgZmlsZW5hbWVzIGluIGEgYnVmZmVyIGxpc3RpbmcgYm9va21hcmtz LgpZb3UgY2FuIHRvZ2dsZSB3aGV0aGVyIGZpbGVzIGFyZSBzaG93biB3aXRoIFxcPGJvb2ttYXJr LWJtZW51LW1vZGUtbWFwPlxcW2Jvb2ttYXJrLWJtZW51LXRvZ2dsZS1maWxlbmFtZXNdLiIKICA6 dHlwZSAnbmF0bnVtKQoKCihkZWZjdXN0b20gYm9va21hcmstYm1lbnUtdG9nZ2xlLWZpbGVuYW1l cyB0CiAgIk5vbi1uaWwgbWVhbnMgc2hvdyBmaWxlbmFtZXMgd2hlbiBsaXN0aW5nIGJvb2ttYXJr cy4KQSBub24tbmlsIHZhbHVlIG1heSByZXN1bHQgaW4gdHJ1bmNhdGVkIGJvb2ttYXJrIG5hbWVz LiIKICA6dHlwZSAnYm9vbGVhbikKCihkZWZmYWNlIGJvb2ttYXJrLW1lbnUtYm9va21hcmsKICAn KCh0ICg6d2VpZ2h0IGJvbGQpKSkKICAiRmFjZSB1c2VkIHRvIGhpZ2hsaWdodCBib29rbWFyayBu YW1lcyBpbiBib29rbWFyayBtZW51IGJ1ZmZlcnMuIikKCihkZWZjdXN0b20gYm9va21hcmstbWVu dS1sZW5ndGggNzAKICAiTWF4aW11bSBsZW5ndGggb2YgYSBib29rbWFyayBuYW1lIGRpc3BsYXll ZCBvbiBhIHBvcHVwIG1lbnUuIgogIDp0eXBlICduYXRudW0pCgo7OyBGSVhNRTogSXMgaXQgcmVh bGx5IHdvcnRoIGEgY3VzdG9taXphdGlvbiBvcHRpb24/CihkZWZjdXN0b20gYm9va21hcmstc2Vh cmNoLWRlbGF5IDAuMgogICJUaW1lIGJlZm9yZSBgYm9va21hcmstYm1lbnUtc2VhcmNoJyB1cGRh dGVzIHRoZSBkaXNwbGF5LiIKICA6dHlwZSAgJ251bWJlcikKCihkZWZjdXN0b20gYm9va21hcmst c2V0LWZyaW5nZS1tYXJrIHQKICAiV2hldGhlciB0byBzZXQgYSBmcmluZ2UgbWFyayBhdCBib29r bWFya2VkIGxpbmVzLiIKICA6dHlwZSAgJ2Jvb2xlYW4KICA6dmVyc2lvbiAiMjguMSIpCgo7OyBG SVhNRTogTm8gbG9uZ2VyIHVzZWQuICBTaG91bGQgYmUgZGVjbGFyZWQgb2Jzb2xldGUgb3IgcmVt b3ZlZC4KKGRlZmZhY2UgYm9va21hcmstbWVudS1oZWFkaW5nCiAgJygodCAoOmluaGVyaXQgZm9u dC1sb2NrLXR5cGUtZmFjZSkpKQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSBoZWFkaW5n IGluIGJvb2ttYXJrIG1lbnUgYnVmZmVycy4iCiAgOnZlcnNpb24gIjIyLjEiKQoKKGRlZmZhY2Ug Ym9va21hcmstZmFjZQogICcoKCgoY2xhc3MgZ3JheXNjYWxlKQogICAgICAoYmFja2dyb3VuZCBs aWdodCkpCiAgICAgOmZvcmVncm91bmQgIkRpbUdyYXkiKQogICAgKCgoY2xhc3MgZ3JheXNjYWxl KQogICAgICAoYmFja2dyb3VuZCBkYXJrKSkKICAgICA6Zm9yZWdyb3VuZCAiTGlnaHRHcmF5IikK ICAgICgoKGNsYXNzIGNvbG9yKQogICAgICAoYmFja2dyb3VuZCBsaWdodCkpCiAgICAgOmJhY2tn cm91bmQgIldoaXRlIiA6Zm9yZWdyb3VuZCAiRGFya09yYW5nZTEiKQogICAgKCgoY2xhc3MgY29s b3IpCiAgICAgIChiYWNrZ3JvdW5kIGRhcmspKQogICAgIDpiYWNrZ3JvdW5kICJCbGFjayIgOmZv cmVncm91bmQgIkRhcmtPcmFuZ2UxIikpCiAgIkZhY2UgdXNlZCB0byBoaWdobGlnaHQgY3VycmVu dCBsaW5lLiIKICA6dmVyc2lvbiAiMjguMSIpCgo7OzsgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0 cyBiZXlvbmQgdGhpcyBwb2ludC4KCgwKOzs7IEtleW1hcCBzdHVmZjoKCjs7IFNldCB1cCB0aGVz ZSBiaW5kaW5ncyBkdW1waW5nIHRpbWUgKm9ubHkqOwo7OyBpZiB0aGUgdXNlciBhbHRlcnMgdGhl bSwgZG9uJ3Qgb3ZlcnJpZGUgdGhlIHVzZXIgd2hlbiBsb2FkaW5nIGJvb2ttYXJrLmVsLgoKOzs7 IyMjYXV0b2xvYWQgKGtleW1hcC1zZXQgY3RsLXgtci1tYXAgImIiICMnYm9va21hcmstanVtcCkK Ozs7IyMjYXV0b2xvYWQgKGtleW1hcC1zZXQgY3RsLXgtci1tYXAgIm0iICMnYm9va21hcmstc2V0 KQo7OzsjIyNhdXRvbG9hZCAoa2V5bWFwLXNldCBjdGwteC1yLW1hcCAiTSIgIydib29rbWFyay1z ZXQtbm8tb3ZlcndyaXRlKQo7OzsjIyNhdXRvbG9hZCAoa2V5bWFwLXNldCBjdGwteC1yLW1hcCAi bCIgIydib29rbWFyay1ibWVudS1saXN0KQoKOzs7IyMjYXV0b2xvYWQKKGRlZnZhci1rZXltYXAg Ym9va21hcmstbWFwCiAgOmRvYyAiS2V5bWFwIGNvbnRhaW5pbmcgYmluZGluZ3MgdG8gYm9va21h cmsgZnVuY3Rpb25zLgpJdCBpcyBub3QgYm91bmQgdG8gYW55IGtleSBieSBkZWZhdWx0OiB0byBi aW5kIGl0CnNvIHRoYXQgeW91IGhhdmUgYSBib29rbWFyayBwcmVmaXgsIGp1c3QgdXNlIGBnbG9i YWwtc2V0LWtleScgYW5kIGJpbmQgYQprZXkgb2YgeW91ciBjaG9pY2UgdG8gdmFyaWFibGUgYGJv b2ttYXJrLW1hcCcuICBBbGwgaW50ZXJhY3RpdmUgYm9va21hcmsKZnVuY3Rpb25zIGhhdmUgYSBi aW5kaW5nIGluIHRoaXMga2V5bWFwLiIKICAieCIgIydib29rbWFyay1zZXQKICAibSIgIydib29r bWFyay1zZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyJtImFyawogICJNIiAjJ2Jvb2tt YXJrLXNldC1uby1vdmVyd3JpdGUgICAgICAgICAgICAgICA7Ik0iYXliZSBtYXJrCiAgImoiICMn Ym9va21hcmstanVtcAogICJnIiAjJ2Jvb2ttYXJrLWp1bXAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7ImcibwogICJvIiAjJ2Jvb2ttYXJrLWp1bXAtb3RoZXItd2luZG93CiAgIjUiICMnYm9v a21hcmstanVtcC1vdGhlci1mcmFtZQogICJpIiAjJ2Jvb2ttYXJrLWluc2VydAogICJlIiAjJ2Vk aXQtYm9va21hcmtzCiAgImYiICMnYm9va21hcmstaW5zZXJ0LWxvY2F0aW9uICAgICAgICAgICAg ICAgIDsiZiJpbmQKICAiciIgIydib29rbWFyay1yZW5hbWUKICAiZCIgIydib29rbWFyay1kZWxl dGUKICAiRCIgIydib29rbWFyay1kZWxldGUtYWxsCiAgImwiICMnYm9va21hcmstbG9hZAogICJ3 IiAjJ2Jvb2ttYXJrLXdyaXRlCiAgInMiICMnYm9va21hcmstc2F2ZSkKCjs7OyMjI2F1dG9sb2Fk IChmc2V0ICdib29rbWFyay1tYXAgYm9va21hcmstbWFwKQoKDAo7OzsgQ29yZSB2YXJpYWJsZXMg YW5kIGRhdGEgc3RydWN0dXJlczoKKGRlZnZhciBib29rbWFyay1hbGlzdCAoKQogICJBc3NvY2lh dGlvbiBsaXN0IG9mIGJvb2ttYXJrIG5hbWVzIGFuZCB0aGVpciBwYXJhbWV0ZXJzLgpCb29rbWFy ayBmdW5jdGlvbnMgdXBkYXRlIHRoZSB2YWx1ZSBhdXRvbWF0aWNhbGx5LgpZb3UgcHJvYmFibHkg ZG8gTk9UIHdhbnQgdG8gY2hhbmdlIHRoZSB2YWx1ZSB5b3Vyc2VsZi4KClRoZSB2YWx1ZSBpcyBh biBhbGlzdCB3aG9zZSBlbGVtZW50cyBhcmUgb2YgdGhlIGZvcm0KCiAoQk9PS01BUkstTkFNRSAu IFBBUkFNLUFMSVNUKQoKb3IgdGhlIGRlcHJlY2F0ZWQgZm9ybSAoQk9PS01BUkstTkFNRSBQQVJB TS1BTElTVCkuICBUaGUgYWxpc3QgaXMKb3JkZXJlZCBmcm9tIG1vc3QgcmVjZW50bHkgY3JlYXRl ZCBib29rbWFyayBhdCB0aGUgZnJvbnQgdG8gbGVhc3QKcmVjZW50bHkgY3JlYXRlZCBib29rbWFy ayBhdCB0aGUgZW5kLgoKQk9PS01BUkstTkFNRSBpcyB0aGUgbmFtZSB5b3UgZ2F2ZSB0byB0aGUg Ym9va21hcmsgd2hlbiBjcmVhdGluZyBpdC4KClBBUkFNLUFMSVNUIGlzIGFuIGFsaXN0IG9mIGJv b2ttYXJrIGluZm9ybWF0aW9uLiAgVGhlIG9yZGVyIG9mIHRoZQplbnRyaWVzIGluIFBBUkFNLUFM SVNUIGlzIG5vdCBpbXBvcnRhbnQuICBBbiBlbnRyeSB3aXRoIGEga2V5IGJ1dCBudWxsCnZhbHVl IG1lYW5zIHRoZSBlbnRyeSBpcyBub3QgdXNlZCAtIGp1c3QgYXMgaWYgdGhlIGVudHJ5IHdlcmUg YWJzZW50LgoKVGhpcyBpcyB0aGUgc2V0IG9mIGVudHJpZXMgYXZhaWxhYmxlIGJ5IGRlZmF1bHQ7 IHRoZWlyIHZhbHVlcyBhcmUKZGVzY3JpYmVkIGJlbG93LgoKIChmaWxlbmFtZSAuIEZJTEVOQU1F KQogKGJ1ZiAuIEJVRkZFUi1PUi1OQU1FKQogKHBvc2l0aW9uIC4gUE9TKQogKGZyb250LWNvbnRl eHQtc3RyaW5nIC4gU1RSLUFGVEVSLVBPUykKIChyZWFyLWNvbnRleHQtc3RyaW5nICAuIFNUUi1C RUZPUkUtUE9TKQogKGFubm90YXRpb24gLiBBTk5PVEFUSU9OKQogKGhhbmRsZXIgLiBIQU5ETEVS KQoKQWxsIGV4Y2VwdCBgYW5ub3RhdGlvbicgYW5kIGBoYW5kbGVyJyBhcmUgcHJlc2VudCBieSBk ZWZhdWx0IGluIG1vc3QKYm9va21hcmtzLiAgYGFubm90YXRpb24nIGlzIHByZXNlbnQgb25seSBp ZiBhIHVzZXIgZ2l2ZXMgdGhlIGJvb2ttYXJrCmFuIGFubm90YXRpb24uICBgaGFuZGxlcicgaXMg dHlwaWNhbGx5IGFic2VudCwgaW4gd2hpY2ggY2FzZSB0aGUKZGVmYXVsdCBoYW5kbGVyLCBgYm9v a21hcmstZGVmYXVsdC1oYW5kbGVyJywgaXMgdXNlZC4KCkEgYm9va21hcmsgcmVjb3JkIGlzIHR5 cGljYWxseSBjcmVhdGVkIGJ5IHRoZSBmdW5jdGlvbiB0aGF0J3MKY3VycmVudGx5IHRoZSB2YWx1 ZSBvZiB2YXJpYWJsZSBgYm9va21hcmstbWFrZS1yZWNvcmQtZnVuY3Rpb24nLiAgRm9yCmEgZ2l2 ZW4gdHlwZSBvZiBib29rbWFyaywgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGVm aW5pbmcKdGhlIGFwcHJvcHJpYXRlIFBBUkFNLUFMSVNULiAgTW9zdCBgYm9va21hcmstbWFrZS1y ZWNvcmQtZnVuY3Rpb24nCnVzZXMgZG9uJ3Qgc3BlY2lmeSBhIGBoYW5kbGVyJy4KCiogRklMRU5B TUUgbmFtZXMgdGhlIGJvb2ttYXJrZWQgZmlsZS4KKiBCVUZGRVItT1ItTkFNRSBpcyBhIGJ1ZmZl ciwgb3IgdGhlIG5hbWUgb2YgYSBidWZmZXIsIHRoYXQncyB1c2VkIGlmCiAgRklMRU5BTUUgaXNu J3QgZGVmaW5lZCBvciBpZiBpdCByZWZlcnMgdG8gYSBub25leGlzdGVudCBmaWxlLgoqIFBPUyBp cyB0aGUgYm9va21hcmtlZCBidWZmZXIgcG9zaXRpb24uCiogU1RSLUFGVEVSLVBPUyBpcyBidWZm ZXIgdGV4dCB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MgUE9TLgoqIFNUUi1CRUZPUkUtUE9TIGlz IGJ1ZmZlciB0ZXh0IHRoYXQgaW1tZWRpYXRlbHkgcHJlY2VkZXMgUE9TLgoqIEFOTk9UQVRJT04g aXMgYSB1c2VyLXByb3ZpZGVkIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhlIGJvb2ttYXJrLgog IFNlZSBvcHRpb25zIGBib29rbWFyay11c2UtYW5ub3RhdGlvbnMnIGFuZAogIGBib29rbWFyay1h dXRvbWF0aWNhbGx5LXNob3ctYW5ub3RhdGlvbnMnLgoqIEhBTkRMRVIgaXMgYSBmdW5jdGlvbiB0 aGF0IHByb3ZpZGVzIHRoZSBgYm9va21hcmstanVtcCcgYmVoYXZpb3IgZm9yIGEKICBzcGVjaWZp YyBraW5kIG9mIGJvb2ttYXJrLCByZXBsYWNpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3IgcHJvdmlk ZWQKICBieSBgYm9va21hcmstZGVmYXVsdC1oYW5kbGVyJy4gIFRoaXMgaXMgdGhlIGNhc2UgZm9y IEluZm8gYm9va21hcmtzLAogIGZvciBpbnN0YW5jZS4gIEhBTkRMRVIgbXVzdCBhY2NlcHQgYSBi b29rbWFyayBhcyBpdHMgc29sZSByZXF1aXJlZAogIGFyZ3VtZW50LgoKICBIQU5ETEVSIGlzIHJl c3BvbnNpYmxlIGZvciBwcm92aWRpbmcgdGhlIGJvb2ttYXJrJ3MgYmVoYXZpb3I6IGRvaW5nCiAg ZXZlcnl0aGluZyB0aGUgYm9va21hcmsgaXMgbWVhbnQgdG8gZG8uICBUaGlzIGluY2x1ZGVzIGRp c3BsYXlpbmcKICB0aGUgYm9va21hcmsgZGVzdGluYXRpb24sIGlmIHRoYXQncyBuZWVkZWQgKGEg Ym9va21hcmsgbmVlZCBub3QKICBkaXNwbGF5IGFueXRoaW5nOyBpdCBjYW4gcGVyZm9ybSBhbnkg YWN0aW9uKS4KCiAgVG8gZGlzcGxheSB0aGUgZGVzdGluYXRpb24sIEhBTkRMRVIgY2FuIGNhbGwg dGhlIGZ1bmN0aW9uIHRoYXQncyB0aGUKICB2YWx1ZSBvZiB2YXJpYWJsZSBgYm9va21hcmstanVt cC1kaXNwbGF5LWZ1bmN0aW9uJywgd2hpY2ggaXMgc2V0IGJ5CiAgYGJvb2ttYXJrLWp1bXAnIHRv IGF1dG9tYXRpY2FsbHkgYWNjb21tb2RhdGUgb3RoZXItd2luZG93IGV0Yy4KICBkaXNwbGF5aW5n IHRoYXQgZGVwZW5kcyBvbiB0aGUganVtcCBjb21tYW5kLiAgRm9yIGV4YW1wbGU6CgogICAoZnVu Y2FsbCBib29rbWFyay1qdW1wLWRpc3BsYXktZnVuY3Rpb24gKGN1cnJlbnQtYnVmZmVyKSkKCiAg T3IgSEFORExFUiBjYW4gZGlyZWN0bHkgY2FsbCBhbm90aGVyIGRpc3BsYXkgZnVuY3Rpb24uICBG b3IgZXhhbXBsZToKCiAgIChzd2l0Y2gtdG8tYnVmZmVyLW90aGVyLXRhYiBCVUZGRVIpCgogIE9y IEhBTkRMRVIgY2FuIGludm9rZSBgYm9va21hcmstZGVmYXVsdC1oYW5kbGVyJy4gIFRoYXQgZGlz cGxheXMgdGhlCiAgZGVzdGluYXRpb24uICBJdCB0aGVuIG1vdmVzIHRvIHRoZSByZWNvcmRlZCBi dWZmZXIgcG9zaXRpb24sIFBPUywKICByZXBvc2l0aW9uaW5nIHBvaW50LCBpZiBuZWNlc3Nhcnks IHRvIG1hdGNoIHRoZSByZWNvcmRlZCBjb250ZXh0CiAgc3RyaW5ncyBTVFItQkVGT1JFLVBPUyBh bmQgU1RSLUFGVEVSLVBPUy4gIEZvciBpbnN0YW5jZSwgdGhlIEluZm8KICBoYW5kbGVyLCBgSW5m by1ib29rbWFyay1qdW1wJywgZG9lcyB0aGlzIGF0IGl0cyBlbmQ6CgogICAoYm9va21hcmstZGVm YXVsdC1oYW5kbGVyCiAgICBgKCIiIChidWZmZXIgLiAsYnVmKSAuICwoYm9va21hcmstZ2V0LWJv b2ttYXJrLXJlY29yZCBCT09LTUFSSykpKQoKICBIQU5ETEVSIGNhbiBkaXNwbGF5IHRoZSBkZXN0 aW5hdGlvbiB3aGVuZXZlciB0aGF0J3MgbW9zdCBhcHByb3ByaWF0ZQogIC0gaXQgY2FuIHRodXMg cGVyZm9ybSBvdGhlciBhY3Rpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgZGlzcGxheWluZy4iKQoKKGRl ZmluZS1vYnNvbGV0ZS12YXJpYWJsZS1hbGlhcyAnYm9va21hcmtzLWFscmVhZHktbG9hZGVkCiAg J2Jvb2ttYXJrLWJvb2ttYXJrcy10aW1lc3RhbXAgIjI3LjEiKQooZGVmdmFyIGJvb2ttYXJrLWJv b2ttYXJrcy10aW1lc3RhbXAgbmlsCiAgIlRpbWVzdGFtcCBvZiBjdXJyZW50IGRlZmF1bHQgYm9v a21hcmsgZmlsZS4KVGhlIHZhbHVlIGlzIGFjdHVhbGx5IChGSUxFIC4gTU9EVElNRSksIHdoZXJl IEZJTEUgaXMgYSBib29rbWFyayBmaWxlIHRoYXQKZGVmYXVsdHMgdG8gYGJvb2ttYXJrLWRlZmF1 bHQtZmlsZScgYW5kIE1PRFRJTUUgaXMgaXRzIG1vZGlmaWNhdGlvbiB0aW1lLiIpCgooZGVmdmFy IGJvb2ttYXJrLWZpbGUtY29kaW5nLXN5c3RlbSBuaWwKICAiVGhlIGNvZGluZy1zeXN0ZW0gb2Yg dGhlIGxhc3QgbG9hZGVkIG9yIHNhdmVkIGJvb2ttYXJrIGZpbGUuIikKCihkZWZ2YXItbG9jYWwg Ym9va21hcmstY3VycmVudC1ib29rbWFyayBuaWwKICAiTmFtZSBvZiBib29rbWFyayBtb3N0IHJl Y2VudGx5IHVzZWQgaW4gdGhlIGN1cnJlbnQgZmlsZS4KSXQgaXMgYnVmZmVyIGxvY2FsLCB1c2Vk IHRvIG1ha2UgbW92aW5nIGEgYm9va21hcmsgZm9yd2FyZAp0aHJvdWdoIGEgZmlsZSBlYXNpZXIu IikKCgooZGVmdmFyIGJvb2ttYXJrLWFsaXN0LW1vZGlmaWNhdGlvbi1jb3VudCAwCiAgIk51bWJl ciBvZiBtb2RpZmljYXRpb25zIHRvIGJvb2ttYXJrIGxpc3Qgc2luY2UgaXQgd2FzIGxhc3Qgc2F2 ZWQuIikKCgooZGVmdmFyIGJvb2ttYXJrLXNlYXJjaC1zaXplIDE2CiAgIkxlbmd0aCBvZiB0aGUg Y29udGV4dCBzdHJpbmdzIHJlY29yZGVkIG9uIGVpdGhlciBzaWRlIG9mIGEgYm9va21hcmsuIikK CgooZGVmdmFyIGJvb2ttYXJrLWN1cnJlbnQtYnVmZmVyIG5pbAogICJUaGUgYnVmZmVyIGluIHdo aWNoIGEgYm9va21hcmsgaXMgY3VycmVudGx5IGJlaW5nIHNldCBvciByZW5hbWVkLgpGdW5jdGlv bnMgdGhhdCBpbnNlcnQgc3RyaW5ncyBpbnRvIHRoZSBtaW5pYnVmZmVyIHVzZSB0aGlzIHRvIGtu b3cKdGhlIHNvdXJjZSBidWZmZXIgZm9yIHRoYXQgaW5mb3JtYXRpb247IHNlZSBgYm9va21hcmst eWFuay13b3JkJwpmb3IgZXhhbXBsZS4iKQoKCihkZWZ2YXIgYm9va21hcmsteWFuay1wb2ludCAw CiAgIlRoZSBuZXh0IHBvaW50IGZyb20gd2hpY2ggdG8gcHVsbCBzb3VyY2UgdGV4dCBmb3IgYGJv b2ttYXJrLXlhbmstd29yZCcuClRoaXMgcG9pbnQgaXMgaW4gYGJvb2ttYXJrLWN1cnJlbnQtYnVm ZmVyJy4iKQoKCihkZWZ2YXIgYm9va21hcmstcXVpdC1mbGFnIG5pbAogICJOb24tbmlsIG1lYW5z IGBib29rbWFyay1ibWVudS1zZWFyY2gnIHF1aXRzIGltbWVkaWF0ZWx5LiIpCihtYWtlLW9ic29s ZXRlLXZhcmlhYmxlICdib29rbWFyay1xdWl0LWZsYWcgIm5vIGxvbmdlciB1c2VkIiAiMjcuMSIp CgoMCjs7IEhlbHBlciBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4KCihkZWZtYWNybyB3aXRoLWJ1ZmZl ci1tb2RpZmllZC11bm1vZGlmaWVkICgmcmVzdCBib2R5KQogICJSdW4gQk9EWSB3aGlsZSBwcmVz ZXJ2aW5nIHRoZSBidWZmZXIncyBgYnVmZmVyLW1vZGlmaWVkLXAnIHN0YXRlLiIKICAobGV0ICgo d2FzLW1vZGlmaWVkIChtYWtlLXN5bWJvbCAid2FzLW1vZGlmaWVkIikpKQogICAgYChsZXQgKCgs d2FzLW1vZGlmaWVkIChidWZmZXItbW9kaWZpZWQtcCkpKQogICAgICAgKHVud2luZC1wcm90ZWN0 CiAgICAgICAgICAgKHByb2duICxAYm9keSkKICAgICAgICAgKHNldC1idWZmZXItbW9kaWZpZWQt cCAsd2FzLW1vZGlmaWVkKSkpKSkKCjs7IE9ubHkgZnVuY3Rpb25zIGJlbG93LCBpbiB0aGlzIHBh Z2UgYW5kIHRoZSBuZXh0IG9uZSAoZmlsZSBmb3JtYXRzKSwKOzsgbmVlZCB0byBrbm93IGFueXRo aW5nIGFib3V0IHRoZSBmb3JtYXQgb2YgYm9va21hcmstYWxpc3QgZW50cmllcy4KOzsgRXZlcnlv bmUgZWxzZSBzaG91bGQgZ28gdGhyb3VnaCB0aGVtLgoKKGRlZnVuIGJvb2ttYXJrLW5hbWUtZnJv bS1mdWxsLXJlY29yZCAoYm9va21hcmstcmVjb3JkKQogICJSZXR1cm4gdGhlIG5hbWUgb2YgQk9P S01BUkstUkVDT1JELgpCT09LTUFSSy1SRUNPUkQgaXMsIGUuZy4sIG9uZSBlbGVtZW50IGZyb20g YGJvb2ttYXJrLWFsaXN0Jy4iCiAgKGNhciBib29rbWFyay1yZWNvcmQpKQoKKGRlZnVuIGJvb2tt YXJrLXR5cGUtZnJvbS1mdWxsLXJlY29yZCAoYm9va21hcmstcmVjb3JkKQogICJSZXR1cm4gdGhl biB0eXBlIG9mIEJPT0tNQVJLLVJFQ09SRC4KQk9PS01BUkstUkVDT1JEIGlzLCBlLmcuLCBvbmUg ZWxlbWVudCBmcm9tIGBib29rbWFyay1hbGlzdCcuIEl0J3MKdHlwZSBpcyByZWFkIGZyb20gdGhl IHN5bWJvbCBwcm9wZXJ0eSBuYW1lZApgYm9va21hcmstaGFuZGxlci10eXBlJyByZWFkIG9uIHRo ZSByZWNvcmQgaGFuZGxlciBmdW5jdGlvbi4iCiAgKGxldCAoKGhhbmRsZXIgKGJvb2ttYXJrLWdl dC1oYW5kbGVyIGJvb2ttYXJrLXJlY29yZCkpKQogICAgKHdoZW4gKGF1dG9sb2FkcCAoc3ltYm9s LWZ1bmN0aW9uIGhhbmRsZXIpKQogICAgICAoYXV0b2xvYWQtZG8tbG9hZCAoc3ltYm9sLWZ1bmN0 aW9uIGhhbmRsZXIpKSkKICAgIChpZiAoc3ltYm9scCBoYW5kbGVyKQogICAgICAgIChnZXQgaGFu ZGxlciAnYm9va21hcmstaGFuZGxlci10eXBlKQogICAgICIiKSkpCgooZGVmdW4gYm9va21hcmst YWxsLW5hbWVzICgpCiAgIlJldHVybiBhIGxpc3Qgb2YgYWxsIGN1cnJlbnQgYm9va21hcmsgbmFt ZXMuIgogIChib29rbWFyay1tYXliZS1sb2FkLWRlZmF1bHQtZmlsZSkKICAobWFwY2FyICdib29r bWFyay1uYW1lLWZyb20tZnVsbC1yZWNvcmQgYm9va21hcmstYWxpc3QpKQoKCihkZWZ1biBib29r bWFyay1nZXQtYm9va21hcmsgKGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkICZvcHRpb25hbCBub2Vy cm9yKQogICJSZXR1cm4gdGhlIGJvb2ttYXJrIHJlY29yZCBjb3JyZXNwb25kaW5nIHRvIEJPT0tN QVJLLU5BTUUtT1ItUkVDT1JELgpJZiBCT09LTUFSSy1OQU1FLU9SLVJFQ09SRCBpcyBhIHN0cmlu ZywgbG9vayBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKYm9va21hcmsgcmVjb3JkIGluIGBib29rbWFy ay1hbGlzdCc7IHJldHVybiBpdCBpZiBmb3VuZCwgb3RoZXJ3aXNlCmVycm9yLiAgSWYgb3B0aW9u YWwgYXJndW1lbnQgTk9FUlJPUiBpcyBub24tbmlsLCByZXR1cm4gbmlsCmluc3RlYWQgb2Ygc2ln bmFsaW5nIGFuIGVycm9yLiAgRWxzZSBpZiBCT09LTUFSSy1OQU1FLU9SLVJFQ09SRAppcyBhbHJl YWR5IGEgYm9va21hcmsgcmVjb3JkLCBqdXN0IHJldHVybiBpdC4iCiAgKGNvbmQKICAgKChjb25z cCBib29rbWFyay1uYW1lLW9yLXJlY29yZCkgYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgICgo c3RyaW5ncCBib29rbWFyay1uYW1lLW9yLXJlY29yZCkKICAgIChvciAoYXNzb2Mtc3RyaW5nIGJv b2ttYXJrLW5hbWUtb3ItcmVjb3JkIGJvb2ttYXJrLWFsaXN0CiAgICAgICAgICAgICAgICAgICAg ICBib29rbWFyay1jb21wbGV0aW9uLWlnbm9yZS1jYXNlKQogICAgICAgICh1bmxlc3Mgbm9lcnJv ciAoZXJyb3IgIkludmFsaWQgYm9va21hcmsgJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29rbWFyay1uYW1lLW9yLXJlY29yZCkpKSkpKQoKCihkZWZ1biBib29rbWFyay1nZXQt Ym9va21hcmstcmVjb3JkIChib29rbWFyay1uYW1lLW9yLXJlY29yZCkKICAiUmV0dXJuIHRoZSBy ZWNvcmQgcG9ydGlvbiBvZiBCT09LTUFSSy1OQU1FLU9SLVJFQ09SRCBpbiBgYm9va21hcmstYWxp c3QnLgpJbiBvdGhlciB3b3JkcywgcmV0dXJuIGFsbCBpbmZvcm1hdGlvbiBidXQgdGhlIG5hbWUu IgogIChsZXQgKChhbGlzdCAoY2RyIChib29rbWFyay1nZXQtYm9va21hcmsgYm9va21hcmstbmFt ZS1vci1yZWNvcmQpKSkpCiAgICA7OyBUaGUgYm9va21hcmsgb2JqZWN0cyBjYW4gZWl0aGVyIGxv b2sgbGlrZSAoTkFNRSBBTElTVCkgb3IKICAgIDs7IChOQU1FIC4gQUxJU1QpLCBzbyB3ZSBoYXZl IHRvIGRpc3Rpbmd1aXNoIHRoZSB0d28gaGVyZS4KICAgIChpZiAoYW5kIChudWxsIChjZHIgYWxp c3QpKSAoY29uc3AgKGNhYXIgYWxpc3QpKSkKICAgICAgICAoY2FyIGFsaXN0KSBhbGlzdCkpKQoK CihkZWZ1biBib29rbWFyay1zZXQtbmFtZSAoYm9va21hcmstbmFtZS1vci1yZWNvcmQgbmV3bmFt ZSkKICAiU2V0IEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JEJ3MgbmFtZSB0byBORVdOQU1FLiIKICAo c2V0Y2FyIChib29rbWFyay1nZXQtYm9va21hcmsgYm9va21hcmstbmFtZS1vci1yZWNvcmQpIG5l d25hbWUpKQoKKGRlZnVuIGJvb2ttYXJrLXByb3AtZ2V0IChib29rbWFyay1uYW1lLW9yLXJlY29y ZCBwcm9wKQogICJSZXR1cm4gdGhlIHByb3BlcnR5IFBST1Agb2YgQk9PS01BUkstTkFNRS1PUi1S RUNPUkQsIG9yIG5pbCBpZiBub25lLiIKICAoY2RyIChhc3NxIHByb3AgKGJvb2ttYXJrLWdldC1i b29rbWFyay1yZWNvcmQgYm9va21hcmstbmFtZS1vci1yZWNvcmQpKSkpCgooZGVmdW4gYm9va21h cmstcHJvcC1zZXQgKGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkIHByb3AgdmFsKQogICJTZXQgdGhl IHByb3BlcnR5IFBST1Agb2YgQk9PS01BUkstTkFNRS1PUi1SRUNPUkQgdG8gVkFMLiIKICAobGV0 ICgoY2VsbCAoYXNzcQogICAgICAgICAgICAgICBwcm9wIChib29rbWFyay1nZXQtYm9va21hcmst cmVjb3JkIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKSkpKQogICAgKGlmIGNlbGwKICAgICAgICAo c2V0Y2RyIGNlbGwgdmFsKQogICAgICAobmNvbmMgKGJvb2ttYXJrLWdldC1ib29rbWFyay1yZWNv cmQgYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgICAgICAgICAgICAobGlzdCAoY29ucyBwcm9w IHZhbCkpKSkpKQoKKGRlZnVuIGJvb2ttYXJrLWdldC1hbm5vdGF0aW9uIChib29rbWFyay1uYW1l LW9yLXJlY29yZCkKICAiUmV0dXJuIHRoZSBhbm5vdGF0aW9uIG9mIEJPT0tNQVJLLU5BTUUtT1It UkVDT1JELCBvciBuaWwgaWYgbm9uZS4iCiAgKGJvb2ttYXJrLXByb3AtZ2V0IGJvb2ttYXJrLW5h bWUtb3ItcmVjb3JkICdhbm5vdGF0aW9uKSkKCihkZWZ1biBib29rbWFyay1zZXQtYW5ub3RhdGlv biAoYm9va21hcmstbmFtZS1vci1yZWNvcmQgYW5uKQogICJTZXQgdGhlIGFubm90YXRpb24gb2Yg Qk9PS01BUkstTkFNRS1PUi1SRUNPUkQgdG8gQU5OLiIKICAoYm9va21hcmstcHJvcC1zZXQgYm9v a21hcmstbmFtZS1vci1yZWNvcmQgJ2Fubm90YXRpb24gYW5uKSkKCgooZGVmdW4gYm9va21hcmst Z2V0LWZpbGVuYW1lIChib29rbWFyay1uYW1lLW9yLXJlY29yZCkKICAiUmV0dXJuIHRoZSBmdWxs IGZpbGVuYW1lIG9mIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JELCBvciBuaWwgaWYgbm9uZS4iCiAg KGJvb2ttYXJrLXByb3AtZ2V0IGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkICdmaWxlbmFtZSkpCgoK KGRlZnVuIGJvb2ttYXJrLXNldC1maWxlbmFtZSAoYm9va21hcmstbmFtZS1vci1yZWNvcmQgZmls ZW5hbWUpCiAgIlNldCB0aGUgZnVsbCBmaWxlbmFtZSBvZiBCT09LTUFSSy1OQU1FLU9SLVJFQ09S RCB0byBGSUxFTkFNRS4iCiAgKGJvb2ttYXJrLXByb3Atc2V0IGJvb2ttYXJrLW5hbWUtb3ItcmVj b3JkICdmaWxlbmFtZSBmaWxlbmFtZSkpCgoKKGRlZnVuIGJvb2ttYXJrLWdldC1wb3NpdGlvbiAo Ym9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgIlJldHVybiB0aGUgcG9zaXRpb24gKGkuZS46IHBv aW50KSBvZiBCT09LTUFSSy1OQU1FLU9SLVJFQ09SRCwgb3IgbmlsIGlmIG5vbmUuIgogIChib29r bWFyay1wcm9wLWdldCBib29rbWFyay1uYW1lLW9yLXJlY29yZCAncG9zaXRpb24pKQoKCihkZWZ1 biBib29rbWFyay1zZXQtcG9zaXRpb24gKGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkIHBvc2l0aW9u KQogICJTZXQgdGhlIHBvc2l0aW9uIChpLmUuOiBwb2ludCkgb2YgQk9PS01BUkstTkFNRS1PUi1S RUNPUkQgdG8gUE9TSVRJT04uIgogIChib29rbWFyay1wcm9wLXNldCBib29rbWFyay1uYW1lLW9y LXJlY29yZCAncG9zaXRpb24gcG9zaXRpb24pKQoKCihkZWZ1biBib29rbWFyay1nZXQtZnJvbnQt Y29udGV4dC1zdHJpbmcgKGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKQogICJSZXR1cm4gdGhlIGZy b250LWNvbnRleHQtc3RyaW5nIG9mIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JELCBvciBuaWwgaWYg bm9uZS4iCiAgKGJvb2ttYXJrLXByb3AtZ2V0IGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkICdmcm9u dC1jb250ZXh0LXN0cmluZykpCgoKKGRlZnVuIGJvb2ttYXJrLXNldC1mcm9udC1jb250ZXh0LXN0 cmluZyAoYm9va21hcmstbmFtZS1vci1yZWNvcmQgc3RyaW5nKQogICJTZXQgdGhlIGZyb250LWNv bnRleHQtc3RyaW5nIG9mIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JEIHRvIFNUUklORy4iCiAgKGJv b2ttYXJrLXByb3Atc2V0IGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkICdmcm9udC1jb250ZXh0LXN0 cmluZyBzdHJpbmcpKQoKCihkZWZ1biBib29rbWFyay1nZXQtcmVhci1jb250ZXh0LXN0cmluZyAo Ym9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgIlJldHVybiB0aGUgcmVhci1jb250ZXh0LXN0cmlu ZyBvZiBCT09LTUFSSy1OQU1FLU9SLVJFQ09SRCwgb3IgbmlsIGlmIG5vbmUuIgogIChib29rbWFy ay1wcm9wLWdldCBib29rbWFyay1uYW1lLW9yLXJlY29yZCAncmVhci1jb250ZXh0LXN0cmluZykp CgoKKGRlZnVuIGJvb2ttYXJrLXNldC1yZWFyLWNvbnRleHQtc3RyaW5nIChib29rbWFyay1uYW1l LW9yLXJlY29yZCBzdHJpbmcpCiAgIlNldCB0aGUgcmVhci1jb250ZXh0LXN0cmluZyBvZiBCT09L TUFSSy1OQU1FLU9SLVJFQ09SRCB0byBTVFJJTkcuIgogIChib29rbWFyay1wcm9wLXNldCBib29r bWFyay1uYW1lLW9yLXJlY29yZCAncmVhci1jb250ZXh0LXN0cmluZyBzdHJpbmcpKQoKCihkZWZ1 biBib29rbWFyay1nZXQtaGFuZGxlciAoYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgIlJldHVy biB0aGUgaGFuZGxlciBmdW5jdGlvbiBmb3IgQk9PS01BUkstTkFNRS1PUi1SRUNPUkQsIG9yIG5p bCBpZiBub25lLiIKICAoYm9va21hcmstcHJvcC1nZXQgYm9va21hcmstbmFtZS1vci1yZWNvcmQg J2hhbmRsZXIpKQoKCihkZWZ1biBib29rbWFyay1nZXQtbGFzdC1tb2RpZmllZCAoYm9va21hcmst bmFtZS1vci1yZWNvcmQpCiAgIlJldHVybiB0aGUgbGFzdC1tb2RpZmllZCBmb3IgQk9PS01BUkst TkFNRS1PUi1SRUNPUkQsIG9yIG5pbCBpZiBub25lLiIKICAoYm9va21hcmstcHJvcC1nZXQgYm9v a21hcmstbmFtZS1vci1yZWNvcmQgJ2xhc3QtbW9kaWZpZWQpKQoKCihkZWZ1biBib29rbWFyay11 cGRhdGUtbGFzdC1tb2RpZmllZCAoYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgIlVwZGF0ZSB0 aGUgbGFzdC1tb2RpZmllZCBkYXRlIG9mIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JEIHRvIHRoZSBj dXJyZW50IHRpbWUuIgogIChib29rbWFyay1wcm9wLXNldCBib29rbWFyay1uYW1lLW9yLXJlY29y ZCAnbGFzdC1tb2RpZmllZCAoY3VycmVudC10aW1lKSkpCgoKKGRlZnZhciBib29rbWFyay1oaXN0 b3J5IG5pbAogICJUaGUgaGlzdG9yeSBsaXN0IGZvciBib29rbWFyayBmdW5jdGlvbnMuIikKCihk ZWZpbmUtZnJpbmdlLWJpdG1hcCAnYm9va21hcmstZnJpbmdlLW1hcmsKICAiXHgzY1x4N2VceGZm XHhmZlx4ZmZceGZmXHg3ZVx4M2MiKQoKKGRlZnVuIGJvb2ttYXJrLS1zZXQtZnJpbmdlLW1hcmsg KCkKICAiQXBwbHkgYSBjb2xvcml6ZWQgb3ZlcmxheSB0byB0aGUgYm9va21hcmtlZCBsb2NhdGlv bi4KU2VlIHVzZXIgb3B0aW9uIGBib29rbWFyay1zZXQtZnJpbmdlLW1hcmsnLiIKICAobGV0ICgo Ym0gKG1ha2Utb3ZlcmxheSAocG9pbnQtYXQtYm9sKSAoMSsgKHBvaW50LWF0LWJvbCkpKSkpCiAg ICAob3ZlcmxheS1wdXQgYm0gJ2NhdGVnb3J5ICdib29rbWFyaykKICAgIChvdmVybGF5LXB1dCBi bSAnZXZhcG9yYXRlIHQpCiAgICAob3ZlcmxheS1wdXQgYm0gJ2JlZm9yZS1zdHJpbmcKICAgICAg ICAgICAgICAgICAocHJvcGVydGl6ZQogICAgICAgICAgICAgICAgICAieCIgJ2Rpc3BsYXkKICAg ICAgICAgICAgICAgICAgYChsZWZ0LWZyaW5nZSBib29rbWFyay1mcmluZ2UtbWFyayBib29rbWFy ay1mYWNlKSkpKSkKCihkZWZ1biBib29rbWFyay0tcmVtb3ZlLWZyaW5nZS1tYXJrIChibSkKICAi UmVtb3ZlIGEgYm9va21hcmsncyBjb2xvcml6ZWQgb3ZlcmxheS4KQk0gaXMgYSBib29rbWFyayBh cyByZXR1cm5lZCBmcm9tIGZ1bmN0aW9uIGBib29rbWFyay1nZXQtYm9va21hcmsnLgpTZWUgdXNl ciBvcHRpb24gYGJvb2ttYXJrLXNldC1mcmluZ2UnLiIKICAobGV0ICgoZmlsZW5hbWUgKGNkciAo YXNzcSAnZmlsZW5hbWUgYm0pKSkKICAgICAgICAocG9zIChjZHIgKGFzc3EgJ3Bvc2l0aW9uIGJt KSkpCiAgICAgICAgb3ZlcmxheXMgZm91bmQgdGVtcCkKICAgICh3aGVuIChhbmQgcG9zIGZpbGVu YW1lKQogICAgICAoc2V0cSBmaWxlbmFtZSAoZXhwYW5kLWZpbGUtbmFtZSBmaWxlbmFtZSkpCiAg ICAgIChkb2xpc3QgKGJ1ZiAoYnVmZmVyLWxpc3QpKQogICAgICAgICh3aXRoLWN1cnJlbnQtYnVm ZmVyIGJ1ZgogICAgICAgICAgKHdoZW4gKGVxdWFsIGZpbGVuYW1lIGJ1ZmZlci1maWxlLW5hbWUp CiAgICAgICAgICAgIChzZXRxIG92ZXJsYXlzCiAgICAgICAgICAgICAgICAgIChzYXZlLWV4Y3Vy c2lvbgogICAgICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgcG9zKQogICAgICAgICAgICAgICAg ICAgIChvdmVybGF5cy1pbiAocG9pbnQtYXQtYm9sKSAoMSsgKHBvaW50LWF0LWJvbCkpKSkpCiAg ICAgICAgICAgICh3aGlsZSAoYW5kIChub3QgZm91bmQpIChzZXRxIHRlbXAgKHBvcCBvdmVybGF5 cykpKQogICAgICAgICAgICAgICh3aGVuIChlcSAnYm9va21hcmsgKG92ZXJsYXktZ2V0IHRlbXAg J2NhdGVnb3J5KSkKICAgICAgICAgICAgICAgIChkZWxldGUtb3ZlcmxheSAoc2V0cSBmb3VuZCB0 ZW1wKSkpKSkpKSkpKQoKKGRlZnVuIGJvb2ttYXJrLW1heWJlLXNvcnQtYWxpc3QgKCkKICAiUmV0 dXJuIGBib29rbWFyay1hbGlzdCcgZm9yIGRpc3BsYXkuCklmIGBib29rbWFyay1zb3J0LWZsYWcn IGlzIFQsIHRoZW4gcmV0dXJuIGEgc29ydGVkIGJ5IG5hbWUgY29weSBvZiB0aGUgYWxpc3QuCklm IGBib29rbWFyay1zb3J0LWZsYWcnIGlzIExBU1QtTU9ESUZJRUQsIHRoZW4gcmV0dXJuIGEgc29y dGVkIGJ5IGxhc3QgbW9kaWZpZWQKY29weSBvZiB0aGUgYWxpc3QuICBPdGhlcndpc2UsIGp1c3Qg cmV0dXJuIGBib29rbWFyay1hbGlzdCcsIHdoaWNoIGJ5IGRlZmF1bHQKaXMgb3JkZXJlZCBmcm9t IG1vc3QgcmVjZW50bHkgY3JlYXRlZCB0byBsZWFzdCByZWNlbnRseSBjcmVhdGVkIGJvb2ttYXJr LiIKICAobGV0ICgoY29weSAoY29weS1hbGlzdCBib29rbWFyay1hbGlzdCkpKQogICAgKGNvbmQg KChlcSBib29rbWFyay1zb3J0LWZsYWcgdCkKICAgICAgICAgICAoc29ydCBjb3B5IChsYW1iZGEg KHggeSkgKHN0cmluZy1sZXNzcCAoY2FyIHgpIChjYXIgeSkpKSkpCiAgICAgICAgICAoKGVxIGJv b2ttYXJrLXNvcnQtZmxhZyAnbGFzdC1tb2RpZmllZCkKICAgICAgICAgICAoc29ydCBjb3B5IChs YW1iZGEgKHggeSkKICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKHR4IChib29rbWFyay1n ZXQtbGFzdC1tb2RpZmllZCB4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5IChi b29rbWFyay1nZXQtbGFzdC1tb2RpZmllZCB5KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg KGNvbmQgKChudWxsIHR4KSBuaWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChu dWxsIHR5KSB0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ICh0aW1lLWxlc3Mt cCB0eSB0eCkpKSkpKSkKICAgICAgICAgICh0IGNvcHkpKSkpCgooZGVmdW4gYm9va21hcmstY29t cGxldGluZy1yZWFkIChwcm9tcHQgJm9wdGlvbmFsIGRlZmF1bHQpCiAgIlByb21wdGluZyB3aXRo IFBST01QVCwgcmVhZCBhIGJvb2ttYXJrIG5hbWUgaW4gY29tcGxldGlvbi4KUFJPTVBUIHdpbGwg Z2V0IGEgXCI6IFwiIHN0dWNrIG9uIHRoZSBlbmQgbm8gbWF0dGVyIHdoYXQsIHNvIHlvdQpwcm9i YWJseSBkb24ndCB3YW50IHRvIGluY2x1ZGUgb25lIHlvdXJzZWxmLgpPcHRpb25hbCBhcmcgREVG QVVMVCBpcyBhIHN0cmluZyB0byByZXR1cm4gaWYgdGhlIHVzZXIgaW5wdXQgaXMgZW1wdHkuCklm IERFRkFVTFQgaXMgbmlsIHRoZW4gcmV0dXJuIGVtcHR5IHN0cmluZyBmb3IgZW1wdHkgaW5wdXQu IgogIChib29rbWFyay1tYXliZS1sb2FkLWRlZmF1bHQtZmlsZSkgOyBwYXJhbm9pYQogIChpZiAo bGlzdHAgbGFzdC1ub25tZW51LWV2ZW50KQogICAgICAoYm9va21hcmstbWVudS1wb3B1cC1wYW5l ZC1tZW51IHQgcHJvbXB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1h cGNhciAnYm9va21hcmstbmFtZS1mcm9tLWZ1bGwtcmVjb3JkCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoYm9va21hcmstbWF5YmUtc29ydC1hbGlzdCkpKQog ICAgKGxldCogKChjb21wbGV0aW9uLWlnbm9yZS1jYXNlIGJvb2ttYXJrLWNvbXBsZXRpb24taWdu b3JlLWNhc2UpCiAgICAgICAgICAgKGRlZmF1bHQgKHVubGVzcyAoZXF1YWwgIiIgZGVmYXVsdCkg ZGVmYXVsdCkpKQogICAgICAoY29tcGxldGluZy1yZWFkIChmb3JtYXQtcHJvbXB0IHByb21wdCBk ZWZhdWx0KQogICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKHN0cmluZyBwcmVkIGFjdGlv bikKICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoZXEgYWN0aW9uICdtZXRhZGF0YSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1ldGFkYXRhIChjYXRlZ29yeSAuIGJvb2ttYXJr KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcGxldGUtd2l0aC1hY3Rpb24KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uIGJvb2ttYXJrLWFsaXN0IHN0cmluZyBw cmVkKSkpCiAgICAgICAgICAgICAgICAgICAgICAgbmlsIDAgbmlsICdib29rbWFyay1oaXN0b3J5 IGRlZmF1bHQpKSkpCgoKKGRlZm1hY3JvIGJvb2ttYXJrLW1heWJlLWhpc3RvcmljaXplLXN0cmlu ZyAoc3RyaW5nKQogICJQdXQgU1RSSU5HIGludG8gdGhlIGJvb2ttYXJrIHByb21wdCBoaXN0b3J5 LCBpZiBjYWxsZXIgbm9uLWludGVyYWN0aXZlLgpXZSBuZWVkIHRoaXMgYmVjYXVzZSBzb21ldGlt ZXMgYm9va21hcmsgZnVuY3Rpb25zIGFyZSBpbnZva2VkCmZyb20gb3RoZXIgY29tbWFuZHMgdGhh dCBwYXNzIGluIHRoZSBib29rbWFyayBuYW1lLCBzbwpgY29tcGxldGluZy1yZWFkJyBuZXZlciBn ZXRzIGEgY2hhbmNlIHRvIHNldCBgYm9va21hcmstaGlzdG9yeScuIgogIGAob3IKICAgIChjYWxs ZWQtaW50ZXJhY3RpdmVseS1wICdpbnRlcmFjdGl2ZSkKICAgIChzZXRxIGJvb2ttYXJrLWhpc3Rv cnkgKGNvbnMgLHN0cmluZyBib29rbWFyay1oaXN0b3J5KSkpKQoKKGRlZnZhciBib29rbWFyay1t YWtlLXJlY29yZC1mdW5jdGlvbiAnYm9va21hcmstbWFrZS1yZWNvcmQtZGVmYXVsdAogICJBIGZ1 bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB0byBjcmVhdGUgYSBib29rbWFyayByZWNvcmQu Ck1vZGVzIG1heSBzZXQgdGhpcyB2YXJpYWJsZSBidWZmZXItbG9jYWxseSB0byBlbmFibGUgYm9v a21hcmtpbmcgb2YKbG9jYXRpb25zIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQgc3BlY2lhbGx5LCBz dWNoIGFzIEluZm8gbm9kZXMsCm5ld3MgcG9zdHMsIGltYWdlcywgcGRmIGRvY3VtZW50cywgZXRj LgoKVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLgpJdCBzaG91 bGQgc2lnbmFsIGEgdXNlciBlcnJvciBpZiBpdCBpcyB1bmFibGUgdG8gY29uc3RydWN0IGEgcmVj b3JkIGZvcgp0aGUgY3VycmVudCBsb2NhdGlvbi4KClRoZSByZXR1cm5lZCByZWNvcmQgc2hvdWxk IGJlIGEgY29ucyBjZWxsIG9mIHRoZSBmb3JtIChOQU1FIC4gQUxJU1QpCndoZXJlIEFMSVNUIGlz IGFzIGRlc2NyaWJlZCBpbiBgYm9va21hcmstYWxpc3QnIGFuZCBtYXkgdHlwaWNhbGx5IGNvbnRh aW4KYSBzcGVjaWFsIGNvbnMgKGhhbmRsZXIgLiBIQU5ETEVSLUZVTkMpIHdoaWNoIHNwZWNpZmll cyB0aGUgaGFuZGxlciBmdW5jdGlvbgp0aGF0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgYGJv b2ttYXJrLWRlZmF1bHQtaGFuZGxlcicgdG8gb3BlbiB0aGlzCmJvb2ttYXJrLiAgU2VlIHRoZSBk b2N1bWVudGF0aW9uIGZvciBgYm9va21hcmstYWxpc3QnIGZvciBtb3JlLgoKTkFNRSBpcyBhIHN1 Z2dlc3RlZCBuYW1lIGZvciB0aGUgY29uc3RydWN0ZWQgYm9va21hcmsuICBJdCBjYW4gYmUgbmls CmluIHdoaWNoIGNhc2UgYSBkZWZhdWx0IGhldXJpc3RpYyB3aWxsIGJlIHVzZWQuICBUaGUgZnVu Y3Rpb24gY2FuIGFsc28KZXF1aXZhbGVudGx5IGp1c3QgcmV0dXJuIEFMSVNUIHdpdGhvdXQgTkFN RS4iKQoKKGRlZnVuIGJvb2ttYXJrLW1ha2UtcmVjb3JkICgpCiAgIlJldHVybiBhIG5ldyBib29r bWFyayByZWNvcmQgKE5BTUUgLiBBTElTVCkgZm9yIHRoZSBjdXJyZW50IGxvY2F0aW9uLiIKICAo bGV0ICgocmVjb3JkIChmdW5jYWxsIGJvb2ttYXJrLW1ha2UtcmVjb3JkLWZ1bmN0aW9uKSkpCiAg ICA7OyBTZXQgdXAgZGVmYXVsdCBuYW1lIGlmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBwcm92aWRl IG9uZS4KICAgICh1bmxlc3MgKHN0cmluZ3AgKGNhciByZWNvcmQpKQogICAgICAoaWYgKGNhciBy ZWNvcmQpIChwdXNoIG5pbCByZWNvcmQpKQogICAgICAoc2V0Y2FyIHJlY29yZCAob3IgYm9va21h cmstY3VycmVudC1ib29rbWFyayAoYm9va21hcmstYnVmZmVyLW5hbWUpKSkpCiAgICA7OyBTZXQg dXAgZGVmYXVsdHMuCiAgICAoYm9va21hcmstcHJvcC1zZXQKICAgICByZWNvcmQgJ2RlZmF1bHRz CiAgICAgKGRlbHEgbmlsIChkZWxldGUtZHVwcyAoYXBwZW5kIChib29rbWFyay1wcm9wLWdldCBy ZWNvcmQgJ2RlZmF1bHRzKQoJCQkJICAgIChsaXN0IGJvb2ttYXJrLWN1cnJlbnQtYm9va21hcmsK CQkJCQkgIChjYXIgcmVjb3JkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoYm9va21hcmstYnVmZmVyLW5hbWUpKSkpKSkKICAgIHJlY29yZCkpCgooZGVmdW4gYm9v a21hcmstc3RvcmUgKG5hbWUgYWxpc3Qgbm8tb3ZlcndyaXRlKQogICJTdG9yZSB0aGUgYm9va21h cmsgTkFNRSB3aXRoIGRhdGEgQUxJU1QuCklmIE5PLU9WRVJXUklURSBpcyBub24tbmlsIGFuZCBh bm90aGVyIGJvb2ttYXJrIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeQpleGlzdHMgaW4gYGJvb2tt YXJrLWFsaXN0JywgcmVjb3JkIHRoZSBuZXcgYm9va21hcmsgd2l0aG91dCB0aHJvd2luZyBhd2F5 IHRoZQpvbGQgb25lLiIKICAoYm9va21hcmstbWF5YmUtbG9hZC1kZWZhdWx0LWZpbGUpCiAgKGxl dCAoKHN0cmlwcGVkLW5hbWUgKGNvcHktc2VxdWVuY2UgbmFtZSkpKQogICAgKHNldC10ZXh0LXBy b3BlcnRpZXMgMCAobGVuZ3RoIHN0cmlwcGVkLW5hbWUpIG5pbCBzdHJpcHBlZC1uYW1lKQogICAg KGlmIChhbmQgKG5vdCBuby1vdmVyd3JpdGUpCiAgICAgICAgICAgICAoYm9va21hcmstZ2V0LWJv b2ttYXJrIHN0cmlwcGVkLW5hbWUgJ25vZXJyb3IpKQogICAgICAgIDs7IEFscmVhZHkgZXhpc3Rp bmcgYm9va21hcmsgdW5kZXIgdGhhdCBuYW1lIGFuZAogICAgICAgIDs7IG5vIHByZWZpeCBhcmcg bWVhbnMganVzdCBvdmVyd3JpdGUgb2xkIGJvb2ttYXJrLgogICAgICAgIChsZXQgKChibSAoYm9v a21hcmstZ2V0LWJvb2ttYXJrIHN0cmlwcGVkLW5hbWUpKSkKICAgICAgICAgIDs7IEZpcnN0IGNs ZWFuIHVwIGlmIHByZXZpb3VzbHkgbG9jYXRpb24gd2FzIGZvbnRpZmllZC4KICAgICAgICAgICh3 aGVuIGJvb2ttYXJrLXNldC1mcmluZ2UtbWFyawogICAgICAgICAgICAoYm9va21hcmstLXJlbW92 ZS1mcmluZ2UtbWFyayBibSkpCiAgICAgICAgICA7OyBNb2RpZnkgdXNpbmcgdGhlIG5ldyAoTkFN RSAuIEFMSVNUKSBmb3JtYXQuCiAgICAgICAgICAoc2V0Y2RyIGJtIGFsaXN0KSkKCiAgICAgIDs7 IE90aGVyd2lzZSBqdXN0IHB1dCBpdCBvbnRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdC4gIEVpdGhl ciB0aGUKICAgICAgOzsgYm9va21hcmsgZG9lc24ndCBleGlzdCBhbHJlYWR5LCBvciB0aGVyZSBp cyBubyBwcmVmaXggYXJnLgogICAgICA7OyBJbiBlaXRoZXIgY2FzZSwgd2Ugd2FudCB0aGUgbmV3 IGJvb2ttYXJrIG9uIHRoZSBmcm9udCBvZiB0aGUKICAgICAgOzsgbGlzdCwgc2luY2UgdGhlIGxp c3QgaXMga2VwdCBpbiByZXZlcnNlIG9yZGVyIG9mIGNyZWF0aW9uLgogICAgICAocHVzaCAoY29u cyBzdHJpcHBlZC1uYW1lIGFsaXN0KSBib29rbWFyay1hbGlzdCkpCgogICAgOzsgQWRkZWQgYnkg ZGIKICAgIChzZXRxIGJvb2ttYXJrLWN1cnJlbnQtYm9va21hcmsgc3RyaXBwZWQtbmFtZSkKICAg IChzZXRxIGJvb2ttYXJrLWFsaXN0LW1vZGlmaWNhdGlvbi1jb3VudAogICAgICAgICAgKDErIGJv b2ttYXJrLWFsaXN0LW1vZGlmaWNhdGlvbi1jb3VudCkpCiAgICAoaWYgKGJvb2ttYXJrLXRpbWUt dG8tc2F2ZS1wKQogICAgICAgIChib29rbWFyay1zYXZlKSkKCiAgICAoc2V0cSBib29rbWFyay1j dXJyZW50LWJvb2ttYXJrIHN0cmlwcGVkLW5hbWUpCiAgICAoYm9va21hcmstYm1lbnUtc3VycmVw dGl0aW91c2x5LXJlYnVpbGQtbGlzdCkpKQoKKGRlZnVuIGJvb2ttYXJrLW1ha2UtcmVjb3JkLWRl ZmF1bHQgKCZvcHRpb25hbCBuby1maWxlIG5vLWNvbnRleHQgcG9zbikKICAiUmV0dXJuIHRoZSBy ZWNvcmQgZGVzY3JpYmluZyB0aGUgbG9jYXRpb24gb2YgYSBuZXcgYm9va21hcmsuClBvaW50IHNo b3VsZCBiZSBhdCB0aGUgYnVmZmVyIGluIHdoaWNoIHRoZSBib29rbWFyayBpcyBiZWluZyBzZXQs CmFuZCBub3JtYWxseSBzaG91bGQgYmUgYXQgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBib29rbWFy ayBpcyBkZXNpcmVkLApidXQgc2VlIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgZm9yIG90aGVyIHBv c3NpYmlsaXRpZXMuCgpJZiBOTy1GSUxFIGlzIG5vbi1uaWwsIHRoZW4gb25seSByZXR1cm4gdGhl IHN1YnNldCBvZiB0aGUKcmVjb3JkIHRoYXQgcGVydGFpbnMgdG8gdGhlIGxvY2F0aW9uIHdpdGhp biB0aGUgYnVmZmVyLCBsZWF2aW5nIG9mZgp0aGUgcGFydCB0aGF0IHJlY29yZHMgdGhlIGZpbGVu YW1lLgoKSWYgTk8tQ09OVEVYVCBpcyBub24tbmlsLCBkbyBub3QgaW5jbHVkZSB0aGUgZnJvbnQt IGFuZCByZWFyLWNvbnRleHQKc3RyaW5ncyBpbiB0aGUgcmVjb3JkIC0tIHRoZSBwb3NpdGlvbiBp cyBlbm91Z2guCgpJZiBQT1NOIGlzIG5vbi1uaWwsIHJlY29yZCBQT1NOIGFzIHRoZSBwb2ludCBp bnN0ZWFkIG9mIGAocG9pbnQpJy4iCiAgYCgsQCh1bmxlc3Mgbm8tZmlsZSBgKChmaWxlbmFtZSAu ICwoYm9va21hcmstYnVmZmVyLWZpbGUtbmFtZSkpKSkKICAgICxAKHVubGVzcyBuby1jb250ZXh0 IGAoKGZyb250LWNvbnRleHQtc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gLChp ZiAoPj0gKC0gKHBvaW50LW1heCkgKHBvaW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBib29rbWFyay1zZWFyY2gtc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCsgKHBvaW50KSBib29rbWFyay1zZWFyY2gtc2l6ZSkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuaWwpKSkpCiAgICAsQCh1bmxlc3Mgbm8tY29udGV4dCBgKChyZWFy LWNvbnRleHQtc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gLChpZiAoPj0gKC0g KHBvaW50KSAocG9pbnQtbWluKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBib29rbWFyay1zZWFyY2gtc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0g KHBvaW50KSBib29rbWFyay1zZWFyY2gtc2l6ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuaWwpKSkpCiAgICAocG9zaXRpb24gLiAsKG9yIHBvc24gKHBvaW50KSkpCiAgICAo bGFzdC1tb2RpZmllZCAuICwoY3VycmVudC10aW1lKSkpKQoKDAo7OzsgRmlsZSBmb3JtYXQgc3R1 ZmYKCjs7ICpJTVBPUlRBTlQgTk9USUNFKiBJZiB5b3UgYXJlIHRoaW5raW5nIGFib3V0IG1vZGlm eWluZyAocmVkZWZpbmluZykKOzsgdGhlIGJvb2ttYXJrIGZpbGUgZm9ybWF0IC0tIHBsZWFzZSBk b24ndC4gIFRoZSBjdXJyZW50IGZvcm1hdAo7OyBzaG91bGQgYmUgZXh0ZW5zaWJsZSBlbm91Z2gu ICBJZiB5b3UgZmVlbCB0aGUgbmVlZCB0byBjaGFuZ2UgaXQsCjs7IHBsZWFzZSBkaXNjdXNzIGl0 IHdpdGggb3RoZXIgRW1hY3MgZGV2ZWxvcGVycyBmaXJzdC4KOzsKOzsgVGhlIGZvcm1hdCBvZiBg Ym9va21hcmstYWxpc3QnIGhhcyBjaGFuZ2VkIHR3aWNlIGluIGl0cyBsaWZldGltZS4KOzsgVGhp cyBjb21tZW50IGRlc2NyaWJlcyB0aGUgdGhyZWUgZm9ybWF0cywgRklSU1QsIFNFQ09ORCwgYW5k Cjs7IENVUlJFTlQuCjs7Cjs7IFRoZSBGSVJTVCBmb3JtYXQgd2FzIHVzZWQgcHJpb3IgdG8gRW1h Y3MgMjA6Cjs7Cjs7ICAgICAgICgoQk9PS01BUkstTkFNRSAoRklMRU5BTUUKOzsgICAgICAgICAg ICAgICAgICAgICAgICAgIFNUUklORy1JTi1GUk9OVAo7OyAgICAgICAgICAgICAgICAgICAgICAg ICAgU1RSSU5HLUJFSElORAo7OyAgICAgICAgICAgICAgICAgICAgICAgICAgUE9JTlQpKQo7OyAg ICAgICAgLi4uKQo7Owo7OyBUaGUgU0VDT05EIGZvcm1hdCB3YXMgaW50cm9kdWNlZCBpbiBFbWFj cyAyMDoKOzsKOzsgICAgICAgKChCT09LTUFSSy1OQU1FICgoZmlsZW5hbWUgICAuIEZJTEVOQU1F KQo7OyAgICAgICAgICAgICAgICAgICAgICAgIChwb3NpdGlvbiAgIC4gUE9TKQo7OyAgICAgICAg ICAgICAgICAgICAgICAgIChmcm9udC1jb250ZXh0LXN0cmluZyAuIFNUUi1BRlRFUi1QT1MpCjs7 ICAgICAgICAgICAgICAgICAgICAgICAgKHJlYXItY29udGV4dC1zdHJpbmcgIC4gU1RSLUJFRk9S RS1QT1MpCjs7ICAgICAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24gLiBBTk5PVEFUSU9O KQo7OyAgICAgICAgICAgICAgICAgICAgICAgICh3aGF0ZXZlciAgIC4gVkFMVUUpCjs7ICAgICAg ICAgICAgICAgICAgICAgICAgLi4uCjs7ICAgICAgICAgICAgICAgICAgICAgICApKQo7OyAgICAg ICAgLi4uKQo7Owo7OyBUaGUgQ1VSUkVOVCBmb3JtYXQgd2FzIGludHJvZHVjZWQgaW4gRW1hY3Mg MjI6Cjs7Cjs7ICAgICAgICgoQk9PS01BUkstTkFNRSAoZmlsZW5hbWUgICAuIEZJTEVOQU1FKQo7 OyAgICAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uICAgLiBQT1MpCjs7ICAgICAgICAgICAg ICAgICAgICAgICAoZnJvbnQtY29udGV4dC1zdHJpbmcgLiBTVFItQUZURVItUE9TKQo7OyAgICAg ICAgICAgICAgICAgICAgICAgKHJlYXItY29udGV4dC1zdHJpbmcgIC4gU1RSLUJFRk9SRS1QT1Mp Cjs7ICAgICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbiAuIEFOTk9UQVRJT04pCjs7ICAg ICAgICAgICAgICAgICAgICAgICAod2hhdGV2ZXIgICAuIFZBTFVFKQo7OyAgICAgICAgICAgICAg ICAgICAgICAgLi4uCjs7ICAgICAgICAgICAgICAgICAgICAgICApCjs7ICAgICAgICAuLi4pCjs7 Cjs7IEJvdGggRklSU1QgYW5kIFNFQ09ORCBoYXZlIHRoZSBzYW1lIGxldmVsIG9mIG5lc3Rpbmc6 IHRoZSBjYWRyIG9mIGEKOzsgYm9va21hcmsgcmVjb3JkIGlzIGEgbGlzdCBvZiBlbnRyeSBpbmZv cm1hdGlvbi4gIEZJUlNUIGFuZCBTRUNPTkQKOzsgZGlmZmVyIGluIHRoZSBmb3JtIG9mIHRoZSBy ZWNvcmQgaW5mb3JtYXRpb246IEZJUlNUIHVzZXMgYSBsaXN0IG9mCjs7IGF0b21zLCBhbmQgU0VD T05EIHVzZXMgYW4gYWxpc3QuICBJbiB0aGUgRklSU1QgZm9ybWF0LCB0aGUgb3JkZXIgb2YKOzsg dGhlIGxpc3QgZWxlbWVudHMgbWF0dGVycy4gIEluIHRoZSBTRUNPTkQgZm9ybWF0LCB0aGUgb3Jk ZXIgb2YgdGhlCjs7IGFsaXN0IGVsZW1lbnRzIGlzIHVuaW1wb3J0YW50LiAgVGhlIFNFQ09ORCBm b3JtYXQgZmFjaWxpdGF0ZXMgdGhlCjs7IGFkZGl0aW9uIG9mIG5ldyBraW5kcyBvZiBlbGVtZW50 cywgdG8gc3VwcG9ydCBuZXcga2luZHMgb2YKOzsgYm9va21hcmtzIG9yIGNvZGUgZXZvbHV0aW9u Lgo7Owo7OyBUaGUgQ1VSUkVOVCBmb3JtYXQgcmVtb3ZlcyBhIGxldmVsIG9mIG5lc3Rpbmcgd3J0 IEZJUlNUIGFuZCBTRUNPTkQsCjs7IHNhdmluZyBvbmUgY29ucyBjZWxsIHBlciBib29rbWFyazog dGhlIGNhZHIgb2YgYSBib29rbWFyayByZWNvcmQgaXMKOzsgbm8gbG9uZ2VyIGEgY29ucy4gIFdo eSB0aGF0IGNoYW5nZSB3YXMgbWFkZSByZW1haW5zIGEgbXlzdGVyeSAtLQo7OyBqdXN0IGJlIGF3 YXJlIG9mIGl0LiAgKEJlIGF3YXJlIHRvbyB0aGF0IHRoaXMgZXhwbGFuYXRvcnkgY29tbWVudAo7 OyB3YXMgaW5jb3JyZWN0IGluIEVtYWNzIDIyIGFuZCBFbWFjcyAyMy4xLikKOzsKOzsgVG8gZGVh bCB3aXRoIHRoZSBjaGFuZ2UgZnJvbSBGSVJTVCBmb3JtYXQgdG8gU0VDT05ELCBjb252ZXJzaW9u Cjs7IGNvZGUgd2FzIGFkZGVkLCB3aGljaCBpcyBubyBsb25nZXIgdXNlZCBhbmQgaGFzIGJlZW4g ZGVjbGFyZWQKOzsgb2Jzb2xldGUuICBTZWUgYGJvb2ttYXJrLW1heWJlLXVwZ3JhZGUtZmlsZS1m b3JtYXQnLgo7Owo7OyBObyBjb252ZXJzaW9uIGZyb20gU0VDT05EIHRvIENVUlJFTlQgaXMgZG9u ZS4gIEluc3RlYWQsIHRoZSBjb2RlCjs7IGhhbmRsZXMgYm90aCBmb3JtYXRzIE9LLiAgSXQgbXVz dCBjb250aW51ZSB0byBkbyBzby4KOzsKOzsgU2VlIHRoZSBkb2Mgc3RyaW5nIG9mIGBib29rbWFy ay1hbGlzdCcgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZQo7OyBlbGVtZW50cyB0aGF0IGRlZmlu ZSBhIGJvb2ttYXJrIChlLmcuIGBmaWxlbmFtZScpLgoKCihkZWZjb25zdCBib29rbWFyay1maWxl LWZvcm1hdC12ZXJzaW9uIDEKICAiVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZm9ybWF0IHVz ZWQgYnkgYm9va21hcmsgZmlsZXMuCllvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBjaGFuZ2UgdGhp cy4iKQoKCihkZWZjb25zdCBib29rbWFyay1lbmQtb2YtdmVyc2lvbi1zdGFtcC1tYXJrZXIKICAi LSotIEVuZCBPZiBCb29rbWFyayBGaWxlIEZvcm1hdCBWZXJzaW9uIFN0YW1wIC0qLVxuIgogICJU aGlzIHN0cmluZyBtYXJrcyB0aGUgZW5kIG9mIHRoZSB2ZXJzaW9uIHN0YW1wIGluIGEgYm9va21h cmsgZmlsZS4iKQoKCihkZWZ1biBib29rbWFyay1hbGlzdC1mcm9tLWJ1ZmZlciAoKQogICJSZXR1 cm4gYSBgYm9va21hcmstYWxpc3QnIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyLgpUaGUgYnVmZmVy IG11c3Qgb2YgY291cnNlIGNvbnRhaW4gYm9va21hcmsgZm9ybWF0IGluZm9ybWF0aW9uLgpEb2Vz IG5vdCBjYXJlIGZyb20gd2hlcmUgaW4gdGhlIGJ1ZmZlciBpdCBpcyBjYWxsZWQsIGFuZCBkb2Vz IG5vdAphZmZlY3QgcG9pbnQuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGdvdG8tY2hhciAocG9p bnQtbWluKSkKICAgIChpZiAoc2VhcmNoLWZvcndhcmQgYm9va21hcmstZW5kLW9mLXZlcnNpb24t c3RhbXAtbWFya2VyIG5pbCB0KQogICAgICAgIChyZWFkIChjdXJyZW50LWJ1ZmZlcikpCiAgICAg IChpZiBidWZmZXItZmlsZS1uYW1lCiAgICAgICAgICAoZXJyb3IgIkZpbGUgbm90IGluIGJvb2tt YXJrIGZvcm1hdDogJXMiIGJ1ZmZlci1maWxlLW5hbWUpCiAgICAgICAgKGVycm9yICJCdWZmZXIg bm90IGluIGJvb2ttYXJrIGZvcm1hdDogJXMiIChidWZmZXItbmFtZSkpKSkpKQoKKGRlZnVuIGJv b2ttYXJrLXVwZ3JhZGUtdmVyc2lvbi0wLWFsaXN0IChvbGQtbGlzdCkKICAiVXBncmFkZSBhIHZl cnNpb24gMCBhbGlzdCBPTEQtTElTVCB0byB0aGUgY3VycmVudCB2ZXJzaW9uLiIKICAoZGVjbGFy ZSAob2Jzb2xldGUgbmlsICIyNy4xIikpCiAgKG1hcGNhcgogICAobGFtYmRhIChib29rbWFyaykK ICAgICAobGV0KiAoKG5hbWUgICAgICAoY2FyIGJvb2ttYXJrKSkKICAgICAgICAgICAgKHJlY29y ZCAgICAoY2FyIChjZHIgYm9va21hcmspKSkKICAgICAgICAgICAgKGZpbGVuYW1lICAobnRoIDAg cmVjb3JkKSkKICAgICAgICAgICAgKGZyb250LXN0ciAobnRoIDEgcmVjb3JkKSkKICAgICAgICAg ICAgKHJlYXItc3RyICAobnRoIDIgcmVjb3JkKSkKICAgICAgICAgICAgKHBvc2l0aW9uICAobnRo IDMgcmVjb3JkKSkKICAgICAgICAgICAgKGFubiAgICAgICAobnRoIDQgcmVjb3JkKSkpCiAgICAg ICAobGlzdAogICAgICAgIG5hbWUKICAgICAgICBgKChmaWxlbmFtZSAgICAgICAgICAgICAuICAg ICxmaWxlbmFtZSkKICAgICAgICAgIChmcm9udC1jb250ZXh0LXN0cmluZyAuICAgICwob3IgZnJv bnQtc3RyICIiKSkKICAgICAgICAgIChyZWFyLWNvbnRleHQtc3RyaW5nICAuICAgICwob3IgcmVh ci1zdHIgICIiKSkKICAgICAgICAgIChwb3NpdGlvbiAgICAgICAgICAgICAuICAgICxwb3NpdGlv bikKICAgICAgICAgIChhbm5vdGF0aW9uICAgICAgICAgICAuICAgICxhbm4pKSkpKQogICBvbGQt bGlzdCkpCgoKKGRlZnVuIGJvb2ttYXJrLXVwZ3JhZGUtZmlsZS1mb3JtYXQtZnJvbS0wICgpCiAg IlVwZ3JhZGUgYSBib29rbWFyayBmaWxlIG9mIGZvcm1hdCAwICh0aGUgb3JpZ2luYWwgZm9ybWF0 KSB0byBmb3JtYXQgMS4KVGhpcyBleHBlY3RzIHRvIGJlIGNhbGxlZCBmcm9tIGBwb2ludC1taW4n IGluIGEgYm9va21hcmsgZmlsZS4iCiAgKGRlY2xhcmUgKG9ic29sZXRlIG5pbCAiMjcuMSIpKQog IChsZXQqICgocmVwb3J0ZXIgKG1ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXIKICAgICAgICAgICAgICAg ICAgICAoZm9ybWF0ICJVcGdyYWRpbmcgYm9va21hcmsgZm9ybWF0IGZyb20gMCB0byAlZC4uLiIK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2ttYXJrLWZpbGUtZm9ybWF0LXZlcnNpb24p KSkKICAgICAgICAgKG9sZC1saXN0IChib29rbWFyay1hbGlzdC1mcm9tLWJ1ZmZlcikpCiAgICAg ICAgIChuZXctbGlzdCAod2l0aC1zdXBwcmVzc2VkLXdhcm5pbmdzCiAgICAgICAgICAgICAgICAg ICAgICAgKChvYnNvbGV0ZSBib29rbWFyay11cGdyYWRlLXZlcnNpb24tMC1hbGlzdCkpCiAgICAg ICAgICAgICAgICAgICAgIChib29rbWFyay11cGdyYWRlLXZlcnNpb24tMC1hbGlzdCBvbGQtbGlz dCkpKSkKICAgIChkZWxldGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQogICAgKGJv b2ttYXJrLWluc2VydC1maWxlLWZvcm1hdC12ZXJzaW9uLXN0YW1wIGJ1ZmZlci1maWxlLWNvZGlu Zy1zeXN0ZW0pCiAgICAocHAgbmV3LWxpc3QgKGN1cnJlbnQtYnVmZmVyKSkKICAgIChzYXZlLWJ1 ZmZlcikKICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAocHJvZ3Jlc3MtcmVwb3J0ZXIt ZG9uZSByZXBvcnRlcikpKQoKCihkZWZ1biBib29rbWFyay1ncm9rLWZpbGUtZm9ybWF0LXZlcnNp b24gKCkKICAiUmV0dXJuIGFuIGludGVnZXIgd2hpY2ggaXMgdGhlIGZpbGUtZm9ybWF0IHZlcnNp b24gb2YgdGhpcyBib29rbWFyayBmaWxlLgpUaGlzIGV4cGVjdHMgdG8gYmUgY2FsbGVkIGZyb20g YHBvaW50LW1pbicgaW4gYSBib29rbWFyayBmaWxlLiIKICAoZGVjbGFyZSAob2Jzb2xldGUgbmls ICIyNy4xIikpCiAgKGlmIChsb29raW5nLWF0ICJeOzs7OyIpCiAgICAgIChzYXZlLWV4Y3Vyc2lv bgogICAgICAgIChzYXZlLW1hdGNoLWRhdGEKICAgICAgICAgIChyZS1zZWFyY2gtZm9yd2FyZCAi WzAtOV0iKQogICAgICAgICAgKGZvcndhcmQtY2hhciAtMSkKICAgICAgICAgIChyZWFkIChjdXJy ZW50LWJ1ZmZlcikpKSkKICAgIDs7IEVsc2UgdGhpcyBpcyBmb3JtYXQgdmVyc2lvbiAwLCB0aGUg b3JpZ2luYWwgb25lLCB3aGljaCBkaWRuJ3QKICAgIDs7IGV2ZW4gaGF2ZSB2ZXJzaW9uIHN0YW1w cy4KICAgIDApKQoKCihkZWZ1biBib29rbWFyay1tYXliZS11cGdyYWRlLWZpbGUtZm9ybWF0ICgp CiAgIkNoZWNrIHRoZSBmaWxlLWZvcm1hdCB2ZXJzaW9uIG9mIHRoaXMgYm9va21hcmsgZmlsZS4K SWYgdGhlIHZlcnNpb24gaXMgbm90IHVwLXRvLWRhdGUsIHVwZ3JhZGUgaXQgYXV0b21hdGljYWxs eS4KVGhpcyBleHBlY3RzIHRvIGJlIGNhbGxlZCBmcm9tIGBwb2ludC1taW4nIGluIGEgYm9va21h cmsgZmlsZS4iCiAgKGRlY2xhcmUgKG9ic29sZXRlIG5pbCAiMjcuMSIpKQogIChsZXQgKCh2ZXJz aW9uCiAgICAgICAgICh3aXRoLXN1cHByZXNzZWQtd2FybmluZ3MKICAgICAgICAgICAgICgob2Jz b2xldGUgYm9va21hcmstZ3Jvay1maWxlLWZvcm1hdC12ZXJzaW9uKSkKICAgICAgICAgICAoYm9v a21hcmstZ3Jvay1maWxlLWZvcm1hdC12ZXJzaW9uKSkpKQogICAgKGNvbmQKICAgICAoKD0gdmVy c2lvbiBib29rbWFyay1maWxlLWZvcm1hdC12ZXJzaW9uKQogICAgICApIDsgaG9tZSBmcmVlIC0t IHZlcnNpb24gaXMgY3VycmVudAogICAgICgoPSB2ZXJzaW9uIDApCiAgICAgICh3aXRoLXN1cHBy ZXNzZWQtd2FybmluZ3MKICAgICAgICAgICgob2Jzb2xldGUgYm9va21hcmstdXBncmFkZS1maWxl LWZvcm1hdC1mcm9tLTApKQogICAgICAgIChib29rbWFyay11cGdyYWRlLWZpbGUtZm9ybWF0LWZy b20tMCkpKQogICAgICh0CiAgICAgIChlcnJvciAiQm9va21hcmsgZmlsZSBmb3JtYXQgdmVyc2lv biBzdHJhbmdlbmVzcyIpKSkpKQoKCihkZWZ1biBib29rbWFyay1pbnNlcnQtZmlsZS1mb3JtYXQt dmVyc2lvbi1zdGFtcCAoY29kaW5nKQogICJJbnNlcnQgdGV4dCBpbmRpY2F0aW5nIGN1cnJlbnQg dmVyc2lvbiBvZiBib29rbWFyayBmaWxlIGZvcm1hdC4KQ09ESU5HIGlzIHRoZSBzeW1ib2wgb2Yg dGhlIGNvZGluZy1zeXN0ZW0gaW4gd2hpY2ggdGhlIGZpbGUgaXMgZW5jb2RlZC4iCiAgKGlmICht ZW1xIChjb2Rpbmctc3lzdGVtLWJhc2UgY29kaW5nKSAnKHVuZGVjaWRlZCBwcmVmZXItdXRmLTgp KQogICAgICAoc2V0cSBjb2RpbmcgJ3V0Zi04LWVtYWNzKSkKICAoaW5zZXJ0CiAgIChmb3JtYXQK ICAgICI7Ozs7IEVtYWNzIEJvb2ttYXJrIEZvcm1hdCBWZXJzaW9uICVkXAo7Ozs7IC0qLSBjb2Rp bmc6ICVTOyBtb2RlOiBsaXNwLWRhdGEgLSotXG4iCiAgICBib29rbWFyay1maWxlLWZvcm1hdC12 ZXJzaW9uIChjb2Rpbmctc3lzdGVtLWJhc2UgY29kaW5nKSkpCiAgKGluc2VydCAiOzs7IFRoaXMg Zm9ybWF0IGlzIG1lYW50IHRvIGJlIHNsaWdodGx5IGh1bWFuLXJlYWRhYmxlO1xuIgogICAgICAg ICAgIjs7OyBuZXZlcnRoZWxlc3MsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGVkaXQgaXQu XG4iCiAgICAgICAgICAiOzs7ICIKICAgICAgICAgIGJvb2ttYXJrLWVuZC1vZi12ZXJzaW9uLXN0 YW1wLW1hcmtlcikpCgoKOzs7IGVuZCBmaWxlLWZvcm1hdCBzdHVmZgoKDAo7OzsgQ29yZSBjb2Rl OgoKKGRlZmluZS1vYnNvbGV0ZS1mdW5jdGlvbi1hbGlhcyAnYm9va21hcmstbWF5YmUtbWVzc2Fn ZSAnbWVzc2FnZSAiMjcuMSIpCgooZGVmdmFyLWtleW1hcCBib29rbWFyay1taW5pYnVmZmVyLXJl YWQtbmFtZS1tYXAKICA6cGFyZW50IG1pbmlidWZmZXItbG9jYWwtbWFwCiAgIkMtdyIgIydib29r bWFyay15YW5rLXdvcmQpCgooZGVmdW4gYm9va21hcmstc2V0LWludGVybmFsIChwcm9tcHQgbmFt ZSBvdmVyd3JpdGUtb3ItcHVzaCkKICAiU2V0IGEgYm9va21hcmsgdXNpbmcgc3BlY2lmaWVkIE5B TUUgb3IgcHJvbXB0aW5nIHdpdGggUFJPTVBULgpUaGUgYm9va21hcmsgaXMgc2V0IGF0IHRoZSBj dXJyZW50IGxvY2F0aW9uLgoKSWYgTkFNRSBpcyBub24tbmlsLCB1c2UgaXQgYXMgdGhlIG5hbWUg b2YgdGhlIG5ldyBib29rbWFyay4gIEluCnRoaXMgY2FzZSwgdGhlIHZhbHVlIG9mIFBST01QVCBp cyBpZ25vcmVkLgoKT3RoZXJ3aXNlLCBwcm9tcHQgdGhlIHVzZXIgZm9yIHRoZSBib29rbWFyayBu YW1lLiAgQmVnaW4gdGhlCmludGVyYWN0aXZlIHByb21wdCB3aXRoIFBST01QVCwgZm9sbG93ZWQg YnkgYSBzcGFjZSwgYSBnZW5lcmF0ZWQKZGVmYXVsdCBuYW1lIGluIHBhcmVudGhlc2VzLCBhIGNv bG9uIGFuZCBhIHNwYWNlLgoKT1ZFUldSSVRFLU9SLVBVU0ggY29udHJvbHMgd2hhdCBoYXBwZW5z IGlmIHRoZXJlIGlzIGFscmVhZHkgYQpib29rbWFyayB3aXRoIHRoZSBzYW1lIG5hbWU6IG5pbCBt ZWFucyBzaWduYWwgYW4gZXJyb3I7CmBvdmVyd3JpdGUnIG1lYW5zIHJlcGxhY2UgYW55IGV4aXN0 aW5nIGJvb2ttYXJrOyBgcHVzaCcgbWVhbnMKcHVzaCB0aGUgbmV3IGJvb2ttYXJrIG9udG8gdGhl IGJvb2ttYXJrIGFsaXN0LiAgVGhlIGBwdXNoJwpiZWhhdmlvciBtZWFucyB0aGF0IGFtb25nIGJv b2ttYXJrcyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoaXMgbW9zdApyZWNlbnRseSBzZXQgb25lIGJl Y29tZXMgdGhlIG9uZSBpbiBlZmZlY3QsIGJ1dCB0aGUgb3RoZXJzIGFyZQpzdGlsbCB0aGVyZSwg aW4gb3JkZXIsIGlmIHRoZSB0b3Btb3N0IG9uZSBpcyBldmVyIGRlbGV0ZWQuIgogICh1bndpbmQt cHJvdGVjdAogICAgICAgKGxldCogKChyZWNvcmQgKGJvb2ttYXJrLW1ha2UtcmVjb3JkKSkKICAg ICAgICAgICAgICA7OyBgZGVmYXVsdHMnIGlzIGEgdHJhbnNpZW50IGVsZW1lbnQgb2YgdGhlCiAg ICAgICAgICAgICAgOzsgZXh0ZW5zaWJsZSBmb3JtYXQgZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBz ZWN0aW9uCiAgICAgICAgICAgICAgOzsgYEZpbGUgZm9ybWF0IHN0dWZmJy4gIEJvb2ttYXJrIHJl Y29yZCBmdW5jdGlvbnMKICAgICAgICAgICAgICA7OyBjYW4gdXNlIGl0IHRvIHNwZWNpZnkgYSBs aXN0IG9mIGRlZmF1bHQgdmFsdWVzCiAgICAgICAgICAgICAgOzsgYWNjZXNzaWJsZSB2aWEgTS1u IHdoaWxlIHJlYWRpbmcgYSBib29rbWFyayBuYW1lLgogICAgICAgICAgICAgIChkZWZhdWx0cyAo Ym9va21hcmstcHJvcC1nZXQgcmVjb3JkICdkZWZhdWx0cykpCiAgICAgICAgICAgICAgKGRlZmF1 bHQgKGlmIChjb25zcCBkZWZhdWx0cykgKGNhciBkZWZhdWx0cykgZGVmYXVsdHMpKSkKCiAgICAg ICAgIChpZiBkZWZhdWx0cwogICAgICAgICAgICAgOzsgRG9uJ3Qgc3RvcmUgZGVmYXVsdCB2YWx1 ZXMgaW4gdGhlIHJlY29yZC4KICAgICAgICAgICAgIChzZXRxIHJlY29yZCAoYXNzcS1kZWxldGUt YWxsICdkZWZhdWx0cyByZWNvcmQpKQogICAgICAgICAgIDs7IFdoZW4gbm8gZGVmYXVsdHMgaW4g dGhlIHJlY29yZCwgdXNlIGl0cyBmaXJzdCBlbGVtZW50LgogICAgICAgICAgIChzZXRxIGRlZmF1 bHRzIChjYXIgcmVjb3JkKSBkZWZhdWx0IGRlZmF1bHRzKSkKCiAgICAgICAgIChib29rbWFyay1t YXliZS1sb2FkLWRlZmF1bHQtZmlsZSkKICAgICAgICAgOzsgRG9uJ3Qgc2V0IGBib29rbWFyay15 YW5rLXBvaW50JyBhbmQgYGJvb2ttYXJrLWN1cnJlbnQtYnVmZmVyJwogICAgICAgICA7OyBpZiB0 aGV5IGhhdmUgYmVlbiBhbHJlYWR5IHNldCBpbiBhbm90aGVyIGJ1ZmZlci4gKGUuZyBnbnVzLWFy dCkuCiAgICAgICAgICh1bmxlc3MgKGFuZCBib29rbWFyay15YW5rLXBvaW50CiAgICAgICAgICAg ICAgICAgICAgICBib29rbWFyay1jdXJyZW50LWJ1ZmZlcikKICAgICAgICAgICAoc2V0cSBib29r bWFyay15YW5rLXBvaW50IChwb2ludCkpCiAgICAgICAgICAgKHNldHEgYm9va21hcmstY3VycmVu dC1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkpCgogICAgICAgICAobGV0ICgoc3RyCiAgICAgICAg ICAgICAgICAob3IgbmFtZQogICAgICAgICAgICAgICAgICAgIChyZWFkLWZyb20tbWluaWJ1ZmZl cgogICAgICAgICAgICAgICAgICAgICAoZm9ybWF0LXByb21wdCBwcm9tcHQgZGVmYXVsdCkKICAg ICAgICAgICAgICAgICAgICAgbmlsCiAgICAgICAgICAgICAgICAgICAgIGJvb2ttYXJrLW1pbmli dWZmZXItcmVhZC1uYW1lLW1hcAogICAgICAgICAgICAgICAgICAgICBuaWwgbmlsIGRlZmF1bHRz KSkpKQogICAgICAgICAgIChhbmQgKHN0cmluZy1lcXVhbCBzdHIgIiIpIChzZXRxIHN0ciBkZWZh dWx0KSkKCiAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgKChlcSBvdmVyd3JpdGUtb3ItcHVz aCBuaWwpCiAgICAgICAgICAgICAoaWYgKGJvb2ttYXJrLWdldC1ib29rbWFyayBzdHIgdCkKICAg ICAgICAgICAgICAgICAoZXJyb3IgIkEgYm9va21hcmsgbmFtZWQgXCIlc1wiIGFscmVhZHkgZXhp c3RzIiBzdHIpCiAgICAgICAgICAgICAgIChib29rbWFyay1zdG9yZSBzdHIgKGNkciByZWNvcmQp IG5pbCkpKQogICAgICAgICAgICAoKGVxIG92ZXJ3cml0ZS1vci1wdXNoICdvdmVyd3JpdGUpCiAg ICAgICAgICAgICAoYm9va21hcmstc3RvcmUgc3RyIChjZHIgcmVjb3JkKSBuaWwpKQogICAgICAg ICAgICAoKGVxIG92ZXJ3cml0ZS1vci1wdXNoICdwdXNoKQogICAgICAgICAgICAgKGJvb2ttYXJr LXN0b3JlIHN0ciAoY2RyIHJlY29yZCkgdCkpCiAgICAgICAgICAgICh0CiAgICAgICAgICAgICAo ZXJyb3IgIlVucmVjb2duaXplZCB2YWx1ZSBmb3IgYG92ZXJ3cml0ZS1vci1wdXNoJzogJVMiCiAg ICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlLW9yLXB1c2gpKSkKCiAgICAgICAgICAgOzsgQXNr IGZvciBhbiBhbm5vdGF0aW9uIGJ1ZmZlciBmb3IgdGhpcyBib29rbWFyawogICAgICAgICAgICh3 aGVuIGJvb2ttYXJrLXVzZS1hbm5vdGF0aW9ucwogICAgICAgICAgICAgKGJvb2ttYXJrLWVkaXQt YW5ub3RhdGlvbiBzdHIpKQogICAgICAgICAgICh3aGVuIGJvb2ttYXJrLXNldC1mcmluZ2UtbWFy awogICAgICAgICAgICAgKGJvb2ttYXJrLS1zZXQtZnJpbmdlLW1hcmspKSkpCiAgICAoc2V0cSBi b29rbWFyay15YW5rLXBvaW50IG5pbCkKICAgIChzZXRxIGJvb2ttYXJrLWN1cnJlbnQtYnVmZmVy IG5pbCkpKQoKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBib29rbWFyay1zZXQgKCZvcHRpb25hbCBu YW1lIG5vLW92ZXJ3cml0ZSkKICAiU2V0IGEgYm9va21hcmsgbmFtZWQgTkFNRSBhdCB0aGUgY3Vy cmVudCBsb2NhdGlvbi4KSWYgTkFNRSBpcyBuaWwsIHRoZW4gcHJvbXB0IHRoZSB1c2VyLgoKV2l0 aCBhIHByZWZpeCBhcmcgKG5vbi1uaWwgTk8tT1ZFUldSSVRFKSwgZG8gbm90IG92ZXJ3cml0ZSBh bnkKZXhpc3RpbmcgYm9va21hcmsgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBOQU1FLCBidXQg aW5zdGVhZCBwdXNoIHRoZQpuZXcgYm9va21hcmsgb250byB0aGUgYm9va21hcmsgYWxpc3QuICBU aGUgbW9zdCByZWNlbnRseSBzZXQgYm9va21hcmsKd2l0aCBuYW1lIE5BTUUgaXMgdGh1cyB0aGUg b25lIGluIGVmZmVjdCBhdCBhbnkgZ2l2ZW4gdGltZSwgYnV0IHRoZQpvdGhlcnMgYXJlIHN0aWxs IHRoZXJlLCBzaG91bGQgdGhlIHVzZXIgZGVjaWRlIHRvIGRlbGV0ZSB0aGUgbW9zdApyZWNlbnQg b25lLgoKVG8geWFuayB3b3JkcyBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBidWZmZXIgYW5kIHVzZSB0 aGVtIGFzIHBhcnQgb2YgdGhlCmJvb2ttYXJrIG5hbWUsIHR5cGUgXFw8Ym9va21hcmstbWluaWJ1 ZmZlci1yZWFkLW5hbWUtbWFwPlwKXFxbYm9va21hcmsteWFuay13b3JkXSB3aGlsZSBzZXR0aW5n IGEgYm9va21hcmsuICBTdWNjZXNzaXZlIFwKXFxbYm9va21hcmsteWFuay13b3JkXSdzCnlhbmsg c3VjY2Vzc2l2ZSB3b3Jkcy4KClR5cGluZyBcXFt1bml2ZXJzYWwtYXJndW1lbnRdIGluc2VydHMg KGF0IHRoZSBib29rbWFyayBuYW1lIHByb21wdCkgdGhlIG5hbWUgb2YgdGhlIGxhc3QKYm9va21h cmsgdXNlZCBpbiB0aGUgZG9jdW1lbnQgd2hlcmUgdGhlIG5ldyBib29rbWFyayBpcyBiZWluZyBz ZXQ7CnRoaXMgaGVscHMgeW91IHVzZSBhIHNpbmdsZSBib29rbWFyayBuYW1lIHRvIHRyYWNrIHBy b2dyZXNzIHRocm91Z2ggYQpsYXJnZSBkb2N1bWVudC4gIElmIHRoZXJlIGlzIG5vIHByaW9yIGJv b2ttYXJrIGZvciB0aGlzIGRvY3VtZW50LCB0aGVuClxcW3VuaXZlcnNhbC1hcmd1bWVudF0gaW5z ZXJ0cyBhbiBhcHByb3ByaWF0ZSBuYW1lIGJhc2VkIG9uIHRoZSBidWZmZXIgb3IgZmlsZS4KClVz ZSBcXFtib29rbWFyay1kZWxldGVdIHRvIHJlbW92ZSBib29rbWFya3MgKHlvdSBnaXZlIGl0IGEg bmFtZSBhbmQKaXQgcmVtb3ZlcyBvbmx5IHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhIGJvb2ttYXJr IHdpdGggdGhhdCBuYW1lIGZyb20KdGhlIGxpc3Qgb2YgYm9va21hcmtzLikiCiAgKGludGVyYWN0 aXZlIChsaXN0IG5pbCBjdXJyZW50LXByZWZpeC1hcmcpKQogIChsZXQgKChwcm9tcHQKICAgICAg ICAgKGlmIG5vLW92ZXJ3cml0ZSAiQXBwZW5kIGJvb2ttYXJrIG5hbWVkIiAiU2V0IGJvb2ttYXJr IG5hbWVkIikpKQogICAgKGJvb2ttYXJrLXNldC1pbnRlcm5hbCBwcm9tcHQgbmFtZSAoaWYgbm8t b3ZlcndyaXRlICdwdXNoICdvdmVyd3JpdGUpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gYm9v a21hcmstc2V0LW5vLW92ZXJ3cml0ZSAoJm9wdGlvbmFsIG5hbWUgcHVzaC1ib29rbWFyaykKICAi U2V0IGEgYm9va21hcmsgbmFtZWQgTkFNRSBhdCB0aGUgY3VycmVudCBsb2NhdGlvbi4KSWYgTkFN RSBpcyBuaWwsIHRoZW4gcHJvbXB0IHRoZSB1c2VyLgoKSWYgYSBib29rbWFyayBuYW1lZCBOQU1F IGFscmVhZHkgZXhpc3RzIGFuZCBwcmVmaXggYXJndW1lbnQKUFVTSC1CT09LTUFSSyBpcyBub24t bmlsLCB0aGVuIHB1c2ggdGhlIG5ldyBib29rbWFyayBvbnRvIHRoZQpib29rbWFyayBhbGlzdC4g IFB1c2hpbmcgaXQgbWVhbnMgdGhhdCBhbW9uZyBib29rbWFya3MgbmFtZWQKTkFNRSwgdGhpcyBv bmUgYmVjb21lcyB0aGUgb25lIGluIGVmZmVjdCwgYnV0IHRoZSBvdGhlcnMgYXJlCnN0aWxsIHRo ZXJlLCBpbiBvcmRlciwgYW5kIGJlY29tZSBlZmZlY3RpdmUgYWdhaW4gaWYgdGhlIHVzZXIKZXZl ciBkZWxldGVzIHRoZSBtb3N0IHJlY2VudCBvbmUuCgpPdGhlcndpc2UsIGlmIGEgYm9va21hcmsg bmFtZWQgTkFNRSBhbHJlYWR5IGV4aXN0cyBidXQgUFVTSC1CT09LTUFSSwppcyBuaWwsIHJhaXNl IGFuIGVycm9yLgoKVG8geWFuayB3b3JkcyBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBidWZmZXIgYW5k IHVzZSB0aGVtIGFzIHBhcnQgb2YgdGhlCmJvb2ttYXJrIG5hbWUsIHR5cGUgXFw8Ym9va21hcmst bWluaWJ1ZmZlci1yZWFkLW5hbWUtbWFwPlwKXFxbYm9va21hcmsteWFuay13b3JkXSB3aGlsZSBz ZXR0aW5nIGEgYm9va21hcmsuICBTdWNjZXNzaXZlIFwKXFxbYm9va21hcmsteWFuay13b3JkXSdz Cnlhbmsgc3VjY2Vzc2l2ZSB3b3Jkcy4KClR5cGluZyBcXFt1bml2ZXJzYWwtYXJndW1lbnRdIGlu c2VydHMgKGF0IHRoZSBib29rbWFyayBuYW1lIHByb21wdCkgdGhlIG5hbWUgb2YgdGhlIGxhc3QK Ym9va21hcmsgdXNlZCBpbiB0aGUgZG9jdW1lbnQgd2hlcmUgdGhlIG5ldyBib29rbWFyayBpcyBi ZWluZyBzZXQ7CnRoaXMgaGVscHMgeW91IHVzZSBhIHNpbmdsZSBib29rbWFyayBuYW1lIHRvIHRy YWNrIHByb2dyZXNzIHRocm91Z2ggYQpsYXJnZSBkb2N1bWVudC4gIElmIHRoZXJlIGlzIG5vIHBy aW9yIGJvb2ttYXJrIGZvciB0aGlzIGRvY3VtZW50LCB0aGVuClxcW3VuaXZlcnNhbC1hcmd1bWVu dF0gaW5zZXJ0cyBhbiBhcHByb3ByaWF0ZSBuYW1lIGJhc2VkIG9uIHRoZSBidWZmZXIgb3IgZmls ZS4KClVzZSBcXFtib29rbWFyay1kZWxldGVdIHRvIHJlbW92ZSBib29rbWFya3MgKHlvdSBnaXZl IGl0IGEgbmFtZSBhbmQKaXQgcmVtb3ZlcyBvbmx5IHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhIGJv b2ttYXJrIHdpdGggdGhhdCBuYW1lIGZyb20KdGhlIGxpc3Qgb2YgYm9va21hcmtzLikiCiAgKGlu dGVyYWN0aXZlIChsaXN0IG5pbCBjdXJyZW50LXByZWZpeC1hcmcpKQogIChib29rbWFyay1zZXQt aW50ZXJuYWwgIlNldCBib29rbWFyayIgbmFtZSAoaWYgcHVzaC1ib29rbWFyayAncHVzaCBuaWwp KSkKCgooZGVmdW4gYm9va21hcmsta2lsbC1saW5lICgmb3B0aW9uYWwgbmV3bGluZS10b28pCiAg IktpbGwgZnJvbSBwb2ludCB0byBlbmQgb2YgbGluZS4KSWYgb3B0aW9uYWwgYXJnIE5FV0xJTkUt VE9PIGlzIG5vbi1uaWwsIGRlbGV0ZSB0aGUgbmV3bGluZSB0b28uCkRvZXMgbm90IGFmZmVjdCB0 aGUga2lsbCByaW5nLiIKICAobGV0ICgoZW9sIChsaW5lLWVuZC1wb3NpdGlvbikpKQogICAgKGRl bGV0ZS1yZWdpb24gKHBvaW50KSBlb2wpCiAgICAod2hlbiAoYW5kIG5ld2xpbmUtdG9vICg9IChm b2xsb3dpbmctY2hhcikgP1xuKSkKICAgICAgKGRlbGV0ZS1jaGFyIDEpKSkpCgooZGVmdmFyLWxv Y2FsIGJvb2ttYXJrLWFubm90YXRpb24tbmFtZSBuaWwKICAiTmFtZSBvZiBib29rbWFyayB1bmRl ciBlZGl0IGluIGBib29rbWFyay1lZGl0LWFubm90YXRpb24tbW9kZScuIikKCihkZWZ2YXItbG9j YWwgYm9va21hcmstLWFubm90YXRpb24tZnJvbS1ib29rbWFyay1saXN0IG5pbAogICJJZiBub24t bmlsLCBgYm9va21hcmstZWRpdC1hbm5vdGF0aW9uLW1vZGUnIHNob3VsZCByZXR1cm4gdG8gYm9v a21hcmsgbGlzdC4iKQoKKGRlZnVuIGJvb2ttYXJrLWRlZmF1bHQtYW5ub3RhdGlvbi10ZXh0IChi b29rbWFyay1uYW1lKQogICJSZXR1cm4gZGVmYXVsdCBhbm5vdGF0aW9uIHRleHQgZm9yIEJPT0tN QVJLLU5BTUUuClRoZSBkZWZhdWx0IGFubm90YXRpb24gdGV4dCBpcyBzaW1wbHkgc29tZSB0ZXh0 IGV4cGxhaW5pbmcgaG93IHRvIHVzZQphbm5vdGF0aW9ucy4iCiAgKGNvbmNhdCAoZm9ybWF0LW1l c3NhZ2UKICAgICAgICAgICAiIyAgVHlwZSB0aGUgYW5ub3RhdGlvbiBmb3IgYm9va21hcmsgYCVz JyBoZXJlLlxuIgogICAgICAgICAgIGJvb2ttYXJrLW5hbWUpCgkgIChmb3JtYXQtbWVzc2FnZQog ICAgICAgICAgICIjICBBbGwgbGluZXMgd2hpY2ggc3RhcnQgd2l0aCBhIGAjJyB3aWxsIGJlIGRl bGV0ZWQuXG4iKQogICAgICAgICAgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzCiAgICAgICAgICAg KGNvbmNhdAogICAgICAgICAgICAiIyAgVHlwZSBcXFtib29rbWFyay1lZGl0LWFubm90YXRpb24t Y29uZmlybV0gd2hlbiBkb25lLiAgVHlwZSAiCiAgICAgICAgICAgICJcXFtib29rbWFyay1lZGl0 LWFubm90YXRpb24tY2FuY2VsXSB0byBjYW5jZWwuXG4jXG4iKSkKCSAgIiMgIEF1dGhvcjogIiAo dXNlci1mdWxsLW5hbWUpICIgPCIgKHVzZXItbG9naW4tbmFtZSkgIkAiCgkgIChzeXN0ZW0tbmFt ZSkgIj5cbiIKICAgICAgICAgICIjICBEYXRlOiAgICIgKGN1cnJlbnQtdGltZS1zdHJpbmcpICJc biIpKQoKCihkZWZ2YXIgYm9va21hcmstZWRpdC1hbm5vdGF0aW9uLXRleHQtZnVuYyAnYm9va21h cmstZGVmYXVsdC1hbm5vdGF0aW9uLXRleHQKICAiRnVuY3Rpb24gdG8gcmV0dXJuIGRlZmF1bHQg dGV4dCB0byB1c2UgZm9yIGEgYm9va21hcmsgYW5ub3RhdGlvbi4KSXQgdGFrZXMgb25lIGFyZ3Vt ZW50LCB0aGUgbmFtZSBvZiB0aGUgYm9va21hcmssIGFzIGEgc3RyaW5nLiIpCgooZGVmdmFyLWtl eW1hcCBib29rbWFyay1lZGl0LWFubm90YXRpb24tbW9kZS1tYXAKICA6ZG9jICJLZXltYXAgZm9y IGVkaXRpbmcgYW4gYW5ub3RhdGlvbiBvZiBhIGJvb2ttYXJrLiIKICA6cGFyZW50IHRleHQtbW9k ZS1tYXAKICAiQy1jIEMtYyIgIydib29rbWFyay1lZGl0LWFubm90YXRpb24tY29uZmlybQogICJD LWMgQy1rIiAjJ2Jvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi1jYW5jZWwpCgooZGVmdW4gYm9va21h cmstaW5zZXJ0LWFubm90YXRpb24gKGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKQogICJJbnNlcnQg YW5ub3RhdGlvbiBmb3IgQk9PS01BUkstTkFNRS1PUi1SRUNPUkQgYXQgcG9pbnQuIgogICh3aGVu IChub3QgKGJvb2ttYXJrLWdldC1ib29rbWFyayBib29rbWFyay1uYW1lLW9yLXJlY29yZCB0KSkK ICAgIChlcnJvciAiSW52YWxpZCBib29rbWFyazogJXMiIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3Jk KSkKICAoaW5zZXJ0IChmdW5jYWxsIGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi10ZXh0LWZ1bmMg Ym9va21hcmstbmFtZS1vci1yZWNvcmQpKQogIChsZXQgKChhbm5vdGF0aW9uIChib29rbWFyay1n ZXQtYW5ub3RhdGlvbiBib29rbWFyay1uYW1lLW9yLXJlY29yZCkpKQogICAgKGlmIChhbmQgYW5u b3RhdGlvbiAobm90IChzdHJpbmctZXF1YWwgYW5ub3RhdGlvbiAiIikpKQoJKGluc2VydCBhbm5v dGF0aW9uKSkpKQoKKGRlZmluZS1kZXJpdmVkLW1vZGUgYm9va21hcmstZWRpdC1hbm5vdGF0aW9u LW1vZGUKICB0ZXh0LW1vZGUgIkVkaXQgQm9va21hcmsgQW5ub3RhdGlvbiIKICAiTW9kZSBmb3Ig ZWRpdGluZyB0aGUgYW5ub3RhdGlvbiBvZiBib29rbWFya3MuClxcPGJvb2ttYXJrLWVkaXQtYW5u b3RhdGlvbi1tb2RlLW1hcD5cCldoZW4geW91IGhhdmUgZmluaXNoZWQgY29tcG9zaW5nLCB0eXBl IFxcW2Jvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi1jb25maXJtXSBcCm9yIFxcW2Jvb2ttYXJrLWVk aXQtYW5ub3RhdGlvbi1jYW5jZWxdIHRvIGNhbmNlbC4KClxce2Jvb2ttYXJrLWVkaXQtYW5ub3Rh dGlvbi1tb2RlLW1hcH0iKQoKKGRlZm1hY3JvIGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi0tbWF5 YmUtZGlzcGxheS1saXN0ICgmcmVzdCBib2R5KQogICJEaXNwbGF5IGJvb2ttYXJrIGxpc3QgYWZ0 ZXIgZWRpdGluZyBpZiBhcHByb3ByaWF0ZS4iCiAgYChsZXQgKChmcm9tLWJvb2ttYXJrLWxpc3Qg Ym9va21hcmstLWFubm90YXRpb24tZnJvbS1ib29rbWFyay1saXN0KQogICAgICAgICAob2xkLWJ1 ZmZlciAoY3VycmVudC1idWZmZXIpKSkKICAgICAsQGJvZHkKICAgICAocXVpdC13aW5kb3cpCiAg ICAgKGJvb2ttYXJrLWJtZW51LXN1cnJlcHRpdGlvdXNseS1yZWJ1aWxkLWxpc3QpCiAgICAgKHdo ZW4gZnJvbS1ib29rbWFyay1saXN0CiAgICAgICAocG9wLXRvLWJ1ZmZlciAoZ2V0LWJ1ZmZlciBi b29rbWFyay1ibWVudS1idWZmZXIpKQogICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAg ICAgIChib29rbWFyay1ibWVudS1ib29rbWFyaykpCiAgICAgKGtpbGwtYnVmZmVyIG9sZC1idWZm ZXIpKSkKCihkZWZ1biBib29rbWFyay1lZGl0LWFubm90YXRpb24tY2FuY2VsICgpCiAgIkNhbmNl bCB0aGUgY3VycmVudCBhbm5vdGF0aW9uIGVkaXQuIgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21h cmstZWRpdC1hbm5vdGF0aW9uLW1vZGUpCiAgKGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi0tbWF5 YmUtZGlzcGxheS1saXN0CiAgIChtZXNzYWdlICJDYW5jZWxlZCBieSB1c2VyIikpKQoKKGRlZnVu IGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi1jb25maXJtICgpCiAgIlVzZSBidWZmZXIgY29udGVu dHMgYXMgYW5ub3RhdGlvbiBmb3IgYSBib29rbWFyay4KTGluZXMgYmVnaW5uaW5nIHdpdGggYCMn IGFyZSBpZ25vcmVkLiIKICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlv bi1tb2RlKQogIChpZiAobm90IChkZXJpdmVkLW1vZGUtcCAnYm9va21hcmstZWRpdC1hbm5vdGF0 aW9uLW1vZGUpKQogICAgICAoZXJyb3IgIk5vdCBpbiBib29rbWFyay1lZGl0LWFubm90YXRpb24t bW9kZSIpKQogIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgKHdoaWxlICg8IChwb2ludCkgKHBv aW50LW1heCkpCiAgICAoaWYgKD0gKGZvbGxvd2luZy1jaGFyKSA/IykKICAgICAgICAoYm9va21h cmsta2lsbC1saW5lIHQpCiAgICAgIChmb3J3YXJkLWxpbmUgMSkpKQogIDs7IFRha2Ugbm8gY2hh bmNlcyB3aXRoIHRleHQgcHJvcGVydGllcy4KICAoYm9va21hcmstZWRpdC1hbm5vdGF0aW9uLS1t YXliZS1kaXNwbGF5LWxpc3QKICAgKGxldCAoKGFubm90YXRpb24gKGJ1ZmZlci1zdWJzdHJpbmct bm8tcHJvcGVydGllcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpCiAgICAgICAgIChib29rbWFy ay1uYW1lIGJvb2ttYXJrLWFubm90YXRpb24tbmFtZSkpCiAgICAgKGJvb2ttYXJrLXNldC1hbm5v dGF0aW9uIGJvb2ttYXJrLW5hbWUgYW5ub3RhdGlvbikKICAgICAoYm9va21hcmstdXBkYXRlLWxh c3QtbW9kaWZpZWQgYm9va21hcmstbmFtZSkKICAgICAoc2V0cSBib29rbWFyay1hbGlzdC1tb2Rp ZmljYXRpb24tY291bnQKICAgICAgICAgICAoMSsgYm9va21hcmstYWxpc3QtbW9kaWZpY2F0aW9u LWNvdW50KSkKICAgICAobWVzc2FnZSAiQW5ub3RhdGlvbiB1cGRhdGVkIGZvciBcIiVzXCIiIGJv b2ttYXJrLW5hbWUpKSkpCgoKKGRlZnVuIGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbiAoYm9va21h cmstbmFtZS1vci1yZWNvcmQgJm9wdGlvbmFsIGZyb20tYm9va21hcmstbGlzdCkKICAiUG9wIHVw IGEgYnVmZmVyIGZvciBlZGl0aW5nIGJvb2ttYXJrIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JEJ3Mg YW5ub3RhdGlvbi4KSWYgb3B0aW9uYWwgYXJndW1lbnQgRlJPTS1CT09LTUFSSy1MSVNUIGlzIG5v bi1uaWwsIHJldHVybiB0byB0aGUKYm9va21hcmsgbGlzdCB3aGVuIGVkaXRpbmcgaXMgZG9uZS4i CiAgKHBvcC10by1idWZmZXIgKGdlbmVyYXRlLW5ldy1idWZmZXItbmFtZSAiKkJvb2ttYXJrIEFu bm90YXRpb24gQ29tcG9zZSoiKSkKICAoYm9va21hcmstZWRpdC1hbm5vdGF0aW9uLW1vZGUpCiAg KGJvb2ttYXJrLWluc2VydC1hbm5vdGF0aW9uIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKQogIChz ZXRxIGJvb2ttYXJrLS1hbm5vdGF0aW9uLWZyb20tYm9va21hcmstbGlzdCBmcm9tLWJvb2ttYXJr LWxpc3QpCiAgKHNldHEgYm9va21hcmstYW5ub3RhdGlvbi1uYW1lIGJvb2ttYXJrLW5hbWUtb3It cmVjb3JkKSkKCgooZGVmdW4gYm9va21hcmstYnVmZmVyLW5hbWUgKCkKICAiUmV0dXJuIHRoZSBu YW1lIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBpbiBhIGZvcm0gdXNhYmxlIGFzIGEgYm9va21hcmsg bmFtZS4KSWYgdGhlIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIG9yIGRpcmVjdG9y eSwgdXNlIHRoYXQgbmFtZS4iCiAgKGNvbmQKICAgOzsgT3IgYXJlIHdlIGEgZmlsZT8KICAgKGJ1 ZmZlci1maWxlLW5hbWUgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkgYnVmZmVyLWZpbGUtbmFtZSkp CiAgIDs7IE9yIGFyZSB3ZSBhIGRpcmVjdG9yeT8KICAgKChhbmQgKGJvdW5kcCAnZGlyZWQtZGly ZWN0b3J5KSBkaXJlZC1kaXJlY3RvcnkpCiAgICAobGV0KiAoKGRpcm5hbWUgKGlmIChzdHJpbmdw IGRpcmVkLWRpcmVjdG9yeSkKICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWQtZGlyZWN0b3J5 CiAgICAgICAgICAgICAgICAgICAgICAoY2FyIGRpcmVkLWRpcmVjdG9yeSkpKQogICAgICAgICAg IChpZHggKDEtIChsZW5ndGggZGlybmFtZSkpKSkKICAgICAgOzsgU3RyaXAgdGhlIHRyYWlsaW5n IHNsYXNoLgogICAgICAoaWYgKD0gPy8gKGFyZWYgZGlybmFtZSBpZHgpKQogICAgICAgICAgKGZp bGUtbmFtZS1ub25kaXJlY3RvcnkgKHN1YnN0cmluZyBkaXJuYW1lIDAgaWR4KSkKICAgICAgICA7 OyBFbHNlIHJldHVybiB0aGUgY3VycmVudC1idWZmZXIKICAgICAgICAoYnVmZmVyLW5hbWUgKGN1 cnJlbnQtYnVmZmVyKSkpKSkKICAgOzsgSWYgYWxsIGVsc2UgZmFpbHMsIHVzZSB0aGUgYnVmZmVy J3MgbmFtZS4KICAgKHQKICAgIChidWZmZXItbmFtZSAoY3VycmVudC1idWZmZXIpKSkpKQoKCihk ZWZ1biBib29rbWFyay15YW5rLXdvcmQgKCkKICAiR2V0IHRoZSBuZXh0IHdvcmQgZnJvbSBidWZm ZXIgYGJvb2ttYXJrLWN1cnJlbnQtYnVmZmVyJyBhbmQgYXBwZW5kCml0IHRvIHRoZSBuYW1lIG9m IHRoZSBib29rbWFyayBjdXJyZW50bHkgYmVpbmcgc2V0LCBhZHZhbmNpbmcKYGJvb2ttYXJrLXlh bmstcG9pbnQnIGJ5IG9uZSB3b3JkLiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAoKHN0cmluZyAo d2l0aC1jdXJyZW50LWJ1ZmZlciBib29rbWFyay1jdXJyZW50LWJ1ZmZlcgogICAgICAgICAgICAg ICAgICAoZ290by1jaGFyIGJvb2ttYXJrLXlhbmstcG9pbnQpCiAgICAgICAgICAgICAgICAgIChi dWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMKICAgICAgICAgICAgICAgICAgIChwb2ludCkK ICAgICAgICAgICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC13 b3JkIDEpCiAgICAgICAgICAgICAgICAgICAgIChzZXRxIGJvb2ttYXJrLXlhbmstcG9pbnQgKHBv aW50KSkpKSkpKQogICAgKGluc2VydCBzdHJpbmcpKSkKCihkZWZ1biBib29rbWFyay1idWZmZXIt ZmlsZS1uYW1lICgpCiAgIlJldHVybiB0aGUgY3VycmVudCBidWZmZXIncyBmaWxlIGluIGEgd2F5 IHVzZWZ1bCBmb3IgYm9va21hcmtzLiIKICA7OyBBYmJyZXZpYXRlIHRoZSBwYXRoLCBib3RoIHNv IGl0J3Mgc2hvcnRlciBhbmQgc28gaXQncyBtb3JlCiAgOzsgcG9ydGFibGUuICBFLmcuLCB0aGUg dXNlcidzIGhvbWUgZGlyIG1pZ2h0IGJlIGEgZGlmZmVyZW50CiAgOzsgcGF0aCBvbiBkaWZmZXJl bnQgbWFjaGluZXMsIGJ1dCAifi8iIHdpbGwgc3RpbGwgcmVhY2ggaXQuCiAgKGFiYnJldmlhdGUt ZmlsZS1uYW1lCiAgIChjb25kCiAgICAoYnVmZmVyLWZpbGUtbmFtZSBidWZmZXItZmlsZS1uYW1l KQogICAgKChhbmQgKGJvdW5kcCAnZGlyZWQtZGlyZWN0b3J5KSBkaXJlZC1kaXJlY3RvcnkpCiAg ICAgKGlmIChzdHJpbmdwIGRpcmVkLWRpcmVjdG9yeSkKICAgICAgICAgZGlyZWQtZGlyZWN0b3J5 CiAgICAgICAoY2FyIGRpcmVkLWRpcmVjdG9yeSkpKQogICAgKHQgKGVycm9yICJCdWZmZXIgbm90 IHZpc2l0aW5nIGEgZmlsZSBvciBkaXJlY3RvcnkiKSkpKSkKCihkZWZ2YXIgYm9va21hcmstLXdh dGNoLWFscmVhZHktYXNrZWQtbXRpbWUgbmlsCiAgIk10aW1lIGZvciB3aGljaCB3ZSBhbHJlYWR5 IHF1ZXJpZWQgYWJvdXQgcmVsb2FkaW5nLiIpCgooZGVmdW4gYm9va21hcmstLXdhdGNoLWZpbGUt YWxyZWFkeS1xdWVyaWVkLXAgKG5ldy1tdGltZSkKICA7OyBEb24ndCBhc2sgcmVwZWF0ZWRseSBp ZiB1c2VyIGFscmVhZHkgc2FpZCAibm8iIHRvIHJlbG9hZGluZyBhCiAgOzsgZmlsZSB3aXRoIHRo aXMgbXRpbWU6CiAgKHByb2cxICh0aW1lLWVxdWFsLXAgbmV3LW10aW1lIGJvb2ttYXJrLS13YXRj aC1hbHJlYWR5LWFza2VkLW10aW1lKQogICAgKHNldHEgYm9va21hcmstLXdhdGNoLWFscmVhZHkt YXNrZWQtbXRpbWUgbmV3LW10aW1lKSkpCgooZGVmdW4gYm9va21hcmstbWF5YmUtbG9hZC1kZWZh dWx0LWZpbGUgKCkKICAiSWYgYm9va21hcmtzIGhhdmUgbm90IGJlZW4gbG9hZGVkIGZyb20gdGhl IGRlZmF1bHQgcGxhY2UsIGxvYWQgdGhlbS4iCiAgKGNvbmQgKChhbmQgKG5vdCBib29rbWFyay1i b29rbWFya3MtdGltZXN0YW1wKQogICAgICAgICAgICAgIChudWxsIGJvb2ttYXJrLWFsaXN0KQog ICAgICAgICAgICAgIChmaWxlLXJlYWRhYmxlLXAgYm9va21hcmstZGVmYXVsdC1maWxlKQogICAg ICAgICAgICAgIChib29rbWFyay1sb2FkIGJvb2ttYXJrLWRlZmF1bHQtZmlsZSB0IHQpKSkKICAg ICAgICAoKGFuZCBib29rbWFyay13YXRjaC1ib29rbWFyay1maWxlCiAgICAgICAgICAgICAgKGxl dCAoKG5ldy1tdGltZSAobnRoIDUgKGZpbGUtYXR0cmlidXRlcwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2FyIGJvb2ttYXJrLWJvb2ttYXJrcy10aW1lc3RhbXApKSkp CiAgICAgICAgICAgICAgICAgICAgKG9sZC1tdGltZSAoY2RyIGJvb2ttYXJrLWJvb2ttYXJrcy10 aW1lc3RhbXApKSkKCQkoYW5kIChub3QgKHRpbWUtZXF1YWwtcCBuZXctbXRpbWUgb2xkLW10aW1l KSkKICAgICAgICAgICAgICAgICAgICAgKG5vdCAoYm9va21hcmstLXdhdGNoLWZpbGUtYWxyZWFk eS1xdWVyaWVkLXAgbmV3LW10aW1lKSkKICAgICAgICAgICAgICAgICAgICAgKG9yIChlcSAnc2ls ZW50IGJvb2ttYXJrLXdhdGNoLWJvb2ttYXJrLWZpbGUpCiAgICAgICAgICAgICAgICAgICAgICAg ICAoeWVzLW9yLW5vLXAKICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJCb29rbWFy a3MgJXMgY2hhbmdlZCBvbiBkaXNrLiAgUmVsb2FkPyAiCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2FyIGJvb2ttYXJrLWJvb2ttYXJrcy10aW1lc3RhbXApKSkpKSkpCiAgICAg ICAgIChib29rbWFyay1sb2FkIChjYXIgYm9va21hcmstYm9va21hcmtzLXRpbWVzdGFtcCkgdCB0 KSkpKQoKCihkZWZ2YXIgYm9va21hcmstanVtcC1kaXNwbGF5LWZ1bmN0aW9uIG5pbAogIkZ1bmN0 aW9uIHVzZWQgY3VycmVudGx5IHRvIGRpc3BsYXkgYSBib29rbWFyaywgb3IgbmlsIGlmIG5vIGZ1 bmN0aW9uLiIpCgooZGVmdmFyIGJvb2ttYXJrLWFmdGVyLWp1bXAtaG9vayBuaWwKICAiSG9vayBy dW4gYWZ0ZXIgYGJvb2ttYXJrLWp1bXAnIGp1bXBzIHRvIGEgYm9va21hcmsuClVzZWZ1bCBmb3Ig ZXhhbXBsZSB0byB1bmhpZGUgdGV4dCBpbiBgb3V0bGluZS1tb2RlJy4iKQoKKGRlZnVuIGJvb2tt YXJrLS1qdW1wLXZpYSAoYm9va21hcmstbmFtZS1vci1yZWNvcmQgZGlzcGxheS1mdW5jdGlvbikK ICAiSGFuZGxlIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JELCBwcm92aWRpbmcgdGhlIGJvb2ttYXJr J3MgYmVoYXZpb3IuClNhdmUgRElTUExBWS1GVU5DVElPTiBpbiB2YXJpYWJsZSBgYm9va21hcmst anVtcC1kaXNwbGF5LWZ1bmN0aW9uJy4KVGhlbiBzZXQgdGhlIHdpbmRvdyBwb2ludCBmb3IgdGhl IGN1cnJlbnQgYnVmZmVyLCBpZiBkaXNwbGF5ZWQsIHRvCnBvaW50LiAgVGhlbiBydW4gYGJvb2tt YXJrLWFmdGVyLWp1bXAtaG9vaycuICBGaW5hbGx5LCBpZiBvcHRpb24KYGJvb2ttYXJrLWF1dG9t YXRpY2FsbHktc2hvdy1hbm5vdGF0aW9ucycgaXMgbm9uLW5pbCBhbmQgdGhlIGJvb2ttYXJrCmhh cyBhbiBhbm5vdGF0aW9uLCBzaG93IHRoZSBhbm5vdGF0aW9uLiIKICAoc2V0cSBib29rbWFyay1q dW1wLWRpc3BsYXktZnVuY3Rpb24gIGRpc3BsYXktZnVuY3Rpb24pCiAgKGJvb2ttYXJrLWhhbmRs ZS1ib29rbWFyayBib29rbWFyay1uYW1lLW9yLXJlY29yZCkKICAobGV0ICgod2luIChnZXQtYnVm ZmVyLXdpbmRvdyAoY3VycmVudC1idWZmZXIpIDApKSkKICAgIChpZiB3aW4gKHNldC13aW5kb3ct cG9pbnQgd2luIChwb2ludCkpKSkKICA7OyBGSVhNRTogd2UgdXNlZCB0byBvbmx5IHJ1biBib29r bWFyay1hZnRlci1qdW1wLWhvb2sgaW4KICA7OyBgYm9va21hcmstanVtcCcgaXRzZWxmLCBidXQg aW4gbm9uZSBvZiB0aGUgb3RoZXIgY29tbWFuZHMuCiAgKHdoZW4gYm9va21hcmstc2V0LWZyaW5n ZS1tYXJrCiAgICAobGV0ICgob3ZlcmxheXMgKG92ZXJsYXlzLWluIChwb2ludC1hdC1ib2wpICgx KyAocG9pbnQtYXQtYm9sKSkpKQogICAgICAgICAgdGVtcCBmb3VuZCkKICAgICAgKHdoaWxlIChh bmQgKG5vdCBmb3VuZCkgKHNldHEgdGVtcCAocG9wIG92ZXJsYXlzKSkpCiAgICAgICAgKHdoZW4g KGVxICdib29rbWFyayAob3ZlcmxheS1nZXQgdGVtcCAnY2F0ZWdvcnkpKQogICAgICAgICAgKHNl dHEgZm91bmQgdCkpKQogICAgICAodW5sZXNzIGZvdW5kCiAgICAgICAgKGJvb2ttYXJrLS1zZXQt ZnJpbmdlLW1hcmspKSkpCiAgKHJ1bi1ob29rcyAnYm9va21hcmstYWZ0ZXItanVtcC1ob29rKQog IChpZiBib29rbWFyay1hdXRvbWF0aWNhbGx5LXNob3ctYW5ub3RhdGlvbnMKICAgICAgOzsgaWYg dGhlcmUgaXMgYW4gYW5ub3RhdGlvbiBmb3IgdGhpcyBib29rbWFyaywKICAgICAgOzsgc2hvdyBp dCBpbiBhIGJ1ZmZlci4KICAgICAgKGJvb2ttYXJrLXNob3ctYW5ub3RhdGlvbiBib29rbWFyay1u YW1lLW9yLXJlY29yZCkpKQoKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBib29rbWFyay1qdW1wIChi b29rbWFyayAmb3B0aW9uYWwgZGlzcGxheS1mdW5jKQogICJKdW1wIHRvIGJvb2ttYXJrIEJPT0tN QVJLIChhIHBvaW50IGluIHNvbWUgZmlsZSkuCllvdSBtYXkgaGF2ZSBhIHByb2JsZW0gdXNpbmcg dGhpcyBmdW5jdGlvbiBpZiB0aGUgdmFsdWUgb2YgdmFyaWFibGUKYGJvb2ttYXJrLWFsaXN0JyBp cyBuaWwuICBJZiB0aGF0IGhhcHBlbnMsIHlvdSBuZWVkIHRvIGxvYWQgaW4gc29tZQpib29rbWFy a3MuICBTZWUgaGVscCBvbiBmdW5jdGlvbiBgYm9va21hcmstbG9hZCcgZm9yIG1vcmUgYWJvdXQK dGhpcy4KCklmIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgQk9PS01BUksgbm8gbG9uZ2VyIGV4aXN0 cywgeW91IHdpbGwgYmUgYXNrZWQKaWYgeW91IHdpc2ggdG8gZ2l2ZSB0aGUgYm9va21hcmsgYSBu ZXcgbG9jYXRpb24sIGFuZCBgYm9va21hcmstanVtcCcKd2lsbCB0aGVuIGp1bXAgdG8gdGhlIG5l dyBsb2NhdGlvbiwgYXMgd2VsbCBhcyByZWNvcmRpbmcgaXQgaW4gcGxhY2UKb2YgdGhlIG9sZCBv bmUgaW4gdGhlIHBlcm1hbmVudCBib29rbWFyayByZWNvcmQuCgpCT09LTUFSSyBpcyB1c3VhbGx5 IGEgYm9va21hcmsgbmFtZSAoYSBzdHJpbmcpLiAgSXQgY2FuIGFsc28gYmUgYQpib29rbWFyayBy ZWNvcmQsIGJ1dCB0aGlzIGlzIHVzdWFsbHkgb25seSBkb25lIGJ5IHByb2dyYW1tYXRpYyBjYWxs ZXJzLgoKSWYgRElTUExBWS1GVU5DIGlzIG5vbi1uaWwsIGl0IGlzIGEgZnVuY3Rpb24gdG8gaW52 b2tlIHRvIGRpc3BsYXkgdGhlCmJvb2ttYXJrLiAgSXQgZGVmYXVsdHMgdG8gYHBvcC10by1idWZm ZXItc2FtZS13aW5kb3cnLiAgQSB0eXBpY2FsIHZhbHVlIGZvcgpESVNQTEFZLUZVTkMgd291bGQg YmUgYHN3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93Jy4iCiAgKGludGVyYWN0aXZlCiAgIChs aXN0IChib29rbWFyay1jb21wbGV0aW5nLXJlYWQgIkp1bXAgdG8gYm9va21hcmsiCgkJCQkgICBi b29rbWFyay1jdXJyZW50LWJvb2ttYXJrKSkpCiAgKHVubGVzcyBib29rbWFyawogICAgKGVycm9y ICJObyBib29rbWFyayBzcGVjaWZpZWQiKSkKICAoYm9va21hcmstbWF5YmUtaGlzdG9yaWNpemUt c3RyaW5nIGJvb2ttYXJrKQogIDs7IERvbid0IHVzZSBgc3dpdGNoLXRvLWJ1ZmZlcicgYmVjYXVz ZSBpdCB3b3VsZCBsZXQgdGhlCiAgOzsgd2luZG93LXBvaW50IG92ZXJyaWRlIHRoZSBib29rbWFy aydzIHBvaW50IHdoZW4KICA7OyBgc3dpdGNoLXRvLWJ1ZmZlci1wcmVzZXJ2ZS13aW5kb3ctcG9p bnQnIGlzIG5vbi1uaWwuCiAgKGJvb2ttYXJrLS1qdW1wLXZpYSBib29rbWFyayAob3IgZGlzcGxh eS1mdW5jICdwb3AtdG8tYnVmZmVyLXNhbWUtd2luZG93KSkpCgoKOzs7IyMjYXV0b2xvYWQKKGRl ZnVuIGJvb2ttYXJrLWp1bXAtb3RoZXItd2luZG93IChib29rbWFyaykKICAiSnVtcCB0byBCT09L TUFSSyBpbiBhbm90aGVyIHdpbmRvdy4gIFNlZSBgYm9va21hcmstanVtcCcgZm9yIG1vcmUuIgog IChpbnRlcmFjdGl2ZQogICAobGlzdCAoYm9va21hcmstY29tcGxldGluZy1yZWFkICJKdW1wIHRv IGJvb2ttYXJrIChpbiBhbm90aGVyIHdpbmRvdykiCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9va21hcmstY3VycmVudC1ib29rbWFyaykpKQogIChib29rbWFyay1qdW1wIGJv b2ttYXJrICdzd2l0Y2gtdG8tYnVmZmVyLW90aGVyLXdpbmRvdykpCgo7OzsjIyNhdXRvbG9hZAoo ZGVmdW4gYm9va21hcmstanVtcC1vdGhlci1mcmFtZSAoYm9va21hcmspCiAgIkp1bXAgdG8gQk9P S01BUksgaW4gYW5vdGhlciBmcmFtZS4gIFNlZSBgYm9va21hcmstanVtcCcgZm9yIG1vcmUuIgog IChpbnRlcmFjdGl2ZQogICAobGlzdCAoYm9va21hcmstY29tcGxldGluZy1yZWFkICJKdW1wIHRv IGJvb2ttYXJrIChpbiBhbm90aGVyIGZyYW1lKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29rbWFyay1jdXJyZW50LWJvb2ttYXJrKSkpCiAgKGxldCAoKHBvcC11cC1mcmFt ZXMgdCkpCiAgICAoYm9va21hcmstanVtcC1vdGhlci13aW5kb3cgYm9va21hcmspKSkKCihkZWZ1 biBib29rbWFyay1oYW5kbGUtYm9va21hcmsgKGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKQogICJD YWxsIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JEJ3MgaGFuZGxlciBvciBgYm9va21hcmstZGVmYXVs dC1oYW5kbGVyJwppZiBpdCBoYXMgbm9uZS4gIFRoaXMgY2hhbmdlcyBjdXJyZW50IGJ1ZmZlciBh bmQgcG9pbnQgYW5kIHJldHVybnMgbmlsLApvciBzaWduYWxzIGEgYGZpbGUtZXJyb3InLgoKSWYg Qk9PS01BUkstTkFNRS1PUi1SRUNPUkQgaGFzIG5vIGZpbGUsIHRoaXMgaXMgYSBuby1vcC4gIElm CkJPT0tNQVJLLU5BTUUtT1ItUkVDT1JEIGhhcyBhIGZpbGUsIGJ1dCB0aGF0IGZpbGUgbm8gbG9u Z2VyIGV4aXN0cywKdGhlbiBvZmZlciBpbnRlcmFjdGl2ZWx5IHRvIHJlbG9jYXRlIEJPT0tNQVJL LU5BTUUtT1ItUkVDT1JELiIKICAoY29uZGl0aW9uLWNhc2UgZXJyCiAgICAgIChmdW5jYWxsIChv ciAoYm9va21hcmstZ2V0LWhhbmRsZXIgYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgICAgICAg ICAgICAgICAgICAnYm9va21hcmstZGVmYXVsdC1oYW5kbGVyKQogICAgICAgICAgICAgICAoYm9v a21hcmstZ2V0LWJvb2ttYXJrIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKSkKICAgIChib29rbWFy ay1lcnJvci1uby1maWxlbmFtZSAgICAgICAgIDtmaWxlLWVycm9yCiAgICAgOzsgV2Ugd2VyZSB1 bmFibGUgdG8gZmluZCB0aGUgbWFya2VkIGZpbGUsIHNvIGFzayBpZiB1c2VyIHdhbnRzIHRvCiAg ICAgOzsgcmVsb2NhdGUgdGhlIGJvb2ttYXJrLCBlbHNlIHJlbWluZCB0aGVtIHRvIGNvbnNpZGVy IGRlbGV0aW9uLgogICAgICh3aGVuIChzdHJpbmdwIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKQog ICAgICAgOzsgYGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkJyBjYW4gYmUgZWl0aGVyIGEgYm9va21h cmsgbmFtZQogICAgICAgOzsgKGZyb20gYGJvb2ttYXJrLWFsaXN0JykgIG9yIGEgYm9va21hcmsg b2JqZWN0LiAgSWYgaXQncyBhbgogICAgICAgOzsgb2JqZWN0LCB3ZSBhc3N1bWUgaXQncyBhIGJv b2ttYXJrIHVzZWQgaW50ZXJuYWxseSBieSBzb21lCiAgICAgICA7OyBvdGhlciBwYWNrYWdlLgog ICAgICAgKGxldCAoKGZpbGUgKGJvb2ttYXJrLWdldC1maWxlbmFtZSBib29rbWFyay1uYW1lLW9y LXJlY29yZCkpKQogICAgICAgICAod2hlbiBmaWxlICAgICAgICA7RG9uJ3Qga25vdyBob3cgdG8g cmVsb2NhdGUgaWYgdGhlcmUncyBubyBgZmlsZScuCiAgICAgICAgICAgOzsgSWYgZmlsZSBpcyBu b3QgYSBkaXIsIGRpcmVjdG9yeS1maWxlLW5hbWUganVzdCByZXR1cm5zIGZpbGUuCiAgICAgICAg ICAgKGxldCAoKGRpc3BsYXktbmFtZSAoZGlyZWN0b3J5LWZpbGUtbmFtZSBmaWxlKSkpCiAgICAg ICAgICAgICAoZGluZykKICAgICAgICAgICAgIDs7IERpYWxvZyBib3hlcyBjYW4gYWNjZXB0IGEg ZmlsZSB0YXJnZXQsIGJ1dCB1c3VhbGx5IGRvbid0CiAgICAgICAgICAgICA7OyBrbm93IGhvdyB0 byBhY2NlcHQgYSBkaXJlY3RvcnkgdGFyZ2V0IChhdCBsZWFzdCwgdGhpcwogICAgICAgICAgICAg OzsgaXMgdHJ1ZSBpbiBHbm9tZSBvbiBHTlUvTGludXgsIGFuZCBCdWcjNDIzMCBzYXlzIGl0J3MK ICAgICAgICAgICAgIDs7IHRydWUgb24gV2luZG93cyBhcyB3ZWxsKS4gIFNvIHdlIHN1cHByZXNz IGZpbGUgZGlhbG9ncwogICAgICAgICAgICAgOzsgd2hlbiByZWxvY2F0aW5nLgogICAgICAgICAg ICAgKGxldCAoKHVzZS1kaWFsb2ctYm94IG5pbCkKICAgICAgICAgICAgICAgICAgICh1c2UtZmls ZS1kaWFsb2cgbmlsKSkKICAgICAgICAgICAgICAgKGlmICh5LW9yLW4tcCAoY29uY2F0IGRpc3Bs YXktbmFtZSAiIG5vbmV4aXN0ZW50LiAgUmVsb2NhdGUgXCIiCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29rbWFyay1uYW1lLW9yLXJlY29yZCAiXCI/ICIpKQogICAgICAg ICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAgICAgICAgIChib29rbWFyay1yZWxvY2F0 ZSBib29rbWFyay1uYW1lLW9yLXJlY29yZCkKICAgICAgICAgICAgICAgICAgICAgOzsgVHJ5IGFn YWluLgogICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCAob3IgKGJvb2ttYXJrLWdldC1oYW5k bGVyIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2Jvb2ttYXJrLWRlZmF1bHQtaGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGJvb2ttYXJrLWdldC1ib29rbWFyayBib29rbWFyay1uYW1lLW9yLXJlY29yZCkpKQog ICAgICAgICAgICAgICAgIChtZXNzYWdlCiAgICAgICAgICAgICAgICAgICJCb29rbWFyayBub3Qg cmVsb2NhdGVkOyBjb25zaWRlciByZW1vdmluZyBpdCAoJXMpLiIKICAgICAgICAgICAgICAgICAg Ym9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgICAgICAgICAgICAgICAgKHNpZ25hbCAoY2FyIGVy cikgKGNkciBlcnIpKSkpKSkpKSkpCiAgOzsgQWRkZWQgYnkgZGIuCiAgKHdoZW4gKHN0cmluZ3Ag Ym9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgICAoc2V0cSBib29rbWFyay1jdXJyZW50LWJvb2tt YXJrIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKSkKICBuaWwpCgooZGVmaW5lLWVycm9yICdib29r bWFyay1lcnJvcnMKICAiQm9va21hcmsgZXJyb3IiKQooZGVmaW5lLWVycm9yICdib29rbWFyay1l cnJvci1uby1maWxlbmFtZQogICJCb29rbWFyayBoYXMgbm8gYXNzb2NpYXRlZCBmaWxlIChvciBk aXJlY3RvcnkpIiAnYm9va21hcmstZXJyb3JzKQoKKGRlZnVuIGJvb2ttYXJrLWRlZmF1bHQtaGFu ZGxlciAoYm1rLXJlY29yZCkKICAiRGVmYXVsdCBoYW5kbGVyIHRvIGp1bXAgdG8gYSBwYXJ0aWN1 bGFyIGJvb2ttYXJrIGxvY2F0aW9uLgpCTUstUkVDT1JEIGlzIGEgYm9va21hcmsgcmVjb3JkLCBu b3QgYSBib29rbWFyayBuYW1lIChpLmUuLCBub3QgYSBzdHJpbmcpLgpDaGFuZ2VzIGN1cnJlbnQg YnVmZmVyIGFuZCBwb2ludCBhbmQgcmV0dXJucyBuaWwsIG9yIHNpZ25hbHMgYSBgZmlsZS1lcnJv cicuCgpJZiBCTUstUkVDT1JEIGhhcyBhIHByb3BlcnR5IGNhbGxlZCBgYnVmZmVyJywgaXQgc2hv dWxkIGJlIGEgbGl2ZQpidWZmZXIgb2JqZWN0LCBhbmQgdGhpcyBidWZmZXIgd2lsbCBiZSBzZWxl Y3RlZC4iCiAgKGxldCogKChibWsgICAgICAgICAgKGJvb2ttYXJrLWdldC1ib29rbWFyayBibWsp KQogICAgICAgICAoZmlsZSAgICAgICAgIChib29rbWFyay1nZXQtZmlsZW5hbWUgYm1rKSkKCSAo YnVmICAgICAgICAgIChib29rbWFyay1wcm9wLWdldCBibWsgJ2J1ZmZlcikpCiAgICAgICAgIChm b3J3YXJkLXN0ciAgKGJvb2ttYXJrLWdldC1mcm9udC1jb250ZXh0LXN0cmluZyBibWspKQogICAg ICAgICAoYmVoaW5kLXN0ciAgIChib29rbWFyay1nZXQtcmVhci1jb250ZXh0LXN0cmluZyBibWsp KQogICAgICAgICAocGxhY2UgICAgICAgIChib29rbWFyay1nZXQtcG9zaXRpb24gYm1rKSkpCiAg ICAoc2V0LWJ1ZmZlcgogICAgIChjb25kCiAgICAgICgoYW5kIGZpbGUgKGZpbGUtcmVhZGFibGUt cCBmaWxlKSAobm90IChidWZmZXItbGl2ZS1wIGJ1ZikpKQogICAgICAgKGZpbmQtZmlsZS1ub3Nl bGVjdCBmaWxlKSkKICAgICAgOzsgTm8gZmlsZSBmb3VuZC4gIFNlZSBpZiBidWZmZXIgQlVGIGhh cyBiZWVuIGNyZWF0ZWQuCiAgICAgICgoYW5kIGJ1ZiAoZ2V0LWJ1ZmZlciBidWYpKSkKICAgICAg KHQgOzsgSWYgbm90LCByYWlzZSBlcnJvci4KICAgICAgIChzaWduYWwgJ2Jvb2ttYXJrLWVycm9y LW5vLWZpbGVuYW1lIChsaXN0ICdzdHJpbmdwIGZpbGUpKSkpKQogICAgKHdoZW4gYm9va21hcmst anVtcC1kaXNwbGF5LWZ1bmN0aW9uCiAgICAgIChzYXZlLWN1cnJlbnQtYnVmZmVyIChmdW5jYWxs IGJvb2ttYXJrLWp1bXAtZGlzcGxheS1mdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY3VycmVudC1idWZmZXIpKSkpCiAgICAoaWYgcGxhY2UgKGdvdG8tY2hhciBw bGFjZSkpCiAgICA7OyBHbyBzZWFyY2hpbmcgZm9yd2FyZCBmaXJzdC4gIFRoZW4sIGlmIGZvcndh cmQtc3RyIGV4aXN0cyBhbmQKICAgIDs7IHdhcyBmb3VuZCBpbiB0aGUgZmlsZSwgd2UgY2FuIHNl YXJjaCBiYWNrd2FyZCBmb3IgYmVoaW5kLXN0ci4KICAgIDs7IFJhdGlvbmFsZSBpcyB0aGF0IGlm IHRleHQgd2FzIGluc2VydGVkIGJldHdlZW4gdGhlIHR3byBpbiB0aGUKICAgIDs7IGZpbGUsIGl0 J3MgYmV0dGVyIHRvIGJlIHB1dCBiZWZvcmUgaXQgc28geW91IGNhbiByZWFkIGl0LAogICAgOzsg cmF0aGVyIHRoYW4gYWZ0ZXIgYW5kIHJlbWFpbiBwZXJoYXBzIHVuYXdhcmUgb2YgdGhlIGNoYW5n ZXMuCiAgICAod2hlbiAoYW5kIGZvcndhcmQtc3RyIChzZWFyY2gtZm9yd2FyZCBmb3J3YXJkLXN0 ciAocG9pbnQtbWF4KSB0KSkKICAgICAgKGdvdG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKSkK ICAgICh3aGVuIChhbmQgYmVoaW5kLXN0ciAoc2VhcmNoLWJhY2t3YXJkIGJlaGluZC1zdHIgKHBv aW50LW1pbikgdCkpCiAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAwKSkpCiAgICBuaWwpKQoK Ozs7IyMjYXV0b2xvYWQKKGRlZnVuIGJvb2ttYXJrLXJlbG9jYXRlIChib29rbWFyay1uYW1lKQog ICJSZWxvY2F0ZSBCT09LTUFSSy1OQU1FIHRvIGFub3RoZXIgZmlsZSwgcmVhZGluZyBmaWxlIG5h bWUgd2l0aCBtaW5pYnVmZmVyLgoKVGhpcyBtYWtlcyBhbiBhbHJlYWR5IGV4aXN0aW5nIGJvb2tt YXJrIHBvaW50IHRvIHRoYXQgZmlsZSwgaW5zdGVhZCBvZgp0aGUgb25lIGl0IHVzZWQgdG8gcG9p bnQgYXQuICBVc2VmdWwgd2hlbiBhIGZpbGUgaGFzIGJlZW4gcmVuYW1lZAphZnRlciBhIGJvb2tt YXJrIHdhcyBzZXQgaW4gaXQuIgogIChpbnRlcmFjdGl2ZSAobGlzdCAoYm9va21hcmstY29tcGxl dGluZy1yZWFkICJCb29rbWFyayB0byByZWxvY2F0ZSIpKSkKICAoYm9va21hcmstbWF5YmUtaGlz dG9yaWNpemUtc3RyaW5nIGJvb2ttYXJrLW5hbWUpCiAgKGJvb2ttYXJrLW1heWJlLWxvYWQtZGVm YXVsdC1maWxlKQogIChsZXQqICgoYm1yay1maWxlbmFtZSAoYm9va21hcmstZ2V0LWZpbGVuYW1l IGJvb2ttYXJrLW5hbWUpKQogICAgICAgICAobmV3bG9jIChhYmJyZXZpYXRlLWZpbGUtbmFtZQog ICAgICAgICAgICAgICAgICAoZXhwYW5kLWZpbGUtbmFtZQogICAgICAgICAgICAgICAgICAgKHJl YWQtZmlsZS1uYW1lCiAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiUmVsb2NhdGUgJXMgdG86 ICIgYm9va21hcmstbmFtZSkKICAgICAgICAgICAgICAgICAgICAoZmlsZS1uYW1lLWRpcmVjdG9y eSBibXJrLWZpbGVuYW1lKSkpKSkpCiAgICAoYm9va21hcmstc2V0LWZpbGVuYW1lIGJvb2ttYXJr LW5hbWUgbmV3bG9jKQogICAgKGJvb2ttYXJrLXVwZGF0ZS1sYXN0LW1vZGlmaWVkIGJvb2ttYXJr LW5hbWUpCiAgICAoc2V0cSBib29rbWFyay1hbGlzdC1tb2RpZmljYXRpb24tY291bnQKICAgICAg ICAgICgxKyBib29rbWFyay1hbGlzdC1tb2RpZmljYXRpb24tY291bnQpKQogICAgKGlmIChib29r bWFyay10aW1lLXRvLXNhdmUtcCkKICAgICAgICAoYm9va21hcmstc2F2ZSkpCiAgICAoYm9va21h cmstYm1lbnUtc3VycmVwdGl0aW91c2x5LXJlYnVpbGQtbGlzdCkpKQoKCjs7OyMjI2F1dG9sb2Fk CihkZWZ1biBib29rbWFyay1pbnNlcnQtbG9jYXRpb24gKGJvb2ttYXJrLW5hbWUgJm9wdGlvbmFs IG5vLWhpc3RvcnkpCiAgIkluc2VydCB0aGUgbmFtZSBvZiB0aGUgZmlsZSBhc3NvY2lhdGVkIHdp dGggQk9PS01BUkstTkFNRS4KCk9wdGlvbmFsIHNlY29uZCBhcmcgTk8tSElTVE9SWSBtZWFucyBk b24ndCByZWNvcmQgdGhpcyBpbiB0aGUKbWluaWJ1ZmZlciBoaXN0b3J5IGxpc3QgYGJvb2ttYXJr LWhpc3RvcnknLiIKICAoaW50ZXJhY3RpdmUgKGxpc3QgKGJvb2ttYXJrLWNvbXBsZXRpbmctcmVh ZCAiSW5zZXJ0IGJvb2ttYXJrIGxvY2F0aW9uIikpKQogIChvciBuby1oaXN0b3J5IChib29rbWFy ay1tYXliZS1oaXN0b3JpY2l6ZS1zdHJpbmcgYm9va21hcmstbmFtZSkpCiAgKGluc2VydCAoYm9v a21hcmstbG9jYXRpb24gYm9va21hcmstbmFtZSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZmFsaWFz ICdib29rbWFyay1sb2NhdGUgJ2Jvb2ttYXJrLWluc2VydC1sb2NhdGlvbikKCihkZWZ1biBib29r bWFyay1sb2NhdGlvbiAoYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgIlJldHVybiBhIGRlc2Ny aXB0aW9uIG9mIHRoZSBsb2NhdGlvbiBvZiBCT09LTUFSSy1OQU1FLU9SLVJFQ09SRC4iCiAgKGJv b2ttYXJrLW1heWJlLWxvYWQtZGVmYXVsdC1maWxlKQogIDs7IFdlIGNvdWxkIGNhbGwgdGhlIGBo YW5kbGVyJyBhbmQgYXNrIGZvciBpdCB0byBjb25zdHJ1Y3QgYSBkZXNjcmlwdGlvbgogIDs7IGR5 bmFtaWNhbGx5OiBpdCB3b3VsZCBvcGVuIHVwIHNldmVyYWwgbmV3IHBvc3NpYmlsaXRpZXMsIGJ1 dCBpdAogIDs7IHdvdWxkIGhhdmUgdGhlIG1ham9yIGRpc2FkdmFudGFnZSBvZiBmb3JjaW5nIHRv IGxvYWQgZWFjaCBhbmQKICA7OyBldmVyeSBoYW5kbGVyIHdoZW4gdGhlIHVzZXIgY2FsbHMgYm9v a21hcmstbWVudS4KICAob3IgKGJvb2ttYXJrLXByb3AtZ2V0IGJvb2ttYXJrLW5hbWUtb3ItcmVj b3JkICdsb2NhdGlvbikKICAgICAgKGJvb2ttYXJrLWdldC1maWxlbmFtZSBib29rbWFyay1uYW1l LW9yLXJlY29yZCkKICAgICAgIi0tIFVua25vd24gbG9jYXRpb24gLS0iKSkKCjs7OyMjI2F1dG9s b2FkCihkZWZ1biBib29rbWFyay1yZW5hbWUgKG9sZC1uYW1lICZvcHRpb25hbCBuZXctbmFtZSkK ICAiQ2hhbmdlIHRoZSBuYW1lIG9mIE9MRC1OQU1FIGJvb2ttYXJrIHRvIE5FVy1OQU1FIG5hbWUu CklmIGNhbGxlZCBmcm9tIGtleWJvYXJkLCBwcm9tcHQgZm9yIE9MRC1OQU1FIGFuZCBORVctTkFN RS4KSWYgY2FsbGVkIGZyb20gbWVudWJhciwgc2VsZWN0IE9MRC1OQU1FIGZyb20gYSBtZW51IGFu ZCBwcm9tcHQgZm9yIE5FVy1OQU1FLgoKSWYgY2FsbGVkIGZyb20gTGlzcCwgcHJvbXB0IGZvciBO RVctTkFNRSBpZiBvbmx5IE9MRC1OQU1FIHdhcyBwYXNzZWQKYXMgYW4gYXJndW1lbnQuICBJZiBj YWxsZWQgd2l0aCB0d28gc3RyaW5ncywgdGhlbiBubyBwcm9tcHRpbmcgaXMgZG9uZS4KWW91IG11 c3QgcGFzcyBhdCBsZWFzdCBPTEQtTkFNRSB3aGVuIGNhbGxpbmcgZnJvbSBMaXNwLgoKV2hpbGUg eW91IGFyZSBlbnRlcmluZyB0aGUgbmV3IG5hbWUsIGNvbnNlY3V0aXZlIFwKXFw8Ym9va21hcmst bWluaWJ1ZmZlci1yZWFkLW5hbWUtbWFwPlxcW2Jvb2ttYXJrLXlhbmstd29yZF0ncyBpbnNlcnQK Y29uc2VjdXRpdmUgd29yZHMgZnJvbSB0aGUgdGV4dCBvZiB0aGUgYnVmZmVyIGludG8gdGhlIG5l dyBib29rbWFyawpuYW1lLiIKICAoaW50ZXJhY3RpdmUgKGxpc3QgKGJvb2ttYXJrLWNvbXBsZXRp bmctcmVhZCAiT2xkIGJvb2ttYXJrIG5hbWUiKSkpCiAgKGJvb2ttYXJrLW1heWJlLWhpc3Rvcmlj aXplLXN0cmluZyBvbGQtbmFtZSkKICAoYm9va21hcmstbWF5YmUtbG9hZC1kZWZhdWx0LWZpbGUp CgogIChzZXRxIGJvb2ttYXJrLXlhbmstcG9pbnQgKHBvaW50KSkKICAoc2V0cSBib29rbWFyay1j dXJyZW50LWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQogIChsZXQgKChmaW5hbC1uZXctbmFtZQog ICAgICAgICAob3IgbmV3LW5hbWUgICA7IHVzZSBzZWNvbmQgYXJnLCBpZiBub24tbmlsCiAgICAg ICAgICAgICAocmVhZC1mcm9tLW1pbmlidWZmZXIKICAgICAgICAgICAgICAiTmV3IG5hbWU6ICIK ICAgICAgICAgICAgICBuaWwKICAgICAgICAgICAgICAoZGVmaW5lLWtleW1hcAogICAgICAgICAg ICAgICAgOnBhcmVudCBtaW5pYnVmZmVyLWxvY2FsLW1hcAogICAgICAgICAgICAgICAgIkMtdyIg Iydib29rbWFyay15YW5rLXdvcmQpCiAgICAgICAgICAgICAgbmlsCiAgICAgICAgICAgICAgJ2Jv b2ttYXJrLWhpc3RvcnkpKSkpCiAgICAoYm9va21hcmstc2V0LW5hbWUgb2xkLW5hbWUgZmluYWwt bmV3LW5hbWUpCiAgICAoYm9va21hcmstdXBkYXRlLWxhc3QtbW9kaWZpZWQgZmluYWwtbmV3LW5h bWUpCiAgICAoc2V0cSBib29rbWFyay1jdXJyZW50LWJvb2ttYXJrIGZpbmFsLW5ldy1uYW1lKQog ICAgKGJvb2ttYXJrLWJtZW51LXN1cnJlcHRpdGlvdXNseS1yZWJ1aWxkLWxpc3QpCiAgICAoc2V0 cSBib29rbWFyay1hbGlzdC1tb2RpZmljYXRpb24tY291bnQKICAgICAgICAgICgxKyBib29rbWFy ay1hbGlzdC1tb2RpZmljYXRpb24tY291bnQpKQogICAgKGlmIChib29rbWFyay10aW1lLXRvLXNh dmUtcCkKICAgICAgICAoYm9va21hcmstc2F2ZSkpKSkKCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4g Ym9va21hcmstaW5zZXJ0IChib29rbWFyay1uYW1lKQogICJJbnNlcnQgdGhlIHRleHQgb2YgdGhl IGZpbGUgcG9pbnRlZCB0byBieSBib29rbWFyayBCT09LTUFSSy1OQU1FLgpCT09LTUFSSy1OQU1F IGlzIGEgYm9va21hcmsgbmFtZSAoYSBzdHJpbmcpLCBub3QgYSBib29rbWFyayByZWNvcmQuCgpZ b3UgbWF5IGhhdmUgYSBwcm9ibGVtIHVzaW5nIHRoaXMgZnVuY3Rpb24gaWYgdGhlIHZhbHVlIG9m IHZhcmlhYmxlCmBib29rbWFyay1hbGlzdCcgaXMgbmlsLiAgSWYgdGhhdCBoYXBwZW5zLCB5b3Ug bmVlZCB0byBsb2FkIGluIHNvbWUKYm9va21hcmtzLiAgU2VlIGhlbHAgb24gZnVuY3Rpb24gYGJv b2ttYXJrLWxvYWQnIGZvciBtb3JlIGFib3V0CnRoaXMuIgogIChpbnRlcmFjdGl2ZSAobGlzdCAo Ym9va21hcmstY29tcGxldGluZy1yZWFkICJJbnNlcnQgYm9va21hcmsgY29udGVudHMiKSkpCiAg KGJvb2ttYXJrLW1heWJlLWhpc3RvcmljaXplLXN0cmluZyBib29rbWFyay1uYW1lKQogIChib29r bWFyay1tYXliZS1sb2FkLWRlZmF1bHQtZmlsZSkKICAobGV0ICgob3JpZy1wb2ludCAocG9pbnQp KQoJKHN0ci10by1pbnNlcnQKCSAoc2F2ZS1jdXJyZW50LWJ1ZmZlcgogICAgICAgICAgIChib29r bWFyay1oYW5kbGUtYm9va21hcmsgYm9va21hcmstbmFtZSkKCSAgIChidWZmZXItc3RyaW5nKSkp KQogICAgKGluc2VydCBzdHItdG8taW5zZXJ0KQogICAgKHB1c2gtbWFyaykKICAgIChnb3RvLWNo YXIgb3JpZy1wb2ludCkpKQoKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBib29rbWFyay1kZWxldGUg KGJvb2ttYXJrLW5hbWUgJm9wdGlvbmFsIGJhdGNoKQogICJEZWxldGUgQk9PS01BUkstTkFNRSBm cm9tIHRoZSBib29rbWFyayBsaXN0LgoKUmVtb3ZlcyBvbmx5IHRoZSBmaXJzdCBpbnN0YW5jZSBv ZiBhIGJvb2ttYXJrIHdpdGggdGhhdCBuYW1lLiAgSWYKdGhlcmUgYXJlIG9uZSBvciBtb3JlIG90 aGVyIGJvb2ttYXJrcyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZXkgd2lsbApub3QgYmUgZGVsZXRl ZC4gIERlZmF1bHRzIHRvIHRoZSBcImN1cnJlbnRcIiBib29rbWFyayAodGhhdCBpcywgdGhlCm9u ZSBtb3N0IHJlY2VudGx5IHVzZWQgaW4gdGhpcyBmaWxlLCBpZiBhbnkpLgpPcHRpb25hbCBzZWNv bmQgYXJnIEJBVENIIG1lYW5zIGRvbid0IHVwZGF0ZSB0aGUgYm9va21hcmsgbGlzdCBidWZmZXIs CnByb2JhYmx5IGJlY2F1c2Ugd2Ugd2VyZSBjYWxsZWQgZnJvbSB0aGVyZS4iCiAgKGludGVyYWN0 aXZlCiAgIChsaXN0IChib29rbWFyay1jb21wbGV0aW5nLXJlYWQgIkRlbGV0ZSBib29rbWFyayIK CQkJCSAgIGJvb2ttYXJrLWN1cnJlbnQtYm9va21hcmspKSkKICAoYm9va21hcmstbWF5YmUtaGlz dG9yaWNpemUtc3RyaW5nIGJvb2ttYXJrLW5hbWUpCiAgKGJvb2ttYXJrLW1heWJlLWxvYWQtZGVm YXVsdC1maWxlKQogIChsZXQgKCh3aWxsLWdvIChib29rbWFyay1nZXQtYm9va21hcmsgYm9va21h cmstbmFtZSAnbm9lcnJvcikpKQogICAgKGJvb2ttYXJrLS1yZW1vdmUtZnJpbmdlLW1hcmsgd2ls bC1nbykKICAgIChzZXRxIGJvb2ttYXJrLWFsaXN0IChkZWxxIHdpbGwtZ28gYm9va21hcmstYWxp c3QpKQogICAgOzsgQWRkZWQgYnkgZGIsIG5pbCBib29rbWFyay1jdXJyZW50LWJvb2ttYXJrIGlm IHRoZSBsYXN0CiAgICA7OyBvY2N1cnJlbmNlIGhhcyBiZWVuIGRlbGV0ZWQKICAgIChvciAoYm9v a21hcmstZ2V0LWJvb2ttYXJrIGJvb2ttYXJrLWN1cnJlbnQtYm9va21hcmsgJ25vZXJyb3IpCiAg ICAgICAgKHNldHEgYm9va21hcmstY3VycmVudC1ib29rbWFyayBuaWwpKSkKICAodW5sZXNzIGJh dGNoCiAgICAoYm9va21hcmstYm1lbnUtc3VycmVwdGl0aW91c2x5LXJlYnVpbGQtbGlzdCkpCiAg KHNldHEgYm9va21hcmstYWxpc3QtbW9kaWZpY2F0aW9uLWNvdW50CiAgICAgICAgKDErIGJvb2tt YXJrLWFsaXN0LW1vZGlmaWNhdGlvbi1jb3VudCkpCiAgKHdoZW4gKGJvb2ttYXJrLXRpbWUtdG8t c2F2ZS1wKQogICAgKGJvb2ttYXJrLXNhdmUpKSkKCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gYm9v a21hcmstZGVsZXRlLWFsbCAoJm9wdGlvbmFsIG5vLWNvbmZpcm0pCiAgIlBlcm1hbmVudGx5IGRl bGV0ZSBhbGwgYm9va21hcmtzLgpJZiBvcHRpb25hbCBhcmd1bWVudCBOTy1DT05GSVJNIGlzIG5v bi1uaWwsIGRvbid0IGFzayBmb3IKY29uZmlybWF0aW9uLiIKICAoaW50ZXJhY3RpdmUgIlAiKQog IDs7IFdlIGRvbid0IHVzZSBgYm9va21hcmstbWVudS1jb25maXJtLWRlbGV0aW9uJyBoZXJlIGJl Y2F1c2UgdGhhdAogIDs7IHZhcmlhYmxlIGlzIHNwZWNpZmljYWxseSB0byBjb250cm9sIGNvbmZp cm1hdGlvbiBwcm9tcHRpbmcgaW4gYQogIDs7IGJvb2ttYXJrIG1lbnUgYnVmZmVyLCB3aGVyZSB0 aGUgdXNlciBoYXMgdGhlIG1hcmtlZC1mb3ItZGVsZXRpb24KICA7OyBib29rbWFya3MgYXJyYXll ZCBpbiBmcm9udCBvZiB0aGVtIGFuZCBtaWdodCBoYXZlIGFjY2lkZW50YWxseQogIDs7IGhpdCB0 aGUga2V5IHRoYXQgZXhlY3V0ZXMgdGhlIGRlbGV0aW9ucy4gIFRoZSBVSSBzaXR1YXRpb24gaGVy ZQogIDs7IGlzIHF1aXRlIGRpZmZlcmVudCwgYnkgY29udHJhc3Q6IHRoZSB1c2VyIGdvdCB0byB0 aGlzIHBvaW50IGJ5IGEKICA7OyBzZXF1ZW5jZSBvZiBrZXlzdHJva2VzIHVubGlrZWx5IHRvIGJl IHR5cGVkIGJ5IGNoYW5jZS4KICAod2hlbiAob3Igbm8tY29uZmlybQogICAgICAgICAgICAoeWVz LW9yLW5vLXAgIlBlcm1hbmVudGx5IGRlbGV0ZSBhbGwgYm9va21hcmtzPyAiKSkKICAgIChib29r bWFyay1tYXliZS1sb2FkLWRlZmF1bHQtZmlsZSkKICAgIChzZXRxIGJvb2ttYXJrLWFsaXN0LW1v ZGlmaWNhdGlvbi1jb3VudAogICAgICAgICAgKCsgYm9va21hcmstYWxpc3QtbW9kaWZpY2F0aW9u LWNvdW50IChsZW5ndGggYm9va21hcmstYWxpc3QpKSkKICAgIChzZXRxIGJvb2ttYXJrLWFsaXN0 IG5pbCkKICAgIChib29rbWFyay1ibWVudS1zdXJyZXB0aXRpb3VzbHktcmVidWlsZC1saXN0KQog ICAgKHdoZW4gKGJvb2ttYXJrLXRpbWUtdG8tc2F2ZS1wKQogICAgICAoYm9va21hcmstc2F2ZSkp KSkKCgooZGVmdW4gYm9va21hcmstdGltZS10by1zYXZlLXAgKCZvcHRpb25hbCBmaW5hbC10aW1l KQogICJSZXR1cm4gdCBpZiBpdCBpcyB0aW1lIHRvIHNhdmUgYm9va21hcmtzIHRvIGRpc2ssIG5p bCBvdGhlcndpc2UuCk9wdGlvbmFsIGFyZ3VtZW50IEZJTkFMLVRJTUUgbWVhbnMgdGhpcyBpcyBi ZWluZyBjYWxsZWQgd2hlbiBFbWFjcwppcyBiZWluZyBraWxsZWQsIHNvIHNhdmUgZXZlbiBpZiBg Ym9va21hcmstc2F2ZS1mbGFnJyBpcyBhIG51bWJlciBhbmQKaXMgZ3JlYXRlciB0aGFuIGBib29r bWFyay1hbGlzdC1tb2RpZmljYXRpb24tY291bnQnLiIKICA7OyBCeSBHcmVnb3J5IE0uIFNhdW5k ZXJzIDxzYXVuZGVyc3tfQVRffWNpcy5vaGlvLXN0YXRlLmVkdT4KICAoY29uZCAoZmluYWwtdGlt ZQoJIChhbmQgKD4gYm9va21hcmstYWxpc3QtbW9kaWZpY2F0aW9uLWNvdW50IDApCgkgICAgICBi b29rbWFyay1zYXZlLWZsYWcpKQoJKChudW1iZXJwIGJvb2ttYXJrLXNhdmUtZmxhZykKCSAoPj0g Ym9va21hcmstYWxpc3QtbW9kaWZpY2F0aW9uLWNvdW50IGJvb2ttYXJrLXNhdmUtZmxhZykpCgko dAoJIG5pbCkpKQoKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBib29rbWFyay13cml0ZSAoKQogICJX cml0ZSBib29rbWFya3MgdG8gYSBmaWxlIChyZWFkaW5nIHRoZSBmaWxlIG5hbWUgd2l0aCB0aGUg bWluaWJ1ZmZlcikuIgogIChkZWNsYXJlIChpbnRlcmFjdGl2ZS1vbmx5IGJvb2ttYXJrLXNhdmUp KQogIChpbnRlcmFjdGl2ZSkKICAoYm9va21hcmstbWF5YmUtbG9hZC1kZWZhdWx0LWZpbGUpCiAg KGJvb2ttYXJrLXNhdmUgdCkpCgoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGJvb2ttYXJrLXNhdmUg KCZvcHRpb25hbCBwYXJnIGZpbGUgbWFrZS1kZWZhdWx0KQogICJTYXZlIGN1cnJlbnRseSBkZWZp bmVkIGJvb2ttYXJrcyBpbiBGSUxFLgpGSUxFIGRlZmF1bHRzIHRvIGBib29rbWFyay1kZWZhdWx0 LWZpbGUnLgpXaXRoIHByZWZpeCBQQVJHLCBxdWVyeSB1c2VyIGZvciBhIGZpbGUgdG8gc2F2ZSBp bi4KSWYgTUFLRS1ERUZBVUxUIGlzIG5vbi1uaWwgKGludGVyYWN0aXZlbHkgd2l0aCBwcmVmaXgg XFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBcXFt1bml2ZXJzYWwtYXJndW1lbnRdKQp0aGUgZmlsZSB3 ZSBzYXZlIGluIGJlY29tZXMgdGhlIG5ldyBkZWZhdWx0IGluIHRoZSBjdXJyZW50IEVtYWNzCnNl c3Npb24gKHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB2YWx1ZSBvZiBgYm9va21hcmstZGVmYXVsdC1m aWxlJy4pLgoKV2hlbiB5b3Ugd2FudCB0byBsb2FkIGluIHRoZSBib29rbWFya3MgZnJvbSBhIGZp bGUsIHVzZQpgYm9va21hcmstbG9hZCcsIFxcW2Jvb2ttYXJrLWxvYWRdLiAgVGhhdCBmdW5jdGlv biB3aWxsIHByb21wdCB5b3UKZm9yIGEgZmlsZSwgZGVmYXVsdGluZyB0byB0aGUgZmlsZSBkZWZp bmVkIGJ5IHZhcmlhYmxlCmBib29rbWFyay1kZWZhdWx0LWZpbGUnLiIKICAoaW50ZXJhY3RpdmUK ICAgKGxpc3QgY3VycmVudC1wcmVmaXgtYXJnIG5pbCAoZXF1YWwgJygxNikgY3VycmVudC1wcmVm aXgtYXJnKSkpCiAgKGJvb2ttYXJrLW1heWJlLWxvYWQtZGVmYXVsdC1maWxlKQogICh1bmxlc3Mg ZmlsZQogICAgKHNldHEgZmlsZQogICAgICAgICAgKGxldCAoKGRlZmF1bHQgKG9yIChjYXIgYm9v a21hcmstYm9va21hcmtzLXRpbWVzdGFtcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b29rbWFyay1kZWZhdWx0LWZpbGUpKSkKICAgICAgICAgICAgKGlmIHBhcmcKICAgICAgICAgICAg ICAgIDs7IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGBpbnRlcmFjdGl2ZScgc3BlYy4KICAg ICAgICAgICAgICAgIChyZWFkLWZpbGUtbmFtZSAoZm9ybWF0ICJGaWxlIHRvIHNhdmUgYm9va21h cmtzIGluOiAoJXMpICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl ZmF1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUtbmFtZS1kaXJlY3Rv cnkgZGVmYXVsdCkgZGVmYXVsdCkKICAgICAgICAgICAgICBkZWZhdWx0KSkpKQogIChib29rbWFy ay13cml0ZS1maWxlIGZpbGUpCiAgOzsgU2lnbmFsIHRoYXQgd2UgaGF2ZSBzeW5jZWQgdGhlIGJv b2ttYXJrIGZpbGUgYnkgc2V0dGluZyB0aGlzIHRvIDAuCiAgOzsgSWYgdGhlcmUgd2FzIGFuIGVy cm9yIGF0IGFueSBwb2ludCBiZWZvcmUsIGl0IHdpbGwgbm90IGdldCBzZXQsCiAgOzsgd2hpY2gg aXMgd2hhdCB3ZSB3YW50LgogIChzZXRxIGJvb2ttYXJrLWFsaXN0LW1vZGlmaWNhdGlvbi1jb3Vu dCAwKQogIChpZiBtYWtlLWRlZmF1bHQKICAgICAgKGxldCAoKGRlZmF1bHQgKGV4cGFuZC1maWxl LW5hbWUgZmlsZSkpKQogICAgICAgIChzZXRxIGJvb2ttYXJrLWJvb2ttYXJrcy10aW1lc3RhbXAK ICAgICAgICAgICAgICAoY29ucyBkZWZhdWx0IChudGggNSAoZmlsZS1hdHRyaWJ1dGVzIGRlZmF1 bHQpKSkpKQogICAgKGxldCAoKGRlZmF1bHQgKGNhciBib29rbWFyay1ib29rbWFya3MtdGltZXN0 YW1wKSkpCiAgICAgIChpZiAoc3RyaW5nPSBkZWZhdWx0IChleHBhbmQtZmlsZS1uYW1lIGZpbGUp KQogICAgICAgICAgKHNldHEgYm9va21hcmstYm9va21hcmtzLXRpbWVzdGFtcAogICAgICAgICAg ICAgICAgKGNvbnMgZGVmYXVsdCAobnRoIDUgKGZpbGUtYXR0cmlidXRlcyBkZWZhdWx0KSkpKSkp KSkKCgwKKGRlZnVuIGJvb2ttYXJrLXdyaXRlLWZpbGUgKGZpbGUpCiAgIldyaXRlIGBib29rbWFy ay1hbGlzdCcgdG8gRklMRS4iCiAgKGxldCAoKHJlcG9ydGVyIChtYWtlLXByb2dyZXNzLXJlcG9y dGVyCgkJICAgKGZvcm1hdCAiU2F2aW5nIGJvb2ttYXJrcyB0byBmaWxlICVzLi4uIiBmaWxlKSkp KQogICAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIgKkJvb2ttYXJr cyoiKQogICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAoZGVsZXRlLXJlZ2lvbiAo cG9pbnQtbWluKSAocG9pbnQtbWF4KSkKICAgICAgKGxldCAoKGNvZGluZy1zeXN0ZW0tZm9yLXdy aXRlCgkgICAgIChvciBjb2Rpbmctc3lzdGVtLWZvci13cml0ZQoJCSBib29rbWFyay1maWxlLWNv ZGluZy1zeXN0ZW0gJ3V0Zi04LWVtYWNzKSkKCSAgICAocHJpbnQtbGVuZ3RoIG5pbCkKCSAgICAo cHJpbnQtbGV2ZWwgbmlsKQoJICAgIDs7IFNlZSBidWcgIzEyNTAzIGZvciB3aHkgd2UgYmluZCBg cHJpbnQtY2lyY2xlJy4gIFVzZXJzCgkgICAgOzsgY2FuIGRlZmluZSB0aGVpciBvd24gYm9va21h cmsgdHlwZXMsIHdoaWNoIGNhbiByZXN1bHQgaW4KCSAgICA7OyBhcmJpdHJhcnkgTGlzcCBvYmpl Y3RzIGJlaW5nIHN0b3JlZCBpbiBib29rbWFyayByZWNvcmRzLAoJICAgIDs7IGFuZCBzb21lIHVz ZXJzIGNyZWF0ZSBvYmplY3RzIGNvbnRhaW5pbmcgY2lyY3VsYXJpdGllcy4KCSAgICAocHJpbnQt Y2lyY2xlIHQpKQoJKGluc2VydCAiKCIpCgk7OyBSYXRoZXIgdGhhbiBhIHNpbmdsZSBjYWxsIHRv IGBwcCcgd2UgbWFrZSBvbmUgcGVyIGJvb2ttYXJrLgoJOzsgQXBwYXJlbnRseSBgcHAnIGhhcyBh IHBvb3IgYWxnb3JpdGhtaWMgY29tcGxleGl0eSwgc28gdGhpcwoJOzsgc2NhbGVzIGEgbG90IGJl dHRlci4gIGJ1ZyM0NDg1LgoJKGRvbGlzdCAoaSBib29rbWFyay1hbGlzdCkgKHBwIGkgKGN1cnJl bnQtYnVmZmVyKSkpCgkoaW5zZXJ0ICIpXG4iKQoJOzsgTWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQg ZW5jb2RpbmcgY2FuIHNhZmVseSBlbmNvZGUgdGhlCgk7OyBib29rbWFya3MuICBJZiBpdCBjYW5u b3QsIHN1Z2dlc3QgdXRmLTgtZW1hY3MgYXMgZGVmYXVsdC4KCSh3aXRoLWNvZGluZy1wcmlvcml0 eSAnKHV0Zi04LWVtYWNzKQoJICAoc2V0cSBjb2Rpbmctc3lzdGVtLWZvci13cml0ZQoJCShzZWxl Y3Qtc2FmZS1jb2Rpbmctc3lzdGVtIChwb2ludC1taW4pIChwb2ludC1tYXgpCgkJCQkJICAgKGxp c3QgdCBjb2Rpbmctc3lzdGVtLWZvci13cml0ZSkpKSkKCShnb3RvLWNoYXIgKHBvaW50LW1pbikp CgkoYm9va21hcmstaW5zZXJ0LWZpbGUtZm9ybWF0LXZlcnNpb24tc3RhbXAgY29kaW5nLXN5c3Rl bS1mb3Itd3JpdGUpCgkobGV0ICgodmVyc2lvbi1jb250cm9sCgkgICAgICAgKGNvbmQKCQkoKG51 bGwgYm9va21hcmstdmVyc2lvbi1jb250cm9sKSBuaWwpCgkJKChlcSAnbmV2ZXIgYm9va21hcmst dmVyc2lvbi1jb250cm9sKSAnbmV2ZXIpCgkJKChlcSAnbm9zcGVjaWFsIGJvb2ttYXJrLXZlcnNp b24tY29udHJvbCkgdmVyc2lvbi1jb250cm9sKQoJCSh0IHQpKSkpCgkgIChjb25kaXRpb24tY2Fz ZSBuaWwKICAgICAgICAgICAgICA7OyBUaGVyZSB3YXMgYSBzdHJldGNoIG9mIHRpbWUgKGFib3V0 IDE1IHllYXJzKSB3aGVuIHdlCiAgICAgICAgICAgICAgOzsgdXNlZCBgd3JpdGUtcmVnaW9uJyBi ZWxvdyBpbnN0ZWFkIG9mIGB3cml0ZS1maWxlJywKICAgICAgICAgICAgICA7OyBiZWZvcmUgZ29p bmcgYmFjayB0byBgd3JpdGUtZmlsZScgYWdhaW4uICBTbyBpZiB5b3UncmUKICAgICAgICAgICAg ICA7OyBjb25zaWRlcmluZyBjaGFuZ2luZyBpdCB0byBgd3JpdGUtcmVnaW9uJywgcGxlYXNlIHNl ZQogICAgICAgICAgICAgIDs7IGh0dHBzOi8vZGViYnVncy5nbnUub3JnL2NnaS9idWdyZXBvcnQu Y2dpP2J1Zz0xMjUwNy4KICAgICAgICAgICAgICA7OyBUaGF0IGJ1ZyB0ZWxscyB0aGUgc3Rvcnkg b2YgaG93IHdlIGZpcnN0IHN0YXJ0ZWQgdXNpbmcKICAgICAgICAgICAgICA7OyBgd3JpdGUtcmVn aW9uJyBpbiAyMDA1Li4uCiAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICA7OyAgIGNvbW1p dCBhNTA2MDU0YWY3Y2Q4NmE2M2ZkYTk5NjA1NmMwOTMxMDk2NmYzMmVmCiAgICAgICAgICAgICAg OzsgICBBdXRob3I6ICAgICBLYXJsIEZvZ2VsIDxrZm9nZWxAcmVkLWJlYW4uY29tPgogICAgICAg ICAgICAgIDs7ICAgQXV0aG9yRGF0ZTogU2F0IE5vdiAxMiAyMDozMDoyMiAyMDA1ICswMDAwCiAg ICAgICAgICAgICAgOzsKICAgICAgICAgICAgICA7OyAgICAgICAoYm9va21hcmstd3JpdGUtZmls ZSk6IERvbid0IHZpc2l0IHRoZQogICAgICAgICAgICAgIDs7ICAgICAgIGRlc3RpbmF0aW9uIGZp bGUsIGp1c3Qgd3JpdGUgdGhlIGRhdGEgdG8gaXQKICAgICAgICAgICAgICA7OyAgICAgICB1c2lu ZyB3cml0ZS1yZWdpb24uICBUaGlzIGlzIHNpbWlsYXIgdG8KICAgICAgICAgICAgICA7OyAgICAg ICAyMDA1LTA1LTI5VDA4OjM2OjI2WiFybXNAZ251Lm9yZyBvZiBzYXZlcGxhY2UuZWwsCiAgICAg ICAgICAgICAgOzsgICAgICAgYnV0IHdpdGggYW4gYWRkaXRpb25hbCBjaGFuZ2UgdG8gYXZvaWQg dmlzaXRpbmcKICAgICAgICAgICAgICA7OyAgICAgICB0aGUgIGZpbGUgaW4gdGhlIGZpcnN0IHBs YWNlLgogICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgOzsgLi4uYW5kIG9mIGhvdyBmdXJ0 aGVyIGlucXVpcnkgbGVkIHVzIHRvIGludmVzdGlnYXRlIChpbgogICAgICAgICAgICAgIDs7IDIw MTIgYW5kIHRoZW4gYWdhaW4gaW4gMjAyMCkgYW5kIGV2ZW50dWFsbHkgZGVjaWRlIHRoYXQKICAg ICAgICAgICAgICA7OyBtYXRjaGluZyB0aGUgc2F2ZXBsYWNlLmVsIGNoYW5nZSBkb2Vzbid0IG1h a2Ugc2Vuc2UgZm9yCiAgICAgICAgICAgICAgOzsgYm9va21hcmsuZWwuICBUaGVyZWZvcmUgd2Ug cmV2ZXJ0ZWQgdG8gYHdyaXRlLWZpbGUnLAogICAgICAgICAgICAgIDs7IHdoaWNoIG1lYW5zIG51 bWJlcmVkIGJhY2t1cHMgbWF5IG5vdyBiZSBjcmVhdGVkLAogICAgICAgICAgICAgIDs7IGRlcGVu ZGluZyBvbiBgYm9va21hcmstdmVyc2lvbi1jb250cm9sJyBhcyBwZXIgYWJvdmUuCgkgICAgICAo d3JpdGUtZmlsZSBmaWxlKQoJICAgIChmaWxlLWVycm9yIChtZXNzYWdlICJDYW4ndCB3cml0ZSAl cyIgZmlsZSkpKQoJICAoc2V0cSBib29rbWFyay1maWxlLWNvZGluZy1zeXN0ZW0gY29kaW5nLXN5 c3RlbS1mb3Itd3JpdGUpCgkgIChraWxsLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQoJICAocHJv Z3Jlc3MtcmVwb3J0ZXItZG9uZSByZXBvcnRlcikpKSkpKQoKCihkZWZ1biBib29rbWFyay1pbXBv cnQtbmV3LWxpc3QgKG5ldy1saXN0KQogICJBZGQgTkVXLUxJU1Qgb2YgYm9va21hcmtzIHRvIGBi b29rbWFyay1hbGlzdCcuClJlbmFtZSBuZXcgYm9va21hcmtzIGFzIG5lZWRlZCB1c2luZyBzdWZm aXggXCI8Tj5cIiAoTj0xLDIsMy4uLiksIHdoZW4KdGhleSBjb25mbGljdCB3aXRoIGV4aXN0aW5n IGJvb2ttYXJrIG5hbWVzLiIKICAobGV0ICgobmFtZXMgKGJvb2ttYXJrLWFsbC1uYW1lcykpKQog ICAgKGRvbGlzdCAoZnVsbC1yZWNvcmQgbmV3LWxpc3QpCiAgICAgIChib29rbWFyay1tYXliZS1y ZW5hbWUgZnVsbC1yZWNvcmQgbmFtZXMpCiAgICAgIChzZXRxIGJvb2ttYXJrLWFsaXN0IChuY29u YyBib29rbWFyay1hbGlzdCAobGlzdCBmdWxsLXJlY29yZCkpKQogICAgICAocHVzaCAoYm9va21h cmstbmFtZS1mcm9tLWZ1bGwtcmVjb3JkIGZ1bGwtcmVjb3JkKSBuYW1lcykpKSkKCgooZGVmdW4g Ym9va21hcmstbWF5YmUtcmVuYW1lIChmdWxsLXJlY29yZCBuYW1lcykKICAiUmVuYW1lIGJvb2tt YXJrIEZVTEwtUkVDT1JEIGlmIGl0cyBjdXJyZW50IG5hbWUgaXMgYWxyZWFkeSB1c2VkLgpUaGlz IGlzIGEgaGVscGVyIGZvciBgYm9va21hcmstaW1wb3J0LW5ldy1saXN0Jy4iCiAgKGxldCAoKGZv dW5kLW5hbWUgKGJvb2ttYXJrLW5hbWUtZnJvbS1mdWxsLXJlY29yZCBmdWxsLXJlY29yZCkpKQog ICAgKGlmIChtZW1iZXIgZm91bmQtbmFtZSBuYW1lcykKICAgICAgICA7OyBXZSd2ZSBnb3QgYSBj b25mbGljdCwgc28gZ2VuZXJhdGUgYSBuZXcgbmFtZQogICAgICAgIChsZXQgKChjb3VudCAyKQog ICAgICAgICAgICAgIChuZXctbmFtZSBmb3VuZC1uYW1lKSkKICAgICAgICAgICh3aGlsZSAobWVt YmVyIG5ldy1uYW1lIG5hbWVzKQogICAgICAgICAgICAoc2V0cSBuZXctbmFtZSAoY29uY2F0IGZv dW5kLW5hbWUgKGZvcm1hdCAiPCVkPiIgY291bnQpKSkKICAgICAgICAgICAgKHNldHEgY291bnQg KDErIGNvdW50KSkpCiAgICAgICAgICAoYm9va21hcmstc2V0LW5hbWUgZnVsbC1yZWNvcmQgbmV3 LW5hbWUpKSkpKQoKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBib29rbWFyay1sb2FkIChmaWxlICZv cHRpb25hbCBvdmVyd3JpdGUgbm8tbXNnIGRlZmF1bHQpCiAgIkxvYWQgYm9va21hcmtzIGZyb20g RklMRSAod2hpY2ggbXVzdCBiZSBpbiBib29rbWFyayBmb3JtYXQpLgpBcHBlbmRzIGxvYWRlZCBi b29rbWFya3MgdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0IG9mIGJvb2ttYXJrcy4KSWYgYXJndW1l bnQgT1ZFUldSSVRFIGlzIG5vbi1uaWwsIGV4aXN0aW5nIGJvb2ttYXJrcyBhcmUgZGVzdHJveWVk LgpPcHRpb25hbCB0aGlyZCBhcmcgTk8tTVNHIG1lYW5zIGRvbid0IGRpc3BsYXkgYW55IG1lc3Nh Z2VzIHdoaWxlIGxvYWRpbmcuCklmIERFRkFVTFQgaXMgbm9uLW5pbCBtYWtlIEZJTEUgdGhlIG5l dyBib29rbWFyayBmaWxlIHRvIHdhdGNoLgpJbnRlcmFjdGl2ZWx5LCBhIHByZWZpeCBhcmcgbWFr ZXMgT1ZFUldSSVRFIGFuZCBERUZBVUxUIG5vbi1uaWwuCgpJZiB5b3UgbG9hZCBhIGZpbGUgdGhh dCBkb2Vzbid0IGNvbnRhaW4gYSBwcm9wZXIgYm9va21hcmsgYWxpc3QsIHlvdQp3aWxsIGNvcnJ1 cHQgRW1hY3MncyBib29rbWFyayBsaXN0LiAgR2VuZXJhbGx5LCB5b3Ugc2hvdWxkIG9ubHkgbG9h ZAppbiBmaWxlcyB0aGF0IHdlcmUgY3JlYXRlZCB3aXRoIHRoZSBib29rbWFyayBmdW5jdGlvbnMg aW4gdGhlIGZpcnN0CnBsYWNlLiAgWW91ciBvd24gcGVyc29uYWwgYm9va21hcmsgZmlsZSwgc3Bl Y2lmaWVkIGJ5IHRoZSB2YXJpYWJsZQpgYm9va21hcmstZGVmYXVsdC1maWxlJywgaXMgbWFpbnRh aW5lZCBhdXRvbWF0aWNhbGx5IGJ5IEVtYWNzOyB5b3UKc2hvdWxkbid0IG5lZWQgdG8gbG9hZCBp dCBleHBsaWNpdGx5LgoKSWYgeW91IGxvYWQgYSBmaWxlIGNvbnRhaW5pbmcgYm9va21hcmtzIHdp dGggdGhlIHNhbWUgbmFtZXMgYXMKYm9va21hcmtzIGFscmVhZHkgcHJlc2VudCBpbiB5b3VyIEVt YWNzLCB0aGUgbmV3IGJvb2ttYXJrcyB3aWxsIGdldAp1bmlxdWUgbnVtZXJpYyBzdWZmaXhlcyBc IjwyPlwiLCBcIjwzPlwiLCBldGMuIgogIChpbnRlcmFjdGl2ZQogICAobGV0ICgoZGVmYXVsdCAo YWJicmV2aWF0ZS1maWxlLW5hbWUKCQkgICAob3IgKGNhciBib29rbWFyay1ib29rbWFya3MtdGlt ZXN0YW1wKQoJCSAgICAgICAoZXhwYW5kLWZpbGUtbmFtZSBib29rbWFyay1kZWZhdWx0LWZpbGUp KSkpCgkgKHByZWZpeCBjdXJyZW50LXByZWZpeC1hcmcpKQogICAgIChsaXN0IChyZWFkLWZpbGUt bmFtZSAoZm9ybWF0ICJMb2FkIGJvb2ttYXJrcyBmcm9tOiAoJXMpICIgZGVmYXVsdCkKCQkJICAg KGZpbGUtbmFtZS1kaXJlY3RvcnkgZGVmYXVsdCkgZGVmYXVsdCAnY29uZmlybSkKCSAgIHByZWZp eCBuaWwgcHJlZml4KSkpCiAgKGxldCogKChmaWxlIChleHBhbmQtZmlsZS1uYW1lIGZpbGUpKQoJ IChhZmlsZSAoYWJicmV2aWF0ZS1maWxlLW5hbWUgZmlsZSkpKQogICAgKHVubGVzcyAoZmlsZS1y ZWFkYWJsZS1wIGZpbGUpCiAgICAgICh1c2VyLWVycm9yICJDYW5ub3QgcmVhZCBib29rbWFyayBm aWxlICVzIiBhZmlsZSkpCiAgICAobGV0ICgocmVwb3J0ZXIKCSAgICh1bmxlc3Mgbm8tbXNnCgkg ICAgIChtYWtlLXByb2dyZXNzLXJlcG9ydGVyCgkgICAgICAoZm9ybWF0ICJMb2FkaW5nIGJvb2tt YXJrcyBmcm9tICVzLi4uIiBmaWxlKSkpKSkKICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKGxl dCAoZW5hYmxlLWxvY2FsLXZhcmlhYmxlcykKCQkJICAgICAoZmluZC1maWxlLW5vc2VsZWN0IGZp bGUpKQoJKGdvdG8tY2hhciAocG9pbnQtbWluKSkKCShsZXQgKChibGlzdCAoYm9va21hcmstYWxp c3QtZnJvbS1idWZmZXIpKSkKCSAgKHVubGVzcyAobGlzdHAgYmxpc3QpCgkgICAgKGVycm9yICJJ bnZhbGlkIGJvb2ttYXJrIGxpc3QgaW4gJXMiIGZpbGUpKQoJICA7OyBSVzogVXBvbiBsb2FkaW5n IHRoZSBib29rbWFya3MsIHdlIGNvdWxkIGFkZCB0byBlYWNoIGJvb2ttYXJrCgkgIDs7IGluIGBi b29rbWFyay1hbGlzdCcgYW4gZXh0cmEga2V5IGBib29rbWFyay1maWxlJywgc28gdGhhdAoJICA7 OyB1cG9uIHJlbG9hZGluZyB0aGUgYm9va21hcmtzIHdpdGggT1ZFUldSSVRFIG5vbi1uaWwsCgkg IDs7IHdlIG92ZXJ3cml0ZSBvbmx5IHRob3NlIGJvb2ttYXJrcyBmb3Igd2hpY2ggdGhlIGtleSBg Ym9va21hcmstZmlsZScKCSAgOzsgbWF0Y2hlcyBGSUxFLiAgYGJvb2ttYXJrLXNhdmUnIGNhbiBp Z25vcmUgdGhpcyBrZXkuCgkgIDs7IFdvdWxkIHRoaXMgYmUgYSB1c2VmdWwgb3B0aW9uPwoJICAo aWYgb3ZlcndyaXRlCgkgICAgICAoc2V0cSBib29rbWFyay1hbGlzdCBibGlzdAoJCSAgICBib29r bWFyay1hbGlzdC1tb2RpZmljYXRpb24tY291bnQgMCkKCSAgICAoYm9va21hcmstaW1wb3J0LW5l dy1saXN0IGJsaXN0KQoJICAgIChzZXRxIGJvb2ttYXJrLWFsaXN0LW1vZGlmaWNhdGlvbi1jb3Vu dAoJCSAgKDErIGJvb2ttYXJrLWFsaXN0LW1vZGlmaWNhdGlvbi1jb3VudCkpKQoJICAoaWYgKG9y IGRlZmF1bHQKCQkgIChzdHJpbmc9IGZpbGUgKG9yIChjYXIgYm9va21hcmstYm9va21hcmtzLXRp bWVzdGFtcCkKCQkJCSAgICAoZXhwYW5kLWZpbGUtbmFtZSBib29rbWFyay1kZWZhdWx0LWZpbGUp KSkpCgkgICAgICAoc2V0cSBib29rbWFyay1ib29rbWFya3MtdGltZXN0YW1wCgkJICAgIChjb25z IGZpbGUgKG50aCA1IChmaWxlLWF0dHJpYnV0ZXMgZmlsZSkpKSkpCgkgIChib29rbWFyay1ibWVu dS1zdXJyZXB0aXRpb3VzbHktcmVidWlsZC1saXN0KQoJICAoc2V0cSBib29rbWFyay1maWxlLWNv ZGluZy1zeXN0ZW0gYnVmZmVyLWZpbGUtY29kaW5nLXN5c3RlbSkpCgkoa2lsbC1idWZmZXIgKGN1 cnJlbnQtYnVmZmVyKSkpCiAgICAgICh1bmxlc3Mgbm8tbXNnCgkocHJvZ3Jlc3MtcmVwb3J0ZXIt ZG9uZSByZXBvcnRlcikpKSkpCgoMCjs7OyBDb2RlIHN1cHBvcnRpbmcgdGhlIGRpcmVkLWxpa2Ug Ym9va21hcmsgbGlzdC4KOzsgUHJlZml4IGlzICJib29rbWFyay1ibWVudSIgZm9yICJidWZmZXIt bWVudSI6CgooZGVmdmFyIGJvb2ttYXJrLWJtZW51LWhpZGRlbi1ib29rbWFya3MgKCkpCgooZGVm dmFyLWtleW1hcCBib29rbWFyay1ibWVudS1tb2RlLW1hcAogIDpkb2MgIktleW1hcCBmb3IgYGJv b2ttYXJrLWJtZW51LW1vZGUnLiIKICA6cGFyZW50IHRhYnVsYXRlZC1saXN0LW1vZGUtbWFwCiAg InYiICMnYm9va21hcmstYm1lbnUtc2VsZWN0CiAgInciICMnYm9va21hcmstYm1lbnUtbG9jYXRl CiAgIjUiICMnYm9va21hcmstYm1lbnUtb3RoZXItZnJhbWUKICAiMiIgIydib29rbWFyay1ibWVu dS0yLXdpbmRvdwogICIxIiAjJ2Jvb2ttYXJrLWJtZW51LTEtd2luZG93CiAgImoiICMnYm9va21h cmstYm1lbnUtdGhpcy13aW5kb3cKICAiQy1jIEMtYyIgIydib29rbWFyay1ibWVudS10aGlzLXdp bmRvdwogICJmIiAjJ2Jvb2ttYXJrLWJtZW51LXRoaXMtd2luZG93CiAgIkMtbSIgIydib29rbWFy ay1ibWVudS10aGlzLXdpbmRvdwogICJvIiAjJ2Jvb2ttYXJrLWJtZW51LW90aGVyLXdpbmRvdwog ICJDLW8iICMnYm9va21hcmstYm1lbnUtc3dpdGNoLW90aGVyLXdpbmRvdwogICJzIiAjJ2Jvb2tt YXJrLWJtZW51LXNhdmUKICAiQy14IEMtcyIgIydib29rbWFyay1ibWVudS1zYXZlCiAgImsiICMn Ym9va21hcmstYm1lbnUtZGVsZXRlCiAgIkMtZCIgIydib29rbWFyay1ibWVudS1kZWxldGUtYmFj a3dhcmRzCiAgIngiICMnYm9va21hcmstYm1lbnUtZXhlY3V0ZS1kZWxldGlvbnMKICAiZCIgIydi b29rbWFyay1ibWVudS1kZWxldGUKICAiRCIgIydib29rbWFyay1ibWVudS1kZWxldGUtYWxsCiAg IlMtU1BDIiAjJ3ByZXZpb3VzLWxpbmUKICAiU1BDIiAjJ25leHQtbGluZQogICJERUwiICMnYm9v a21hcmstYm1lbnUtYmFja3VwLXVubWFyawogICJ1IiAjJ2Jvb2ttYXJrLWJtZW51LXVubWFyawog ICJVIiAjJ2Jvb2ttYXJrLWJtZW51LXVubWFyay1hbGwKICAibSIgIydib29rbWFyay1ibWVudS1t YXJrCiAgIk0iICMnYm9va21hcmstYm1lbnUtbWFyay1hbGwKICAibCIgIydib29rbWFyay1ibWVu dS1sb2FkCiAgInIiICMnYm9va21hcmstYm1lbnUtcmVuYW1lCiAgIlIiICMnYm9va21hcmstYm1l bnUtcmVsb2NhdGUKICAidCIgIydib29rbWFyay1ibWVudS10b2dnbGUtZmlsZW5hbWVzCiAgImEi ICMnYm9va21hcmstYm1lbnUtc2hvdy1hbm5vdGF0aW9uCiAgIkEiICMnYm9va21hcmstYm1lbnUt c2hvdy1hbGwtYW5ub3RhdGlvbnMKICAiZSIgIydib29rbWFyay1ibWVudS1lZGl0LWFubm90YXRp b24KICAiLyIgIydib29rbWFyay1ibWVudS1zZWFyY2gKICAiPG1vdXNlLTI+IiAjJ2Jvb2ttYXJr LWJtZW51LW90aGVyLXdpbmRvdy13aXRoLW1vdXNlKQoKKGVhc3ktbWVudS1kZWZpbmUgYm9va21h cmstbWVudSBib29rbWFyay1ibWVudS1tb2RlLW1hcAogICJNZW51IGZvciBgYm9va21hcmstYm1l bnUnLiIKICAnKCJCb29rbWFyayIKICAgIFsiU2VsZWN0IEJvb2ttYXJrIGluIFRoaXMgV2luZG93 IiBib29rbWFyay1ibWVudS10aGlzLXdpbmRvdyAgdF0KICAgIFsiU2VsZWN0IEJvb2ttYXJrIGlu IEZ1bGwtRnJhbWUgV2luZG93IiBib29rbWFyay1ibWVudS0xLXdpbmRvdyAgdF0KICAgIFsiU2Vs ZWN0IEJvb2ttYXJrIGluIE90aGVyIFdpbmRvdyIgYm9va21hcmstYm1lbnUtb3RoZXItd2luZG93 ICB0XQogICAgWyJTZWxlY3QgQm9va21hcmsgaW4gT3RoZXIgRnJhbWUiIGJvb2ttYXJrLWJtZW51 LW90aGVyLWZyYW1lICB0XQogICAgWyJTZWxlY3QgTWFya2VkIEJvb2ttYXJrcyIgYm9va21hcmst Ym1lbnUtc2VsZWN0IHRdCiAgICAiLS0tIgogICAgWyJNYXJrIEJvb2ttYXJrIiBib29rbWFyay1i bWVudS1tYXJrIHRdCiAgICBbIk1hcmsgYWxsIEJvb2ttYXJrcyIgYm9va21hcmstYm1lbnUtbWFy ay1hbGwgdF0KICAgIFsiVW5tYXJrIEJvb2ttYXJrIiBib29rbWFyay1ibWVudS11bm1hcmsgIHRd CiAgICBbIlVubWFyayBCYWNrd2FyZHMiIGJvb2ttYXJrLWJtZW51LWJhY2t1cC11bm1hcmsgIHRd CiAgICBbIlVubWFyayBhbGwgQm9va21hcmtzIiBib29rbWFyay1ibWVudS11bm1hcmstYWxsICB0 XQogICAgWyJUb2dnbGUgRGlzcGxheSBvZiBGaWxlbmFtZXMiIGJvb2ttYXJrLWJtZW51LXRvZ2ds ZS1maWxlbmFtZXMgIHRdCiAgICBbIkRpc3BsYXkgTG9jYXRpb24gb2YgQm9va21hcmsiIGJvb2tt YXJrLWJtZW51LWxvY2F0ZSAgdF0KICAgICItLS0iCiAgICAoIkVkaXQgQm9va21hcmtzIgogICAg IFsiUmVuYW1lIEJvb2ttYXJrIiBib29rbWFyay1ibWVudS1yZW5hbWUgIHRdCiAgICAgWyJSZWxv Y2F0ZSBCb29rbWFyaydzIEZpbGUiIGJvb2ttYXJrLWJtZW51LXJlbG9jYXRlICB0XQogICAgIFsi TWFyayBCb29rbWFyayBmb3IgRGVsZXRpb24iIGJvb2ttYXJrLWJtZW51LWRlbGV0ZSAgdF0KICAg ICBbIk1hcmsgYWxsIEJvb2ttYXJrcyBmb3IgRGVsZXRpb24iIGJvb2ttYXJrLWJtZW51LWRlbGV0 ZS1hbGwgIHRdCiAgICAgWyJEZWxldGUgTWFya2VkIEJvb2ttYXJrcyIgYm9va21hcmstYm1lbnUt ZXhlY3V0ZS1kZWxldGlvbnMgIHRdKQogICAgKCJBbm5vdGF0aW9ucyIKICAgICBbIlNob3cgQW5u b3RhdGlvbiBmb3IgQ3VycmVudCBCb29rbWFyayIgYm9va21hcmstYm1lbnUtc2hvdy1hbm5vdGF0 aW9uICB0XQogICAgIFsiU2hvdyBBbm5vdGF0aW9ucyBmb3IgQWxsIEJvb2ttYXJrcyIgYm9va21h cmstYm1lbnUtc2hvdy1hbGwtYW5ub3RhdGlvbnMgIHRdCiAgICAgWyJFZGl0IEFubm90YXRpb24g Zm9yIEN1cnJlbnQgQm9va21hcmsuIiAgYm9va21hcmstYm1lbnUtZWRpdC1hbm5vdGF0aW9uICB0 XSkKICAgICItLS0iCiAgICBbIlNhdmUgQm9va21hcmtzIiBib29rbWFyay1ibWVudS1zYXZlICB0 XQogICAgWyJMb2FkIEJvb2ttYXJrcyIgYm9va21hcmstYm1lbnUtbG9hZCAgdF0pKQoKOzsgQm9v a21hcmsgQnVmZmVyIE1lbnUgbW9kZSBpcyBzdWl0YWJsZSBvbmx5IGZvciBzcGVjaWFsbHkgZm9y bWF0dGVkCjs7IGRhdGEuCihwdXQgJ2Jvb2ttYXJrLWJtZW51LW1vZGUgJ21vZGUtY2xhc3MgJ3Nw ZWNpYWwpCgoKOzsgdG9kbzogbmVlZCB0byBkaXNwbGF5IHdoZXRoZXIgb3Igbm90IGJvb2ttYXJr IGV4aXN0cyBhcyBhIGJ1ZmZlciBpbgo7OyBmbGFnIGNvbHVtbi4KCjs7IEZvcm1hdDoKOzsgRkxB R1MgIEJPT0tNQVJLIFsgTE9DQVRJT04gXQoKCihkZWZ1biBib29rbWFyay1ibWVudS1zdXJyZXB0 aXRpb3VzbHktcmVidWlsZC1saXN0ICgpCiAgIlJlYnVpbGQgdGhlIEJvb2ttYXJrIExpc3QgaWYg aXQgZXhpc3RzLgpEb24ndCBhZmZlY3QgdGhlIGJ1ZmZlciByaW5nIG9yZGVyLiIKICAoaWYgKGdl dC1idWZmZXIgYm9va21hcmstYm1lbnUtYnVmZmVyKQogICAgICAoc2F2ZS1leGN1cnNpb24KICAg ICAgICAoc2F2ZS13aW5kb3ctZXhjdXJzaW9uCiAgICAgICAgICAoYm9va21hcmstYm1lbnUtbGlz dCkpKSkpCgooZGVmdW4gYm9va21hcmstYm1lbnUtLXJldmVydCAoKQogICJSZS1wb3B1bGF0ZSBg dGFidWxhdGVkLWxpc3QtZW50cmllcycuIgogIChsZXQgKGVudHJpZXMpCiAgICAoZG9saXN0IChm dWxsLXJlY29yZCAoYm9va21hcmstbWF5YmUtc29ydC1hbGlzdCkpCiAgICAgIChsZXQqICgobmFt ZSAgICAgICAoYm9va21hcmstbmFtZS1mcm9tLWZ1bGwtcmVjb3JkIGZ1bGwtcmVjb3JkKSkKICAg ICAgICAgICAgICh0eXBlICAgICAgIChib29rbWFyay10eXBlLWZyb20tZnVsbC1yZWNvcmQgZnVs bC1yZWNvcmQpKQogICAgICAgICAgICAgKGFubm90YXRpb24gKGJvb2ttYXJrLWdldC1hbm5vdGF0 aW9uIGZ1bGwtcmVjb3JkKSkKICAgICAgICAgICAgIChsb2NhdGlvbiAgIChib29rbWFyay1sb2Nh dGlvbiBmdWxsLXJlY29yZCkpKQogICAgICAgIChwdXNoIChsaXN0CiAgICAgICAgICAgICAgIGZ1 bGwtcmVjb3JkCiAgICAgICAgICAgICAgIGBbLChpZiAoYW5kIGFubm90YXRpb24gKG5vdCAoc3Ry aW5nLWVxdWFsIGFubm90YXRpb24gIiIpKSkKICAgICAgICAgICAgICAgICAgICAgICIqIiAiIikK ICAgICAgICAgICAgICAgICAsKGlmIChkaXNwbGF5LW1vdXNlLXApCiAgICAgICAgICAgICAgICAg ICAgICAocHJvcGVydGl6ZSBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn Zm9udC1sb2NrLWZhY2UgJ2Jvb2ttYXJrLW1lbnUtYm9va21hcmsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdtb3VzZS1mYWNlICdoaWdobGlnaHQKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdmb2xsb3ctbGluayB0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnaGVscC1lY2hvICJtb3VzZS0yOiBnbyB0byB0aGlzIGJvb2ttYXJrIGluIG90aGVy IHdpbmRvdyIpCiAgICAgICAgICAgICAgICAgICAgbmFtZSkKICAgICAgICAgICAgICAgICAsKG9y IHR5cGUgIiIpCiAgICAgICAgICAgICAgICAgLEAoaWYgYm9va21hcmstYm1lbnUtdG9nZ2xlLWZp bGVuYW1lcwogICAgICAgICAgICAgICAgICAgICAgIChsaXN0IGxvY2F0aW9uKSldKQogICAgICAg ICAgICAgIGVudHJpZXMpKSkKICAgIDs7IFRoZSB2YWx1ZSBvZiBgYm9va21hcmstc29ydC1mbGFn JyBtaWdodCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlCiAgICA7OyBsYXN0IHRpbWUgdGhlIGJ1ZmZl ciBjb250ZW50cyB3ZXJlIGdlbmVyYXRlZCwgc28gcmUtY2hlY2sgaXQuCiAgICAoY29uZCAoKGVx IGJvb2ttYXJrLXNvcnQtZmxhZyB0KQogICAgICAgICAgIChzZXRxIHRhYnVsYXRlZC1saXN0LXNv cnQta2V5ICcoIkJvb2ttYXJrIE5hbWUiIC4gbmlsKQogICAgICAgICAgICAgICAgIHRhYnVsYXRl ZC1saXN0LWVudHJpZXMgZW50cmllcykpCiAgICAgICAgICAoKG9yIChudWxsIGJvb2ttYXJrLXNv cnQtZmxhZykKICAgICAgICAgICAgICAgKGVxIGJvb2ttYXJrLXNvcnQtZmxhZyAnbGFzdC1tb2Rp ZmllZCkpCiAgICAgICAgICAgKHNldHEgdGFidWxhdGVkLWxpc3Qtc29ydC1rZXkgbmlsKQogICAg ICAgICAgIDs7IEFuZCBzaW5jZSB3ZSdyZSBub3Qgc29ydGluZyBieSBib29rbWFyayBuYW1lLCBz aG93IGJvb2ttYXJrcwogICAgICAgICAgIDs7IGFjY29yZGluZyB0byBvcmRlciBvZiBjcmVhdGlv biwgd2l0aCB0aGUgbW9zdCByZWNlbnRseQogICAgICAgICAgIDs7IGNyZWF0ZWQgYm9va21hcmtz IGF0IHRoZSB0b3AgYW5kIHRoZSBsZWFzdCByZWNlbnRseSBjcmVhdGVkCiAgICAgICAgICAgOzsg YXQgdGhlIGJvdHRvbS4KICAgICAgICAgICA7OwogICAgICAgICAgIDs7IE5vdGUgdGhhdCBjbGlj a2luZyB0aGUgY29sdW1uIHNvcnQgdG9nZ2xlIGZvciB0aGUgYm9va21hcmsKICAgICAgICAgICA7 OyBuYW1lIGNvbHVtbiB3aWxsIGludm9rZSB0aGUgYHRhYnVsYXRlZC1saXN0LW1vZGUnIHNvcnQs IHdoaWNoCiAgICAgICAgICAgOzsgdXNlcyBgYm9va21hcmstYm1lbnUtLW5hbWUtcHJlZGljYXRl JyB0byBzb3J0IGxleGljYWxseSBieQogICAgICAgICAgIDs7IGJvb2ttYXJrIG5hbWUgaW5zdGVh ZCBvZiBieSAocmV2ZXJzZSkgY3JlYXRpb24gb3JkZXIuCiAgICAgICAgICAgOzsgQ2xpY2tpbmcg dGhlIHRvZ2dsZSBhZ2FpbiB3aWxsIHJldmVyc2UgdGhlIGxleGljYWwgc29ydCwgYnV0CiAgICAg ICAgICAgOzsgdGhlIHNvcnQgd2lsbCBzdGlsbCBiZSBsZXhpY2FsIG5vdCBjcmVhdGlvbi1vcmRl ci4gIEhvd2V2ZXIsCiAgICAgICAgICAgOzsgaWYgdGhlIHVzZXIgcmV2ZXJ0cyB0aGUgYnVmZmVy LCB0aGVuIHRoZSBhYm92ZSBjaGVjayBvZgogICAgICAgICAgIDs7IGBib29rbWFyay1zb3J0LWZs YWcnIHdpbGwgaGFwcGVuIGFnYWluIGFuZCB0aGUgYnVmZmVyIHdpbGwKICAgICAgICAgICA7OyBn byBiYWNrIHRvIGEgY3JlYXRpb24tb3JkZXIgc29ydC4gIFRoaXMgaXMgYWxsIGV4cGVjdGVkCiAg ICAgICAgICAgOzsgYmVoYXZpb3IsIGFzIGRvY3VtZW50ZWQgaW4gYGJvb2ttYXJrLWJtZW51LW1v ZGUnLgogICAgICAgICAgIChzZXRxIHRhYnVsYXRlZC1saXN0LWVudHJpZXMgKHJldmVyc2UgZW50 cmllcykpKSkKICAgIDs7IEdlbmVyYXRlIHRoZSBoZWFkZXIgb25seSBhZnRlciBgdGFidWxhdGVk LWxpc3Qtc29ydC1rZXknIGlzCiAgICA7OyBzZXR0bGVkLCBiZWNhdXNlIGlmIHRoYXQncyBub24t bmlsIHRoZW4gdGhlIHNvcnQtZGlyZWN0aW9uCiAgICA7OyBpbmRpY2F0b3Igd2lsbCBiZSBzaG93 biBpbiB0aGUgbmFtZWQgY29sdW1uLCBidXQgaWYgaXQncwogICAgOzsgbmlsIHRoZW4gdGhlIGlu ZGljYXRvciB3aWxsIG5vdCBiZSBzaG93bi4KICAgICh0YWJ1bGF0ZWQtbGlzdC1pbml0LWhlYWRl cikpCiAgKHRhYnVsYXRlZC1saXN0LXByaW50IHQpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGJv b2ttYXJrLWJtZW51LWdldC1idWZmZXIgKCkKICAiUmV0dXJuIHRoZSBCb29rbWFyayBMaXN0LCBi dWlsZGluZyBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0cy4KRG9uJ3QgYWZmZWN0IHRoZSBidWZmZXIg cmluZyBvcmRlci4iCiAgKG9yIChnZXQtYnVmZmVyIGJvb2ttYXJrLWJtZW51LWJ1ZmZlcikKICAg ICAgKHNhdmUtZXhjdXJzaW9uCgkoc2F2ZS13aW5kb3ctZXhjdXJzaW9uCgkgIChib29rbWFyay1i bWVudS1saXN0KQoJICAoZ2V0LWJ1ZmZlciBib29rbWFyay1ibWVudS1idWZmZXIpKSkpKQoKKGN1 c3RvbS1hZGQtY2hvaWNlICd0YWItYmFyLW5ldy10YWItY2hvaWNlCiAgICAgICAgICAgICAgICAg ICAnKGNvbnN0IDp0YWcgIkJvb2ttYXJrIExpc3QiIGJvb2ttYXJrLWJtZW51LWdldC1idWZmZXIp KQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGJvb2ttYXJrLWJtZW51LWxpc3QgKCkKICAiRGlzcGxh eSBhIGxpc3Qgb2YgZXhpc3RpbmcgYm9va21hcmtzLgpUaGUgbGlzdCBpcyBkaXNwbGF5ZWQgaW4g YSBidWZmZXIgbmFtZWQgYCpCb29rbWFyayBMaXN0KicuClRoZSBsZWZ0bW9zdCBjb2x1bW4gZGlz cGxheXMgYSBEIGlmIHRoZSBib29rbWFyayBpcyBmbGFnZ2VkIGZvcgpkZWxldGlvbiwgb3IgPiBp ZiBpdCBpcyBmbGFnZ2VkIGZvciBkaXNwbGF5aW5nLiIKICAoaW50ZXJhY3RpdmUpCiAgKGJvb2tt YXJrLW1heWJlLWxvYWQtZGVmYXVsdC1maWxlKQogIChsZXQgKChidWYgKGdldC1idWZmZXItY3Jl YXRlIGJvb2ttYXJrLWJtZW51LWJ1ZmZlcikpKQogICAgKGlmIChjYWxsZWQtaW50ZXJhY3RpdmVs eS1wICdpbnRlcmFjdGl2ZSkKICAgICAgICAoc3dpdGNoLXRvLWJ1ZmZlciBidWYpCiAgICAgIChz ZXQtYnVmZmVyIGJ1ZikpKQogIChib29rbWFyay1ibWVudS1tb2RlKQogIChib29rbWFyay1ibWVu dS0tcmV2ZXJ0KSkKCjs7OyMjI2F1dG9sb2FkCihkZWZhbGlhcyAnbGlzdC1ib29rbWFya3MgJ2Jv b2ttYXJrLWJtZW51LWxpc3QpCjs7OyMjI2F1dG9sb2FkCihkZWZhbGlhcyAnZWRpdC1ib29rbWFy a3MgJ2Jvb2ttYXJrLWJtZW51LWxpc3QpCgooZGVmaW5lLW9ic29sZXRlLWZ1bmN0aW9uLWFsaWFz ICdib29rbWFyay1ibWVudS1zZXQtaGVhZGVyCiAgIyd0YWJ1bGF0ZWQtbGlzdC1pbml0LWhlYWRl ciAiMjguMSIpCgooZGVmaW5lLWRlcml2ZWQtbW9kZSBib29rbWFyay1ibWVudS1tb2RlIHRhYnVs YXRlZC1saXN0LW1vZGUgIkJvb2ttYXJrIE1lbnUiCiAgIk1ham9yIG1vZGUgZm9yIGVkaXRpbmcg YSBsaXN0IG9mIGJvb2ttYXJrcy4KRWFjaCBsaW5lIGRlc2NyaWJlcyBvbmUgb2YgdGhlIGJvb2tt YXJrcyBpbiBFbWFjcy4KTGV0dGVycyBkbyBub3QgaW5zZXJ0IHRoZW1zZWx2ZXM7IGluc3RlYWQs IHRoZXkgYXJlIGNvbW1hbmRzLgpCb29rbWFyayBuYW1lcyBwcmVjZWRlZCBieSBhIFwiKlwiIGhh dmUgYW5ub3RhdGlvbnMuCgpJZiBgYm9va21hcmstc29ydC1mbGFnJyBpcyBub24tbmlsLCB0aGVu IHNvcnQgdGhlIGxpc3QgYnkKYm9va21hcmsgbmFtZSAoY2FzZS1pbnNlbnNpdGl2ZWx5LCBpbiBj b2xsYXRpb24gb3JkZXIpOyB0aGUKZGlyZWN0aW9uIG9mIHRoYXQgc29ydCBjYW4gYmUgcmV2ZXJz ZWQgYnkgdXNpbmcgdGhlIGNvbHVtbiBzb3J0CnRvZ2dsZSBmb3IgdGhlIGJvb2ttYXJrIG5hbWUg Y29sdW1uLgoKSWYgYGJvb2ttYXJrLXNvcnQtZmxhZycgaXMgbmlsLCB0aGVuIHNvcnQgdGhlIGxp c3QgYnkgYm9va21hcmsKY3JlYXRpb24gb3JkZXIsIHdpdGggbW9zdCByZWNlbnRseSBjcmVhdGVk IGJvb2ttYXJrcyBvbiB0b3AuCkhvd2V2ZXIsIHRoZSBjb2x1bW4gc29ydCB0b2dnbGUgd2lsbCBz dGlsbCBhY3RpdmF0ZSAoYW5kCnRoZXJlYWZ0ZXIgdG9nZ2xlIHRoZSBkaXJlY3Rpb24gb2YpIGxl eGljYWwgc29ydGluZyBieSBib29rbWFyayBuYW1lLgpBdCBhbnkgdGltZSB5b3UgbWF5IHVzZSBc XFtyZXZlcnQtYnVmZmVyXSB0byBnbyBiYWNrIHRvIHNvcnRpbmcgYnkgY3JlYXRpb24gb3JkZXIu CgpcXDxib29rbWFyay1ibWVudS1tb2RlLW1hcD4KXFxbYm9va21hcmstYm1lbnUtbWFya10gLS0g bWFyayBib29rbWFyayB0byBiZSBkaXNwbGF5ZWQuClxcW2Jvb2ttYXJrLWJtZW51LW1hcmstYWxs XSAtLSBtYXJrIGFsbCBsaXN0ZWQgYm9va21hcmtzIHRvIGJlIGRpc3BsYXllZC4KXFxbYm9va21h cmstYm1lbnUtc2VsZWN0XSAtLSBzZWxlY3QgYm9va21hcmsgb2YgbGluZSBwb2ludCBpcyBvbi4K ICBBbHNvIHNob3cgYm9va21hcmtzIG1hcmtlZCB1c2luZyBtIGluIG90aGVyIHdpbmRvd3MuClxc W2Jvb2ttYXJrLWJtZW51LXRvZ2dsZS1maWxlbmFtZXNdIC0tIHRvZ2dsZSBkaXNwbGF5aW5nIG9m IGZpbGVuYW1lcyAodGhleSBtYXkgb2JzY3VyZSBsb25nIGJvb2ttYXJrIG5hbWVzKS4KXFxbYm9v a21hcmstYm1lbnUtbG9jYXRlXSAtLSBkaXNwbGF5IChpbiBtaW5pYnVmZmVyKSBsb2NhdGlvbiBv ZiB0aGlzIGJvb2ttYXJrLgpcXFtib29rbWFyay1ibWVudS0xLXdpbmRvd10gLS0gc2VsZWN0IHRo aXMgYm9va21hcmsgaW4gZnVsbC1mcmFtZSB3aW5kb3cuClxcW2Jvb2ttYXJrLWJtZW51LTItd2lu ZG93XSAtLSBzZWxlY3QgdGhpcyBib29rbWFyayBpbiBvbmUgd2luZG93LAogIHRvZ2V0aGVyIHdp dGggYm9va21hcmsgc2VsZWN0ZWQgYmVmb3JlIHRoaXMgb25lIGluIGFub3RoZXIgd2luZG93Lgpc XFtib29rbWFyay1ibWVudS10aGlzLXdpbmRvd10gLS0gc2VsZWN0IHRoaXMgYm9va21hcmsgaW4g cGxhY2Ugb2YgdGhlIGJvb2ttYXJrIG1lbnUgYnVmZmVyLgpcXFtib29rbWFyay1ibWVudS1vdGhl ci13aW5kb3ddIC0tIHNlbGVjdCB0aGlzIGJvb2ttYXJrIGluIGFub3RoZXIgd2luZG93LAogIHNv IHRoZSBib29rbWFyayBtZW51IGJvb2ttYXJrIHJlbWFpbnMgdmlzaWJsZSBpbiBpdHMgd2luZG93 LgpcXFtib29rbWFyay1ibWVudS1vdGhlci1mcmFtZV0gLS0gc2VsZWN0IHRoaXMgYm9va21hcmsg aW4gYW5vdGhlciBmcmFtZS4KXFxbYm9va21hcmstYm1lbnUtc3dpdGNoLW90aGVyLXdpbmRvd10g LS0gc3dpdGNoIHRoZSBvdGhlciB3aW5kb3cgdG8gdGhpcyBib29rbWFyay4KXFxbYm9va21hcmst Ym1lbnUtcmVuYW1lXSAtLSByZW5hbWUgdGhpcyBib29rbWFyayAocHJvbXB0cyBmb3IgbmV3IG5h bWUpLgpcXFtib29rbWFyay1ibWVudS1yZWxvY2F0ZV0gLS0gcmVsb2NhdGUgdGhpcyBib29rbWFy aydzIGZpbGUgKHByb21wdHMgZm9yIG5ldyBmaWxlKS4KXFxbYm9va21hcmstYm1lbnUtZGVsZXRl XSAtLSBtYXJrIHRoaXMgYm9va21hcmsgdG8gYmUgZGVsZXRlZCwgYW5kIG1vdmUgZG93bi4KXFxb Ym9va21hcmstYm1lbnUtZGVsZXRlLWJhY2t3YXJkc10gLS0gbWFyayB0aGlzIGJvb2ttYXJrIHRv IGJlIGRlbGV0ZWQsIGFuZCBtb3ZlIHVwLgpcXFtib29rbWFyay1ibWVudS1kZWxldGUtYWxsXSAt LSBtYXJrIGFsbCBsaXN0ZWQgYm9va21hcmtzIGFzIHRvIGJlIGRlbGV0ZWQuClxcW2Jvb2ttYXJr LWJtZW51LWV4ZWN1dGUtZGVsZXRpb25zXSAtLSBkZWxldGUgYm9va21hcmtzIG1hcmtlZCB3aXRo IGBcXFtib29rbWFyay1ibWVudS1kZWxldGVdJyBvciBgXFxbYm9va21hcmstYm1lbnUtZGVsZXRl LWFsbF0nLgpcXFtib29rbWFyay1ibWVudS1zYXZlXSAtLSBzYXZlIHRoZSBjdXJyZW50IGJvb2tt YXJrIGxpc3QgaW4gdGhlIGRlZmF1bHQgZmlsZS4KICBXaXRoIGEgcHJlZml4IGFyZywgcHJvbXB0 cyBmb3IgYSBmaWxlIHRvIHNhdmUgaW4uClxcW2Jvb2ttYXJrLWJtZW51LWxvYWRdIC0tIGxvYWQg aW4gYSBmaWxlIG9mIGJvb2ttYXJrcyAocHJvbXB0cyBmb3IgZmlsZS4pClxcW2Jvb2ttYXJrLWJt ZW51LXVubWFya10gLS0gcmVtb3ZlIGFsbCBraW5kcyBvZiBtYXJrcyBmcm9tIGN1cnJlbnQgbGlu ZS4KICBXaXRoIHByZWZpeCBhcmd1bWVudCwgYWxzbyBtb3ZlIHVwIG9uZSBsaW5lLgpcXFtib29r bWFyay1ibWVudS1iYWNrdXAtdW5tYXJrXSAtLSBiYWNrIHVwIGEgbGluZSBhbmQgcmVtb3ZlIG1h cmtzLgpcXFtib29rbWFyay1ibWVudS11bm1hcmstYWxsXSAtLSByZW1vdmUgYWxsIGtpbmRzIG9m IG1hcmtzIGZyb20gYWxsIGxpc3RlZCBib29rbWFya3MuClxcW2Jvb2ttYXJrLWJtZW51LXNob3ct YW5ub3RhdGlvbl0gLS0gc2hvdyB0aGUgYW5ub3RhdGlvbiwgaWYgaXQgZXhpc3RzLCBmb3IgdGhl IGN1cnJlbnQgYm9va21hcmsKICBpbiBhbm90aGVyIGJ1ZmZlci4KXFxbYm9va21hcmstYm1lbnUt c2hvdy1hbGwtYW5ub3RhdGlvbnNdIC0tIHNob3cgdGhlIGFubm90YXRpb25zIG9mIGFsbCBib29r bWFya3MgaW4gYW5vdGhlciBidWZmZXIuClxcW2Jvb2ttYXJrLWJtZW51LWVkaXQtYW5ub3RhdGlv bl0gLS0gZWRpdCB0aGUgYW5ub3RhdGlvbiBmb3IgdGhlIGN1cnJlbnQgYm9va21hcmsuClxcW2Jv b2ttYXJrLWJtZW51LXNlYXJjaF0gLS0gaW5jcmVtZW50YWxseSBzZWFyY2ggZm9yIGJvb2ttYXJr cy4KXFxbcmV2ZXJ0LWJ1ZmZlcl0gLS0gcmVmcmVzaCB0aGUgYnVmZmVyLCBhbmQgdGh1cyByZWZy ZXNoIHRoZSBzb3J0IG9yZGVyICh1c2VmdWwKICBpZiBgYm9va21hcmstc29ydC1mbGFnJyBpcyBu aWwpLiIKICAoc2V0cSB0cnVuY2F0ZS1saW5lcyB0KQogIChzZXRxIGJ1ZmZlci1yZWFkLW9ubHkg dCkKICA7OyBGSVhNRTogVGhlIGhlYWRlciBjb3VsZCBhbHNvIGRpc3BsYXkgdGhlIGN1cnJlbnQg ZGVmYXVsdCBib29rbWFyayBmaWxlCiAgOzsgYWNjb3JkaW5nIHRvIGBib29rbWFyay1ib29rbWFy a3MtdGltZXN0YW1wJy4KICAoc2V0cSB0YWJ1bGF0ZWQtbGlzdC1mb3JtYXQKICAgICAgICBgWygi IiAxKSA7OyBTcGFjZSB0byBhZGQgIioiIGZvciBib29rbWFyayB3aXRoIGFubm90YXRpb24KICAg ICAgICAgICgiQm9va21hcmsgTmFtZSIKICAgICAgICAgICAsYm9va21hcmstYm1lbnUtZmlsZS1j b2x1bW4gYm9va21hcmstYm1lbnUtLW5hbWUtcHJlZGljYXRlKQogICAgICAgICAgKCJUeXBlIiA4 IGJvb2ttYXJrLWJtZW51LS10eXBlLXByZWRpY2F0ZSkKICAgICAgICAgICxAKGlmIGJvb2ttYXJr LWJtZW51LXRvZ2dsZS1maWxlbmFtZXMKICAgICAgICAgICAgICAgICcoKCJGaWxlIiAwIGJvb2tt YXJrLWJtZW51LS1maWxlLXByZWRpY2F0ZSkpKV0pCiAgKHNldHEgdGFidWxhdGVkLWxpc3QtcGFk ZGluZyBib29rbWFyay1ibWVudS1tYXJrcy13aWR0aCkKICAod2hlbiAoYW5kIGJvb2ttYXJrLXNv cnQtZmxhZwogICAgICAgICAgICAgKG5vdCAoZXEgYm9va21hcmstc29ydC1mbGFnICdsYXN0LW1v ZGlmaWVkKSkpCiAgICAoc2V0cSB0YWJ1bGF0ZWQtbGlzdC1zb3J0LWtleSAnKCJCb29rbWFyayBO YW1lIiAuIG5pbCkpKQogIChhZGQtaG9vayAndGFidWxhdGVkLWxpc3QtcmV2ZXJ0LWhvb2sgIydi b29rbWFyay1ibWVudS0tcmV2ZXJ0IG5pbCB0KScKICAoc2V0cSByZXZlcnQtYnVmZmVyLWZ1bmN0 aW9uICdib29rbWFyay1ibWVudS0tcmV2ZXJ0KQogICh0YWJ1bGF0ZWQtbGlzdC1pbml0LWhlYWRl cikpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LS1uYW1lLXByZWRpY2F0ZSAoYSBiKQogICJQcmVk aWNhdGUgdG8gc29ydCBcIipCb29rbWFyayBMaXN0KlwiIGJ1ZmZlciBieSB0aGUgbmFtZSBjb2x1 bW4uClRoaXMgaXMgdXNlZCBmb3IgYHRhYnVsYXRlZC1saXN0LWZvcm1hdCcgaW4gYGJvb2ttYXJr LWJtZW51LW1vZGUnLiIKICAoc3RyaW5nLWNvbGxhdGUtbGVzc3AgKGNhYXIgYSkgKGNhYXIgYikg bmlsIHQpKQoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LS10eXBlLXByZWRpY2F0ZSAoYSBiKQogICJQ cmVkaWNhdGUgdG8gc29ydCBcIipCb29rbWFyayBMaXN0KlwiIGJ1ZmZlciBieSB0aGUgdHlwZSBj b2x1bW4uClRoaXMgaXMgdXNlZCBmb3IgYHRhYnVsYXRlZC1saXN0LWZvcm1hdCcgaW4gYGJvb2tt YXJrLWJtZW51LW1vZGUnLiIKICAoc3RyaW5nLWNvbGxhdGUtbGVzc3AgKGVsdCAoY2FkciBhKSAy KSAoZWx0IChjYWRyIGIpIDIpIG5pbCB0KSkKCihkZWZ1biBib29rbWFyay1ibWVudS0tZmlsZS1w cmVkaWNhdGUgKGEgYikKICAiUHJlZGljYXRlIHRvIHNvcnQgXCIqQm9va21hcmsgTGlzdCpcIiBi dWZmZXIgYnkgdGhlIGZpbGUgY29sdW1uLgpUaGlzIGlzIHVzZWQgZm9yIGB0YWJ1bGF0ZWQtbGlz dC1mb3JtYXQnIGluIGBib29rbWFyay1ibWVudS1tb2RlJy4iCiAgKHN0cmluZy1jb2xsYXRlLWxl c3NwIChib29rbWFyay1sb2NhdGlvbiAoY2FyIGEpKQogICAgICAgICAgICAgICAgICAgICAgICAo Ym9va21hcmstbG9jYXRpb24gKGNhciBiKSkKICAgICAgICAgICAgICAgICAgICAgICAgbmlsIHQp KQoKCihkZWZ1biBib29rbWFyay1ibWVudS10b2dnbGUtZmlsZW5hbWVzICgmb3B0aW9uYWwgc2hv dykKICAiVG9nZ2xlIHdoZXRoZXIgZmlsZW5hbWVzIGFyZSBzaG93biBpbiB0aGUgYm9va21hcmsg bGlzdC4KT3B0aW9uYWwgYXJndW1lbnQgU0hPVyBtZWFucyBzaG93IHRoZW0gdW5jb25kaXRpb25h bGx5LiIKICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGNvbmQKICAg KHNob3cKICAgIChzZXRxIGJvb2ttYXJrLWJtZW51LXRvZ2dsZS1maWxlbmFtZXMgdCkpCiAgIChi b29rbWFyay1ibWVudS10b2dnbGUtZmlsZW5hbWVzCiAgICAoc2V0cSBib29rbWFyay1ibWVudS10 b2dnbGUtZmlsZW5hbWVzIG5pbCkpCiAgICh0CiAgICAoc2V0cSBib29rbWFyay1ibWVudS10b2dn bGUtZmlsZW5hbWVzIHQpKSkKICAoYm9va21hcmstYm1lbnUtc3VycmVwdGl0aW91c2x5LXJlYnVp bGQtbGlzdCkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LXNob3ctZmlsZW5hbWVzICgmb3B0aW9u YWwgXykKICAiSW4gYW4gaW50ZXJhY3RpdmUgYm9va21hcmsgbGlzdCwgc2hvdyBmaWxlbmFtZXMg YWxvbmcgd2l0aCBib29rbWFya3MuIgogIChzZXRxIGJvb2ttYXJrLWJtZW51LXRvZ2dsZS1maWxl bmFtZXMgdCkKICAoYm9va21hcmstYm1lbnUtc3VycmVwdGl0aW91c2x5LXJlYnVpbGQtbGlzdCkp CgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LWhpZGUtZmlsZW5hbWVzICgmb3B0aW9uYWwgXykKICAi SW4gYW4gaW50ZXJhY3RpdmUgYm9va21hcmsgbGlzdCwgaGlkZSB0aGUgZmlsZW5hbWVzIG9mIHRo ZSBib29rbWFya3MuIgogIChzZXRxIGJvb2ttYXJrLWJtZW51LXRvZ2dsZS1maWxlbmFtZXMgbmls KQogIChib29rbWFyay1ibWVudS1zdXJyZXB0aXRpb3VzbHktcmVidWlsZC1saXN0KSkKCgooZGVm dW4gYm9va21hcmstYm1lbnUtZW5zdXJlLXBvc2l0aW9uICgpCiAgIklmIHBvaW50IGlzIG5vdCBv biBhIGJvb2ttYXJrIGxpbmUsIG1vdmUgaXQgdG8gb25lLgpJZiBhZnRlciB0aGUgbGFzdCBmdWxs IGxpbmUsIG1vdmUgdG8gdGhlIGxhc3QgZnVsbCBsaW5lLiAgVGhlCnJldHVybiB2YWx1ZSBpcyB1 bmRlZmluZWQuIgogIChjb25kICgoYW5kIChib2xwKSAoZW9icCkpCiAgICAgICAgIChiZWdpbm5p bmctb2YtbGluZSAwKSkpKQoKCihkZWZ1biBib29rbWFyay1ibWVudS1ib29rbWFyayAoKQogICJS ZXR1cm4gdGhlIGJvb2ttYXJrIGZvciB0aGlzIGxpbmUgaW4gYW4gaW50ZXJhY3RpdmUgYm9va21h cmsgbGlzdCBidWZmZXIuIgogIChib29rbWFyay1ibWVudS1lbnN1cmUtcG9zaXRpb24pCiAgKGxl dCogKChpZCAodGFidWxhdGVkLWxpc3QtZ2V0LWlkKSkKICAgICAgICAgKGVudHJ5IChhbmQgaWQg KGFzc29jIGlkIHRhYnVsYXRlZC1saXN0LWVudHJpZXMpKSkpCiAgICAoaWYgZW50cnkKICAgICAg ICAoY2FhciBlbnRyeSkKICAgICAgIiIpKSkKCgooZGVmdW4gYm9va21hcmstc2hvdy1hbm5vdGF0 aW9uIChib29rbWFyay1uYW1lLW9yLXJlY29yZCkKICAiRGlzcGxheSB0aGUgYW5ub3RhdGlvbiBm b3IgQk9PS01BUkstTkFNRS1PUi1SRUNPUkQgaW4gYSBidWZmZXIuCklmIHRoZSBhbm5vdGF0aW9u IGRvZXMgbm90IGV4aXN0LCBkbyBub3RoaW5nLiIKICAobGV0ICgoYW5ub3RhdGlvbiAoYm9va21h cmstZ2V0LWFubm90YXRpb24gYm9va21hcmstbmFtZS1vci1yZWNvcmQpKSkKICAgICh3aGVuIChh bmQgYW5ub3RhdGlvbiAobm90IChzdHJpbmctZXF1YWwgYW5ub3RhdGlvbiAiIikpKQogICAgICAo c2F2ZS1leGN1cnNpb24KICAgICAgICAobGV0ICgob2xkLWJ1ZiAoY3VycmVudC1idWZmZXIpKSkK ICAgICAgICAgIChwb3AtdG8tYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKkJvb2ttYXJrIEFu bm90YXRpb24qIikgdCkKICAgICAgICAgIChsZXQgKGJ1ZmZlci1yZWFkLW9ubHkpCiAgICAgICAg ICAgIChlcmFzZS1idWZmZXIpCiAgICAgICAgICAgIChpbnNlcnQgYW5ub3RhdGlvbikKICAgICAg ICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgICAgICAgICAgKHNldC1idWZmZXItbW9k aWZpZWQtcCBuaWwpKQogICAgICAgICAgKHNldHEgYnVmZmVyLXJlYWQtb25seSB0KQogICAgICAg ICAgKHN3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93IG9sZC1idWYpKSkpKSkKCgooZGVmdW4g Ym9va21hcmstc2hvdy1hbGwtYW5ub3RhdGlvbnMgKCkKICAiRGlzcGxheSB0aGUgYW5ub3RhdGlv bnMgZm9yIGFsbCBib29rbWFya3MgaW4gYSBidWZmZXIuIgogIChzYXZlLXNlbGVjdGVkLXdpbmRv dwogICAgKHBvcC10by1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqQm9va21hcmsgQW5ub3Rh dGlvbioiKSB0KQogICAgKGxldCAoYnVmZmVyLXJlYWQtb25seSkKICAgICAgKGVyYXNlLWJ1ZmZl cikKICAgICAgKGRvbGlzdCAoZnVsbC1yZWNvcmQgKGJvb2ttYXJrLW1heWJlLXNvcnQtYWxpc3Qp KQogICAgICAgIChsZXQqICgobmFtZSAoYm9va21hcmstbmFtZS1mcm9tLWZ1bGwtcmVjb3JkIGZ1 bGwtcmVjb3JkKSkKICAgICAgICAgICAgICAgKGFubiAgKGJvb2ttYXJrLWdldC1hbm5vdGF0aW9u IGZ1bGwtcmVjb3JkKSkpCiAgICAgICAgICAoaW5zZXJ0IChjb25jYXQgbmFtZSAiOlxuIikpCiAg ICAgICAgICAoaWYgKGFuZCBhbm4gKG5vdCAoc3RyaW5nLWVxdWFsIGFubiAiIikpKQogICAgICAg ICAgICAgIDs7IGluc2VydCB0aGUgYW5ub3RhdGlvbiwgaW5kZW50ZWQgYnkgNCBzcGFjZXMuCiAg ICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24gKGluc2Vy dCBhbm4pICh1bmxlc3MgKGJvbHApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGluc2VydCAiXG4iKSkpCiAgICAgICAgICAgICAgICAod2hpbGUgKDwgKHBv aW50KSAocG9pbnQtbWF4KSkKICAgICAgICAgICAgICAgICAgKGJlZ2lubmluZy1vZi1saW5lKSAg ICAgOyBwYXJhbm9pYQogICAgICAgICAgICAgICAgICAoaW5zZXJ0ICIgICAgIikKICAgICAgICAg ICAgICAgICAgKGZvcndhcmQtbGluZSkKICAgICAgICAgICAgICAgICAgKGVuZC1vZi1saW5lKSkp KSkpCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAgIChzZXQtYnVmZmVyLW1vZGlm aWVkLXAgbmlsKSkKICAgIChzZXRxIGJ1ZmZlci1yZWFkLW9ubHkgdCkpKQoKCihkZWZ1biBib29r bWFyay1ibWVudS1tYXJrICgpCiAgIk1hcmsgYm9va21hcmsgb24gdGhpcyBsaW5lIHRvIGJlIGRp c3BsYXllZCBieSBcXDxib29rbWFyay1ibWVudS1tb2RlLW1hcD5cXFtib29rbWFyay1ibWVudS1z ZWxlY3RdLiIKICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGJvb2tt YXJrLWJtZW51LWVuc3VyZS1wb3NpdGlvbikKICAodGFidWxhdGVkLWxpc3QtcHV0LXRhZyAiPiIg dCkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LW1hcmstYWxsICgpCiAgIk1hcmsgYWxsIGxpc3Rl ZCBib29rbWFya3MgdG8gYmUgZGlzcGxheWVkIGJ5IFxcPGJvb2ttYXJrLWJtZW51LW1vZGUtbWFw PlxcW2Jvb2ttYXJrLWJtZW51LXNlbGVjdF0uIgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21hcmst Ym1lbnUtbW9kZSkKICAoc2F2ZS1leGN1cnNpb24KICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikp CiAgICAoYm9va21hcmstYm1lbnUtZW5zdXJlLXBvc2l0aW9uKQogICAgKHdoaWxlIChub3QgKGVv YnApKQogICAgICAodGFidWxhdGVkLWxpc3QtcHV0LXRhZyAiPiIgdCkpKSkKCgooZGVmdW4gYm9v a21hcmstYm1lbnUtc2VsZWN0ICgpCiAgIlNlbGVjdCB0aGlzIGxpbmUncyBib29rbWFyazsgYWxz byBkaXNwbGF5IGJvb2ttYXJrcyBtYXJrZWQgd2l0aCBgPicuCllvdSBjYW4gbWFyayBib29rbWFy a3Mgd2l0aCB0aGUgXFw8Ym9va21hcmstYm1lbnUtbW9kZS1tYXA+XFxbYm9va21hcmstYm1lbnUt bWFya10gb3IgXFw8Ym9va21hcmstYm1lbnUtbW9kZS1tYXA+XFxbYm9va21hcmstYm1lbnUtbWFy ay1hbGxdIGNvbW1hbmRzLiIKICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUp CiAgKGxldCAoKGJtcmsgKGJvb2ttYXJrLWJtZW51LWJvb2ttYXJrKSkKICAgICAgICAobWVudSAo Y3VycmVudC1idWZmZXIpKQogICAgICAgIChvdGhlcnMgKCkpCiAgICAgICAgdGVtKQogICAgKGdv dG8tY2hhciAocG9pbnQtbWluKSkKICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgIl4+IiBu aWwgdCkKICAgICAgKHNldHEgdGVtIChib29rbWFyay1ibWVudS1ib29rbWFyaykpCiAgICAgIChs ZXQgKChpbmhpYml0LXJlYWQtb25seSB0KSkKICAgICAgICAoZGVsZXRlLWNoYXIgLTEpCiAgICAg ICAgKGluc2VydCA/XHMpKQogICAgICAob3IgKHN0cmluZy1lcXVhbCB0ZW0gYm1yaykKICAgICAg ICAgIChtZW1iZXIgdGVtIG90aGVycykKICAgICAgICAgIChzZXRxIG90aGVycyAoY29ucyB0ZW0g b3RoZXJzKSkpKQogICAgKHNldHEgb3RoZXJzIChucmV2ZXJzZSBvdGhlcnMpCiAgICAgICAgICB0 ZW0gKC8gKDEtIChmcmFtZS1oZWlnaHQpKSAoMSsgKGxlbmd0aCBvdGhlcnMpKSkpCiAgICAoZGVs ZXRlLW90aGVyLXdpbmRvd3MpCiAgICAoYm9va21hcmstanVtcCBibXJrKQogICAgKGJ1cnktYnVm ZmVyIG1lbnUpCiAgICAoaWYgb3RoZXJzCiAgICAgICAgKHdoaWxlIG90aGVycwogICAgICAgICAg KHNwbGl0LXdpbmRvdyBuaWwgdGVtKQogICAgICAgICAgKG90aGVyLXdpbmRvdyAxKQogICAgICAg ICAgKGJvb2ttYXJrLWp1bXAgKGNhciBvdGhlcnMpKQogICAgICAgICAgKHNldHEgb3RoZXJzIChj ZHIgb3RoZXJzKSkpCiAgICAgIChvdGhlci13aW5kb3cgMSkpKSkKCgooZGVmdW4gYm9va21hcmst Ym1lbnUtYW55LW1hcmtzICgpCiAgIlJldHVybiBub24tbmlsIGlmIGFueSBib29rbWFya3MgYXJl IG1hcmtlZCBpbiB0aGUgbWFya3MgY29sdW1uLiIKICAoc2F2ZS1leGN1cnNpb24KICAgIChnb3Rv LWNoYXIgKHBvaW50LW1pbikpCiAgICAoYm9va21hcmstYm1lbnUtZW5zdXJlLXBvc2l0aW9uKQog ICAgKGNhdGNoICdmb3VuZC1tYXJrCiAgICAgICh3aGlsZSAobm90IChlb2JwKSkKICAgICAgICAo YmVnaW5uaW5nLW9mLWxpbmUpCiAgICAgICAgKGlmIChsb29raW5nLWF0ICJeXFxTLSIpCiAgICAg ICAgICAgICh0aHJvdyAnZm91bmQtbWFyayB0KQogICAgICAgICAgKGZvcndhcmQtbGluZSAxKSkp CiAgICAgIG5pbCkpKQoKCihkZWZ1biBib29rbWFyay1ibWVudS1zYXZlICgpCiAgIlNhdmUgdGhl IGN1cnJlbnQgbGlzdCBpbnRvIGEgYm9va21hcmsgZmlsZS4KV2l0aCBhIHByZWZpeCBhcmcsIHBy b21wdCBmb3IgYSBmaWxlIHRvIHNhdmUgdGhlbSBpbi4KClNlZSBhbHNvIHRoZSByZWxhdGVkIGJl aGF2aW9ycyBvZiBgYm9va21hcmstbG9hZCcgYW5kCmBib29rbWFyay1ibWVudS1sb2FkJy4iCiAg KGludGVyYWN0aXZlIG5pbCBib29rbWFyay1ibWVudS1tb2RlKQogIChzYXZlLWV4Y3Vyc2lvbgog ICAgKHNhdmUtd2luZG93LWV4Y3Vyc2lvbgogICAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdib29r bWFyay1zYXZlKQogICAgICAoc2V0LWJ1ZmZlci1tb2RpZmllZC1wIG5pbCkpKSkKCgooZGVmdW4g Ym9va21hcmstYm1lbnUtbG9hZCAoKQogICJMb2FkIGJvb2ttYXJrcyBmcm9tIGEgZmlsZSBhbmQg cmVidWlsZCB0aGUgYm9va21hcmsgbWVudS1idWZmZXIuClByb21wdCBmb3IgYSBmaWxlLCB3aXRo IHRoZSBkZWZhdWx0IGNob2ljZSBiZWluZyB0aGUgdmFsdWUgb2YKYGJvb2ttYXJrLWRlZmF1bHQt ZmlsZScuCgpXaXRoIGEgcHJlZml4IGFyZ3VtZW50LCByZXBsYWNlIHRoZSBjdXJyZW50IGFtYmll bnQgYm9va21hcmtzCihpLmUuLCB0aGUgb25lcyBpbiBgYm9va21hcmstYWxpc3QnKSB3aXRoIHRo ZSBvbmVzIGZyb20gdGhlIHNlbGVjdGVkCmZpbGUgYW5kIG1ha2UgdGhhdCBmaWxlIGJlIHRoZSBu ZXcgdmFsdWUgb2YgYGJvb2ttYXJrLWRlZmF1bHQtZmlsZScuCkluIG90aGVyIHdvcmRzLCBhIHBy ZWZpeCBhcmd1bWVudCBtZWFucyBcInN3aXRjaCBvdmVyIHRvIHRoZSBib29rbWFyawp1bml2ZXJz ZSBkZWZpbmVkIGluIHRoZSBsb2FkZWQgZmlsZVwiLiAgV2l0aG91dCBhIHByZWZpeCBhcmd1bWVu dCwKanVzdCBhZGQgdGhlIGxvYWRlZCBib29rbWFya3MgaW50byB0aGUgY3VycmVudCBhbWJpZW50 IHNldC4KClNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYGJvb2ttYXJrLWxvYWQnIGZvciBtb3Jl IGRldGFpbHM7IHNlZSBhbHNvCnRoZSByZWxhdGVkIGJlaGF2aW9ycyBvZiBgYm9va21hcmstc2F2 ZScgYW5kIGBib29rbWFyay1ibWVudS1zYXZlJy4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFy ay1ibWVudS1tb2RlKQogIChib29rbWFyay1ibWVudS1lbnN1cmUtcG9zaXRpb24pCiAgKHNhdmUt ZXhjdXJzaW9uCiAgICAoc2F2ZS13aW5kb3ctZXhjdXJzaW9uCiAgICAgIDs7IFRoaXMgd2lsbCBj YWxsIGBib29rbWFyay1ibWVudS1saXN0JwogICAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdib29r bWFyay1sb2FkKSkpKQoKCihkZWZ1biBib29rbWFyay1ibWVudS0xLXdpbmRvdyAoKQogICJTZWxl Y3QgdGhpcyBsaW5lJ3MgYm9va21hcmssIGFsb25lLCBpbiBmdWxsIGZyYW1lLiIKICAoaW50ZXJh Y3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGJvb2ttYXJrLWp1bXAgKGJvb2ttYXJr LWJtZW51LWJvb2ttYXJrKSkKICAoYnVyeS1idWZmZXIgKG90aGVyLWJ1ZmZlcikpCiAgKGRlbGV0 ZS1vdGhlci13aW5kb3dzKSkKCgooZGVmdW4gYm9va21hcmstYm1lbnUtMi13aW5kb3cgKCkKICAi U2VsZWN0IHRoaXMgbGluZSdzIGJvb2ttYXJrLCB3aXRoIHByZXZpb3VzIGJ1ZmZlciBpbiBzZWNv bmQgd2luZG93LiIKICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGxl dCAoKGJtcmsgKGJvb2ttYXJrLWJtZW51LWJvb2ttYXJrKSkKICAgICAgICAobWVudSAoY3VycmVu dC1idWZmZXIpKQogICAgICAgIChwb3AtdXAtd2luZG93cyB0KSkKICAgIChkZWxldGUtb3RoZXIt d2luZG93cykKICAgIChzd2l0Y2gtdG8tYnVmZmVyIChvdGhlci1idWZmZXIpIG5pbCB0KQogICAg KGJvb2ttYXJrLS1qdW1wLXZpYSBibXJrICdwb3AtdG8tYnVmZmVyKQogICAgKGJ1cnktYnVmZmVy IG1lbnUpKSkKCgooZGVmdW4gYm9va21hcmstYm1lbnUtdGhpcy13aW5kb3cgKCkKICAiU2VsZWN0 IHRoaXMgbGluZSdzIGJvb2ttYXJrIGluIHRoaXMgd2luZG93LiIKICAoaW50ZXJhY3RpdmUgbmls IGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGJvb2ttYXJrLWp1bXAgKGJvb2ttYXJrLWJtZW51LWJv b2ttYXJrKSkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LW90aGVyLXdpbmRvdyAoKQogICJTZWxl Y3QgdGhpcyBsaW5lJ3MgYm9va21hcmsgaW4gb3RoZXIgd2luZG93LCBsZWF2aW5nIGJvb2ttYXJr IG1lbnUgdmlzaWJsZS4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFyay1ibWVudS1tb2RlKQog IChsZXQgKChib29rbWFyayAoYm9va21hcmstYm1lbnUtYm9va21hcmspKSkKICAgIChib29rbWFy ay0tanVtcC12aWEgYm9va21hcmsgJ3N3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93KSkpCgoK KGRlZnVuIGJvb2ttYXJrLWJtZW51LW90aGVyLWZyYW1lICgpCiAgIlNlbGVjdCB0aGlzIGxpbmUn cyBib29rbWFyayBpbiBvdGhlciBmcmFtZS4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFyay1i bWVudS1tb2RlKQogIChsZXQgICgoYm9va21hcmsgKGJvb2ttYXJrLWJtZW51LWJvb2ttYXJrKSkK ICAgICAgICAgKHBvcC11cC1mcmFtZXMgdCkpCiAgICAoYm9va21hcmstanVtcC1vdGhlci13aW5k b3cgYm9va21hcmspKSkKCihkZWZ1biBib29rbWFyay1ibWVudS1zd2l0Y2gtb3RoZXItd2luZG93 ICgpCiAgIk1ha2UgdGhlIG90aGVyIHdpbmRvdyBzZWxlY3QgdGhpcyBsaW5lJ3MgYm9va21hcmsu ClRoZSBjdXJyZW50IHdpbmRvdyByZW1haW5zIHNlbGVjdGVkLiIKICAoaW50ZXJhY3RpdmUgbmls IGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGxldCAoKGJvb2ttYXJrIChib29rbWFyay1ibWVudS1i b29rbWFyaykpCgkoZnVuIChsYW1iZGEgKGIpIChkaXNwbGF5LWJ1ZmZlciBiIHQpKSkpCiAgICAo Ym9va21hcmstLWp1bXAtdmlhIGJvb2ttYXJrIGZ1bikpKQoKKGRlZnVuIGJvb2ttYXJrLWJtZW51 LW90aGVyLXdpbmRvdy13aXRoLW1vdXNlIChldmVudCkKICAiSnVtcCB0byBib29rbWFyayBhdCBt b3VzZSBFVkVOVCBwb3NpdGlvbiBpbiBvdGhlciB3aW5kb3cuCk1vdmUgcG9pbnQgaW4gbWVudSBi dWZmZXIgdG8gdGhlIHBvc2l0aW9uIG9mIEVWRU5UIGFuZCBsZWF2ZQpib29rbWFyayBtZW51IHZp c2libGUuIgogIChpbnRlcmFjdGl2ZSAiZSIgYm9va21hcmstYm1lbnUtbW9kZSkKICAod2l0aC1j dXJyZW50LWJ1ZmZlciAod2luZG93LWJ1ZmZlciAocG9zbi13aW5kb3cgKGV2ZW50LWVuZCBldmVu dCkpKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIgKHBvc24tcG9pbnQgKGV2 ZW50LWVuZCBldmVudCkpKQogICAgICAoYm9va21hcmstYm1lbnUtb3RoZXItd2luZG93KSkpKQoK CihkZWZ1biBib29rbWFyay1ibWVudS1zaG93LWFubm90YXRpb24gKCkKICAiU2hvdyB0aGUgYW5u b3RhdGlvbiBmb3IgdGhlIGN1cnJlbnQgYm9va21hcmsgaW4gYW5vdGhlciB3aW5kb3cuIgogIChp bnRlcmFjdGl2ZSBuaWwgYm9va21hcmstYm1lbnUtbW9kZSkKICAobGV0ICgoYm9va21hcmsgKGJv b2ttYXJrLWJtZW51LWJvb2ttYXJrKSkpCiAgICAoYm9va21hcmstc2hvdy1hbm5vdGF0aW9uIGJv b2ttYXJrKSkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LXNob3ctYWxsLWFubm90YXRpb25zICgp CiAgIlNob3cgdGhlIGFubm90YXRpb24gZm9yIGFsbCBib29rbWFya3MgaW4gYW5vdGhlciB3aW5k b3cuIgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21hcmstYm1lbnUtbW9kZSkKICAoYm9va21hcmst c2hvdy1hbGwtYW5ub3RhdGlvbnMpKQoKCihkZWZ1biBib29rbWFyay1ibWVudS1lZGl0LWFubm90 YXRpb24gKCkKICAiRWRpdCB0aGUgYW5ub3RhdGlvbiBmb3IgdGhlIGN1cnJlbnQgYm9va21hcmsg aW4gYW5vdGhlciB3aW5kb3cuIgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21hcmstYm1lbnUtbW9k ZSkKICAobGV0ICgoYm9va21hcmsgKGJvb2ttYXJrLWJtZW51LWJvb2ttYXJrKSkpCiAgICAoYm9v a21hcmstZWRpdC1hbm5vdGF0aW9uIGJvb2ttYXJrIHQpKSkKCgooZGVmdW4gYm9va21hcmstYm1l bnUtdW5tYXJrICgmb3B0aW9uYWwgYmFja3VwKQogICJDYW5jZWwgYWxsIHJlcXVlc3RlZCBvcGVy YXRpb25zIG9uIGJvb2ttYXJrIG9uIHRoaXMgbGluZSBhbmQgbW92ZSBkb3duLgpPcHRpb25hbCBC QUNLVVAgbWVhbnMgbW92ZSB1cC4iCiAgKGludGVyYWN0aXZlICJQIiBib29rbWFyay1ibWVudS1t b2RlKQogIDs7IGFueSBmbGFncyB0byByZXNldCBhY2NvcmRpbmcgdG8gY2lyY3Vtc3RhbmNlcz8g IEhvdyBhYm91dCBhCiAgOzsgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBib29rbWFyayBp cyBiZWluZyB2aXNpdGVkPwogIDs7IHdlbGwsIHdlIGRvbid0IGhhdmUgdGhpcyBub3csIHNvIG1h eWJlIGxhdGVyLgogIChib29rbWFyay1ibWVudS1lbnN1cmUtcG9zaXRpb24pCiAgKHRhYnVsYXRl ZC1saXN0LXB1dC10YWcgIiAiKQogIChmb3J3YXJkLWxpbmUgKGlmIGJhY2t1cCAtMSAxKSkpCgoK KGRlZnVuIGJvb2ttYXJrLWJtZW51LWJhY2t1cC11bm1hcmsgKCkKICAiTW92ZSB1cCBhbmQgY2Fu Y2VsIGFsbCByZXF1ZXN0ZWQgb3BlcmF0aW9ucyBvbiBib29rbWFyayBvbiBsaW5lIGFib3ZlLiIK ICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGZvcndhcmQtbGluZSAt MSkKICAoYm9va21hcmstYm1lbnUtZW5zdXJlLXBvc2l0aW9uKQogIChib29rbWFyay1ibWVudS11 bm1hcmspCiAgKGZvcndhcmQtbGluZSAtMSkKICAoYm9va21hcmstYm1lbnUtZW5zdXJlLXBvc2l0 aW9uKSkKCgooZGVmdW4gYm9va21hcmstYm1lbnUtdW5tYXJrLWFsbCAoKQogICJDYW5jZWwgYWxs IHJlcXVlc3RlZCBvcGVyYXRpb25zIG9uIGFsbCBsaXN0ZWQgYm9va21hcmtzLiIKICAoaW50ZXJh Y3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoZ290 by1jaGFyIChwb2ludC1taW4pKQogICAgKGJvb2ttYXJrLWJtZW51LWVuc3VyZS1wb3NpdGlvbikK ICAgICh3aGlsZSAobm90IChlb2JwKSkKICAgICAgKHRhYnVsYXRlZC1saXN0LXB1dC10YWcgIiAi IHQpKSkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LWRlbGV0ZSAoKQogICJNYXJrIGJvb2ttYXJr IG9uIHRoaXMgbGluZSB0byBiZSBkZWxldGVkLgpUbyBjYXJyeSBvdXQgdGhlIGRlbGV0aW9ucyB0 aGF0IHlvdSd2ZSBtYXJrZWQsIHVzZSBcXDxib29rbWFyay1ibWVudS1tb2RlLW1hcD5cXFtib29r bWFyay1ibWVudS1leGVjdXRlLWRlbGV0aW9uc10uIgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21h cmstYm1lbnUtbW9kZSkKICAoYm9va21hcmstYm1lbnUtZW5zdXJlLXBvc2l0aW9uKQogICh0YWJ1 bGF0ZWQtbGlzdC1wdXQtdGFnICJEIiB0KSkKCgooZGVmdW4gYm9va21hcmstYm1lbnUtZGVsZXRl LWJhY2t3YXJkcyAoKQogICJNYXJrIGJvb2ttYXJrIG9uIHRoaXMgbGluZSB0byBiZSBkZWxldGVk LCB0aGVuIG1vdmUgdXAgb25lIGxpbmUuClRvIGNhcnJ5IG91dCB0aGUgZGVsZXRpb25zIHRoYXQg eW91J3ZlIG1hcmtlZCwgdXNlIFxcPGJvb2ttYXJrLWJtZW51LW1vZGUtbWFwPlxcW2Jvb2ttYXJr LWJtZW51LWV4ZWN1dGUtZGVsZXRpb25zXS4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFyay1i bWVudS1tb2RlKQogIChib29rbWFyay1ibWVudS1kZWxldGUpCiAgKGZvcndhcmQtbGluZSAtMikp CgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LWRlbGV0ZS1hbGwgKCkKICAiTWFyayBhbGwgbGlzdGVk IGJvb2ttYXJrcyBhcyB0byBiZSBkZWxldGVkLgpUbyByZW1vdmUgYWxsIGRlbGV0aW9uIG1hcmtz LCB1c2UgXFw8Ym9va21hcmstYm1lbnUtbW9kZS1tYXA+XFxbYm9va21hcmstYm1lbnUtdW5tYXJr LWFsbF0uClRvIGNhcnJ5IG91dCB0aGUgZGVsZXRpb25zIHRoYXQgeW91J3ZlIG1hcmtlZCwgdXNl IFxcPGJvb2ttYXJrLWJtZW51LW1vZGUtbWFwPlxcW2Jvb2ttYXJrLWJtZW51LWV4ZWN1dGUtZGVs ZXRpb25zXS4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFyay1ibWVudS1tb2RlKQogIChzYXZl LWV4Y3Vyc2lvbgogICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgIChib29rbWFyay1ibWVu dS1lbnN1cmUtcG9zaXRpb24pCiAgICAod2hpbGUgKG5vdCAoZW9icCkpCiAgICAgICh0YWJ1bGF0 ZWQtbGlzdC1wdXQtdGFnICJEIiB0KSkpKQoKCihkZWZ1biBib29rbWFyay1ibWVudS1leGVjdXRl LWRlbGV0aW9ucyAoKQogICJEZWxldGUgYm9va21hcmtzIGZsYWdnZWQgYEQnLgpJZiBgYm9va21h cmstbWVudS1jb25maXJtLWRlbGV0aW9uJyBpcyBub24tbmlsLCBwcm9tcHQgZm9yCmNvbmZpcm1h dGlvbiBmaXJzdC4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFyay1ibWVudS1tb2RlKQogIChp ZiAoYW5kIGJvb2ttYXJrLW1lbnUtY29uZmlybS1kZWxldGlvbgogICAgICAgICAgIChub3QgKHll cy1vci1uby1wICJEZWxldGUgc2VsZWN0ZWQgYm9va21hcmtzPyAiKSkpCiAgICAgIChtZXNzYWdl ICJCb29rbWFya3Mgbm90IGRlbGV0ZWQuIikKICAgIChsZXQgKChyZXBvcnRlciAobWFrZS1wcm9n cmVzcy1yZXBvcnRlciAiRGVsZXRpbmcgYm9va21hcmtzLi4uIikpCiAgICAgICAgICAoby1wb2lu dCAgKHBvaW50KSkKICAgICAgICAgIChvLXN0ciAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAg ICAgICAgICAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKICAgICAgICAgICAgICAgICAgICAgICh1 bmxlc3MgKD0gKGZvbGxvd2luZy1jaGFyKSA/RCkKICAgICAgICAgICAgICAgICAgICAgICAgKGJ1 ZmZlci1zdWJzdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludCkKICAgICAgICAg ICAgICAgICAgICAgICAgIChwcm9nbiAoZW5kLW9mLWxpbmUpIChwb2ludCkpKSkpKQogICAgICAg ICAgKG8tY29sICAgICAoY3VycmVudC1jb2x1bW4pKSkKICAgICAgKGdvdG8tY2hhciAocG9pbnQt bWluKSkKICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiXkQiIChwb2ludC1tYXgpIHQp CiAgICAgICAgKGJvb2ttYXJrLWRlbGV0ZSAoYm9va21hcmstYm1lbnUtYm9va21hcmspIHQpKSA7 IHBhc3MgQkFUQ0ggYXJnCiAgICAgIChib29rbWFyay1ibWVudS1saXN0KQogICAgICAoaWYgby1z dHIKICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQog ICAgICAgICAgICAoc2VhcmNoLWZvcndhcmQgby1zdHIpCiAgICAgICAgICAgIChiZWdpbm5pbmct b2YtbGluZSkKICAgICAgICAgICAgKGZvcndhcmQtY2hhciBvLWNvbCkpCiAgICAgICAgKGdvdG8t Y2hhciBvLXBvaW50KSkKICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgICAocHJvZ3Jlc3Mt cmVwb3J0ZXItZG9uZSByZXBvcnRlcikpKSkKCgooZGVmdW4gYm9va21hcmstYm1lbnUtcmVuYW1l ICgpCiAgIlJlbmFtZSBib29rbWFyayBvbiBjdXJyZW50IGxpbmUuICBQcm9tcHRzIGZvciBhIG5l dyBuYW1lLiIKICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGxldCAo KGJtcmsgKGJvb2ttYXJrLWJtZW51LWJvb2ttYXJrKSkKICAgICAgICAodGhpc3BvaW50IChwb2lu dCkpKQogICAgKGJvb2ttYXJrLXJlbmFtZSBibXJrKQogICAgKGdvdG8tY2hhciB0aGlzcG9pbnQp KSkKCgooZGVmdW4gYm9va21hcmstYm1lbnUtbG9jYXRlICgpCiAgIkRpc3BsYXkgbG9jYXRpb24g b2YgdGhpcyBib29rbWFyay4gIERpc3BsYXlzIGluIHRoZSBtaW5pYnVmZmVyLiIKICAoaW50ZXJh Y3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGxldCAoKGJtcmsgKGJvb2ttYXJrLWJt ZW51LWJvb2ttYXJrKSkpCiAgICAobWVzc2FnZSAiJXMiIChib29rbWFyay1sb2NhdGlvbiBibXJr KSkpKQoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LXJlbG9jYXRlICgpCiAgIkNoYW5nZSB0aGUgYWJz b2x1dGUgZmlsZSBuYW1lIG9mIHRoZSBib29rbWFyayBvbiB0aGUgY3VycmVudCBsaW5lLgpQcm9t cHQgd2l0aCBjb21wbGV0aW9uIGZvciB0aGUgbmV3IHBhdGguIgogIChpbnRlcmFjdGl2ZSBuaWwg Ym9va21hcmstYm1lbnUtbW9kZSkKICAobGV0ICgoYm1yayAoYm9va21hcmstYm1lbnUtYm9va21h cmspKQogICAgICAgICh0aGlzcG9pbnQgKHBvaW50KSkpCiAgICAoYm9va21hcmstcmVsb2NhdGUg Ym1yaykKICAgIChnb3RvLWNoYXIgdGhpc3BvaW50KSkpCgo7OzsgQm9va21hcmstYm1lbnUgc2Vh cmNoCgooZGVmdW4gYm9va21hcmstYm1lbnUtZmlsdGVyLWFsaXN0LWJ5LXJlZ2V4cCAocmVnZXhw KQogICJGaWx0ZXIgYGJvb2ttYXJrLWFsaXN0JyB3aXRoIGJvb2ttYXJrcyBtYXRjaGluZyBSRUdF WFAgYW5kIHJlYnVpbGQgbGlzdC4iCiAgKGxldCAoKGJvb2ttYXJrLWFsaXN0CiAgICAgICAgIChj bC1sb29wIGZvciBpIGluIGJvb2ttYXJrLWFsaXN0CiAgICAgICAgICAgICAgICAgIHdoZW4gKHN0 cmluZy1tYXRjaCByZWdleHAgKGNhciBpKSkgY29sbGVjdCBpIGludG8gbmV3CiAgICAgICAgICAg ICAgICAgIGZpbmFsbHkgcmV0dXJuIG5ldykpKQogICAgKGJvb2ttYXJrLWJtZW51LWxpc3QpKSkK Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gYm9va21hcmstYm1lbnUtc2VhcmNoICgpCiAgIkluY3Jl bWVudGFsIHNlYXJjaCBvZiBib29rbWFya3MsIGhpZGluZyB0aGUgbm9uLW1hdGNoZXMgYXMgd2Ug Z28uIgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21hcmstYm1lbnUtbW9kZSkKICAobGV0ICgoYm1r IChib29rbWFyay1ibWVudS1ib29rbWFyaykpCiAgICAgICAgKHRpbWVyIG5pbCkpCiAgICAodW53 aW5kLXByb3RlY3QKICAgICAgICAobWluaWJ1ZmZlci13aXRoLXNldHVwLWhvb2sKICAgICAgICAg ICAgKGxhbWJkYSAoKQogICAgICAgICAgICAgIChzZXRxIHRpbWVyIChydW4td2l0aC1pZGxlLXRp bWVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2ttYXJrLXNlYXJjaC1kZWxheSAncmVw ZWF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGJ1ZikKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWYKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChib29rbWFyay1ibWVudS1maWx0ZXItYWxpc3QtYnktcmVnZXhwCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1pbmlidWZmZXItY29udGVudHMpKSkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50LWJ1ZmZlcikpKSkKICAgICAgICAgIChy ZWFkLXN0cmluZyAiUGF0dGVybjogIikKICAgICAgICAgICh3aGVuIHRpbWVyIChjYW5jZWwtdGlt ZXIgdGltZXIpIChzZXRxIHRpbWVyIG5pbCkpKQogICAgICAod2hlbiB0aW1lciA7OyBTaWduYWxl ZCBhbiBlcnJvciBvciBhIGBxdWl0Jy4KICAgICAgICAoY2FuY2VsLXRpbWVyIHRpbWVyKQogICAg ICAgIChib29rbWFyay1ibWVudS1saXN0KQogICAgICAgIChib29rbWFyay1ibWVudS1nb3RvLWJv b2ttYXJrIGJtaykpKSkpCgooZGVmdW4gYm9va21hcmstYm1lbnUtZ290by1ib29rbWFyayAobmFt ZSkKICAiTW92ZSBwb2ludCB0byBib29rbWFyayB3aXRoIG5hbWUgTkFNRS4iCiAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkKICAod2hpbGUgKG5vdCAob3IgKGVxdWFsIG5hbWUgKGJvb2ttYXJrLWJt ZW51LWJvb2ttYXJrKSkKICAgICAgICAgICAgICAgICAgKGVvYnApKSkKICAgIChmb3J3YXJkLWxp bmUgMSkpCiAgKGZvcndhcmQtbGluZSAwKSkKCgoMCjs7OyBNZW51IGJhciBzdHVmZi4gIFByZWZp eCBpcyAiYm9va21hcmstbWVudSIuCgooZGVmdW4gYm9va21hcmstbWVudS1wb3B1cC1wYW5lZC1t ZW51IChldmVudCBuYW1lIGVudHJpZXMpCiAgIlBvcCB1cCBtdWx0aS1wYW5lZCBtZW51IGF0IEVW RU5ULCByZXR1cm4gc3RyaW5nIGNob3NlbiBmcm9tIEVOVFJJRVMuClRoYXQgaXMsIEVOVFJJRVMg aXMgYSBsaXN0IG9mIHN0cmluZ3Mgd2hpY2ggYXBwZWFyIGFzIHRoZSBjaG9pY2VzCmluIHRoZSBt ZW51LgpUaGUgbnVtYmVyIG9mIHBhbmVzIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBlbnRyaWVz LgpUaGUgdmlzaWJsZSBlbnRyaWVzIGFyZSB0cnVuY2F0ZWQgdG8gYGJvb2ttYXJrLW1lbnUtbGVu Z3RoJywgYnV0IHRoZQpzdHJpbmdzIHJldHVybmVkIGFyZSBub3QuIgogIChsZXQgKChmLWhlaWdo dCAoLyAoZnJhbWUtaGVpZ2h0KSAyKSkKCShwYW5lLWxpc3QgbmlsKQoJKGl0ZXIgMCkpCiAgICAo d2hpbGUgZW50cmllcwogICAgICAobGV0IChsc3QKCSAgICAoY291bnQgMCkpCgkod2hpbGUgKGFu ZCAoPCBjb3VudCBmLWhlaWdodCkgZW50cmllcykKCSAgKGxldCAoKHN0ciAoY2FyIGVudHJpZXMp KSkKCSAgICAocHVzaCAoY29ucwoJCSAgIChpZiAoPiAobGVuZ3RoIHN0cikgYm9va21hcmstbWVu dS1sZW5ndGgpCgkJICAgICAgIChzdWJzdHJpbmcgc3RyIDAgYm9va21hcmstbWVudS1sZW5ndGgp CgkJICAgICBzdHIpCgkJICAgc3RyKQoJCSAgbHN0KQoJICAgIChzZXRxIGVudHJpZXMgKGNkciBl bnRyaWVzKSkKCSAgICAoc2V0cSBjb3VudCAoMSsgY291bnQpKSkpCgkoc2V0cSBpdGVyICgxKyBp dGVyKSkKCShwdXNoIChjb25zCgkgICAgICAgKGZvcm1hdCAiLSotICVzICglZCkgLSotIiBuYW1l IGl0ZXIpCgkgICAgICAgKG5yZXZlcnNlIGxzdCkpCgkgICAgICBwYW5lLWxpc3QpKSkKCiAgICA7 OyBQb3B1cCB0aGUgbWVudSBhbmQgcmV0dXJuIHRoZSBzdHJpbmcuCiAgICAoeC1wb3B1cC1tZW51 IGV2ZW50IChjb25zIChjb25jYXQgIi0qLSAiIG5hbWUgIiAtKi0iKQoJCQkgICAgICAobnJldmVy c2UgcGFuZS1saXN0KSkpKSkKCgo7OyBUaGFua3MgdG8gUm9sYW5kIE1jR3JhdGggZm9yIGZpeGlu ZyBtZW51YmFyLmVsIHNvIHRoYXQgdGhlCjs7IGZvbGxvd2luZyB3b3JrcywgYW5kIGZvciBleHBs YWluaW5nIHdoYXQgdG8gZG8gdG8gbWFrZSBpdCB3b3JrLgoKOzsgV2UgTVVTVCBhdXRvbG9hZCBF QUNIIGZvcm0gdXNlZCB0byBzZXQgdXAgdGhpcyB2YXJpYWJsZSdzIHZhbHVlLCBzbwo7OyB0aGF0 IHRoZSB3aG9sZSBqb2IgaXMgZG9uZSBpbiBsb2FkZGVmcy5lbC4KCjs7IEVtYWNzIG1lbnViYXIg c3R1ZmYuCgo7OzsjIyNhdXRvbG9hZAooZGVmdmFyIG1lbnUtYmFyLWJvb2ttYXJrLW1hcAogIChs ZXQgKChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCAiQm9va21hcmsgZnVuY3Rpb25zIikpKQogICAg KGJpbmRpbmdzLS1kZWZpbmUta2V5IG1hcCBbbG9hZF0KICAgICAgJyhtZW51LWl0ZW0gIkxvYWQg YSBCb29rbWFyayBGaWxlLi4uIiBib29rbWFyay1sb2FkCgkJICA6aGVscCAiTG9hZCBib29rbWFy a3MgZnJvbSBhIGJvb2ttYXJrIGZpbGUpIikpCiAgICAoYmluZGluZ3MtLWRlZmluZS1rZXkgbWFw IFt3cml0ZV0KICAgICAgJyhtZW51LWl0ZW0gIlNhdmUgQm9va21hcmtzIEFzLi4uIiBib29rbWFy ay13cml0ZQoJCSAgOmhlbHAgIldyaXRlIGJvb2ttYXJrcyB0byBhIGZpbGUgKHJlYWRpbmcgdGhl IGZpbGUgbmFtZSB3aXRoIHRoZSBtaW5pYnVmZmVyKSIpKQogICAgKGJpbmRpbmdzLS1kZWZpbmUt a2V5IG1hcCBbc2F2ZV0KICAgICAgJyhtZW51LWl0ZW0gIlNhdmUgQm9va21hcmtzIiBib29rbWFy ay1zYXZlCgkJICA6aGVscCAiU2F2ZSBjdXJyZW50bHkgZGVmaW5lZCBib29rbWFya3MiKSkKICAg IChiaW5kaW5ncy0tZGVmaW5lLWtleSBtYXAgW2VkaXRdCiAgICAgICcobWVudS1pdGVtICJFZGl0 IEJvb2ttYXJrIExpc3QiIGJvb2ttYXJrLWJtZW51LWxpc3QKCQkgIDpoZWxwICJEaXNwbGF5IGEg bGlzdCBvZiBleGlzdGluZyBib29rbWFya3MiKSkKICAgIChiaW5kaW5ncy0tZGVmaW5lLWtleSBt YXAgW2RlbGV0ZV0KICAgICAgJyhtZW51LWl0ZW0gIkRlbGV0ZSBCb29rbWFyay4uLiIgYm9va21h cmstZGVsZXRlCgkJICA6aGVscCAiRGVsZXRlIGEgYm9va21hcmsgZnJvbSB0aGUgYm9va21hcmsg bGlzdCIpKQogICAgKGJpbmRpbmdzLS1kZWZpbmUta2V5IG1hcCBbZGVsZXRlLWFsbF0KICAgICAg JyhtZW51LWl0ZW0gIkRlbGV0ZSBhbGwgQm9va21hcmtzLi4uIiBib29rbWFyay1kZWxldGUtYWxs CgkJICA6aGVscCAiRGVsZXRlIGFsbCBib29rbWFya3MgZnJvbSB0aGUgYm9va21hcmsgbGlzdCIp KQogICAgKGJpbmRpbmdzLS1kZWZpbmUta2V5IG1hcCBbcmVuYW1lXQogICAgICAnKG1lbnUtaXRl bSAiUmVuYW1lIEJvb2ttYXJrLi4uIiBib29rbWFyay1yZW5hbWUKCQkgIDpoZWxwICJDaGFuZ2Ug dGhlIG5hbWUgb2YgYSBib29rbWFyayIpKQogICAgKGJpbmRpbmdzLS1kZWZpbmUta2V5IG1hcCBb bG9jYXRlXQogICAgICAnKG1lbnUtaXRlbSAiSW5zZXJ0IExvY2F0aW9uLi4uIiBib29rbWFyay1s b2NhdGUKCQkgIDpoZWxwICJJbnNlcnQgdGhlIG5hbWUgb2YgdGhlIGZpbGUgYXNzb2NpYXRlZCB3 aXRoIGEgYm9va21hcmsiKSkKICAgIChiaW5kaW5ncy0tZGVmaW5lLWtleSBtYXAgW2luc2VydF0K ICAgICAgJyhtZW51LWl0ZW0gIkluc2VydCBDb250ZW50cy4uLiIgYm9va21hcmstaW5zZXJ0CgkJ ICA6aGVscCAiSW5zZXJ0IHRoZSB0ZXh0IG9mIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgYSBib29r bWFyayIpKQogICAgKGJpbmRpbmdzLS1kZWZpbmUta2V5IG1hcCBbc2V0XQogICAgICAnKG1lbnUt aXRlbSAiU2V0IEJvb2ttYXJrLi4uIiBib29rbWFyay1zZXQKCQkgIDpoZWxwICJTZXQgYSBib29r bWFyayBuYW1lZCBpbnNpZGUgYSBmaWxlLiIpKQogICAgKGJpbmRpbmdzLS1kZWZpbmUta2V5IG1h cCBbanVtcF0KICAgICAgJyhtZW51LWl0ZW0gIkp1bXAgdG8gQm9va21hcmsuLi4iIGJvb2ttYXJr LWp1bXAKCQkgIDpoZWxwICJKdW1wIHRvIGEgYm9va21hcmsgKGEgcG9pbnQgaW4gc29tZSBmaWxl KSIpKQogICAgbWFwKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZhbGlhcyAnbWVudS1iYXItYm9va21h cmstbWFwIG1lbnUtYmFyLWJvb2ttYXJrLW1hcCkKCjs7IG1ha2UgYm9va21hcmtzIGFwcGVhciB0 b3dhcmQgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG1lbnUuCihpZiAoYm91bmRwICdtZW51LWJhci1m aW5hbC1pdGVtcykKICAgIChpZiBtZW51LWJhci1maW5hbC1pdGVtcwogICAgICAgIChwdXNoICdi b29rbWFyayBtZW51LWJhci1maW5hbC1pdGVtcykpCiAgKHNldHEgbWVudS1iYXItZmluYWwtaXRl bXMgJyhib29rbWFyaykpKQoKOzs7OyBlbmQgYm9va21hcmsgbWVudSBzdHVmZiA7Ozs7CgoMCjs7 IExvYWQgSG9vawooZGVmdmFyIGJvb2ttYXJrLWxvYWQtaG9vayBuaWwKICAiSG9vayBydW4gYXQg dGhlIGVuZCBvZiBsb2FkaW5nIGxpYnJhcnkgYGJvb2ttYXJrLmVsJy4iKQoobWFrZS1vYnNvbGV0 ZS12YXJpYWJsZSAnYm9va21hcmstbG9hZC1ob29rCiAgICAgICAgICAgICAgICAgICAgICAgICJ1 c2UgYHdpdGgtZXZhbC1hZnRlci1sb2FkJyBpbnN0ZWFkLiIgIjI4LjEiKQoKOzsgRXhpdCBIb29r LCBjYWxsZWQgZnJvbSBraWxsLWVtYWNzLWhvb2sKKGRlZnZhciBib29rbWFyay1leGl0LWhvb2sg bmlsCiAgIkhvb2sgcnVuIHdoZW4gRW1hY3MgZXhpdHMuIikKCihkZWZ1biBib29rbWFyay1leGl0 LWhvb2staW50ZXJuYWwgKCkKICAiU2F2ZSBib29rbWFyayBzdGF0ZSwgaWYgbmVjZXNzYXJ5LCBh dCBFbWFjcyBleGl0IHRpbWUuClRoaXMgYWxzbyBydW5zIGBib29rbWFyay1leGl0LWhvb2snLiIK ICAocnVuLWhvb2tzICdib29rbWFyay1leGl0LWhvb2spCiAgKGFuZCAoYm9va21hcmstdGltZS10 by1zYXZlLXAgdCkKICAgICAgIChib29rbWFyay1zYXZlKSkpCgoodW5sZXNzIG5vbmludGVyYWN0 aXZlCiAgKGFkZC1ob29rICdraWxsLWVtYWNzLWhvb2sgJ2Jvb2ttYXJrLWV4aXQtaG9vay1pbnRl cm5hbCkpCgooZGVmdW4gYm9va21hcmstdW5sb2FkLWZ1bmN0aW9uICgpCiAgIlVubG9hZCB0aGUg Qm9va21hcmsgbGlicmFyeS4iCiAgKHdoZW4gYm9va21hcmstc2F2ZS1mbGFnIChib29rbWFyay1z YXZlKSkKICA7OyBjb250aW51ZSBzdGFuZGFyZCB1bmxvYWRpbmcKICBuaWwpCgoKKHJ1bi1ob29r cyAnYm9va21hcmstbG9hZC1ob29rKQoKDAo7OzsgT2Jzb2xldGU6CgooZGVmaW5lLW9ic29sZXRl LWZ1bmN0aW9uLWFsaWFzICdib29rbWFyay1zZW5kLWVkaXRlZC1hbm5vdGF0aW9uCiAgIydib29r bWFyay1lZGl0LWFubm90YXRpb24tY29uZmlybSAiMjkuMSIpCgoocHJvdmlkZSAnYm9va21hcmsp Cgo7OzsgYm9va21hcmsuZWwgZW5kcyBoZXJlCg== --_005_SJ0PR10MB5488B76B824B691EC228B84BF3669SJ0PR10MB5488namp_ Content-Type: application/octet-stream; name="bookmark-2022-08-11.el" Content-Description: bookmark-2022-08-11.el Content-Disposition: attachment; filename="bookmark-2022-08-11.el"; size=105851; creation-date="Thu, 11 Aug 2022 00:30:55 GMT"; modification-date="Sat, 13 Aug 2022 20:59:19 GMT" Content-Transfer-Encoding: base64 Ozs7IGJvb2ttYXJrLmVsIC0tLSBzZXQgYm9va21hcmtzLCBtYXliZSBhbm5vdGF0ZSB0aGVtLCBq dW1wIHRvIHRoZW0gbGF0ZXIgLSotIGxleGljYWwtYmluZGluZzogdCAtKi0KCjs7IENvcHlyaWdo dCAoQykgMTk5My0xOTk3LCAyMDAxLTIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu Cgo7OyBBdXRob3I6IEthcmwgRm9nZWwgPGtmb2dlbEByZWQtYmVhbi5jb20+Cjs7IENyZWF0ZWQ6 IEp1bHksIDE5OTMKOzsgS2V5d29yZHM6IGNvbnZlbmllbmNlCgo7OyBUaGlzIGZpbGUgaXMgcGFy dCBvZiBHTlUgRW1hY3MuCgo7OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7 OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgR05VIEVtYWNzIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7 IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7 IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCjs7IGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCjs7OyBDb21tZW50YXJ5OgoKOzsgVGhpcyBwYWNrYWdl IGlzIGZvciBzZXR0aW5nICJib29rbWFya3MiIGluIGZpbGVzLiAgQSBib29rbWFyawo7OyBhc3Nv Y2lhdGVzIGEgc3RyaW5nIHdpdGggYSBsb2NhdGlvbiBpbiBhIGNlcnRhaW4gZmlsZS4gIFRodXMs IHlvdQo7OyBjYW4gbmF2aWdhdGUgeW91ciB3YXkgdG8gdGhhdCBsb2NhdGlvbiBieSBwcm92aWRp bmcgdGhlIHN0cmluZy4KOzsKOzsgVHlwZSBgTS14IGN1c3RvbWl6ZS1ncm91cCBSRVQgYm9va21h cmsgUkVUJyBmb3IgdXNlciBvcHRpb25zLgoKDAo7OzsgQ29kZToKCihyZXF1aXJlICdwcCkKKHJl cXVpcmUgJ3RhYnVsYXRlZC1saXN0KQoocmVxdWlyZSAndGV4dC1wcm9wZXJ0eS1zZWFyY2gpCihl dmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wtbGliKSkKCjs7OyBNaXNjIGNvbW1lbnRzOgo7 Owo7OyBUaGUgYm9va21hcmsgbGlzdCBpcyBzb3J0ZWQgbGV4aWNhbGx5IGJ5IGRlZmF1bHQsIGJ1 dCB5b3UgY2FuIHR1cm4KOzsgdGhpcyBvZmYgYnkgc2V0dGluZyBib29rbWFyay1zb3J0LWZsYWcg dG8gbmlsLiAgSWYgaXQgaXMgbmlsLCB0aGVuCjs7IHRoZSBsaXN0IHdpbGwgYmUgcHJlc2VudGVk IGluIHRoZSBvcmRlciBpdCBpcyByZWNvcmRlZAo7OyAoY2hyb25vbG9naWNhbGx5KSwgd2hpY2gg aXMgYWN0dWFsbHkgZmFpcmx5IHVzZWZ1bCBhcyB3ZWxsLgoKOzs7IFVzZXIgVmFyaWFibGVzCgoo ZGVmZ3JvdXAgYm9va21hcmsgbmlsCiAgIlNldHRpbmcsIGFubm90YXRpb24gYW5kIGp1bXBpbmcg dG8gYm9va21hcmtzLiIKICA6Z3JvdXAgJ21hdGNoaW5nKQoKCihkZWZjdXN0b20gYm9va21hcmst dXNlLWFubm90YXRpb25zIG5pbAogICJJZiBub24tbmlsLCBzZXR0aW5nIGEgYm9va21hcmsgcXVl cmllcyBmb3IgYW4gYW5ub3RhdGlvbiBpbiBhIGJ1ZmZlci4iCiAgOnR5cGUgJ2Jvb2xlYW4pCgoK KGRlZmN1c3RvbSBib29rbWFyay1zYXZlLWZsYWcgdAogICJDb250cm9scyB3aGVuIEVtYWNzIHNh dmVzIGJvb2ttYXJrcyB0byBhIGZpbGUuCi0tPiBuaWwgbWVhbnMgbmV2ZXIgc2F2ZSBib29rbWFy a3MsIGV4Y2VwdCB3aGVuIGBib29rbWFyay1zYXZlJyBpcwogICAgZXhwbGljaXRseSBjYWxsZWQg KFxcW2Jvb2ttYXJrLXNhdmVdKS4KLS0+IHQgbWVhbnMgc2F2ZSBib29rbWFya3Mgd2hlbiBFbWFj cyBpcyBraWxsZWQuCi0tPiBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIG51bWJlciB0aGF0IGlz IHRoZSBmcmVxdWVuY3kgd2l0aCB3aGljaAogICAgdGhlIGJvb2ttYXJrIGxpc3QgaXMgc2F2ZWQg KGkuZS46IHRoZSBudW1iZXIgb2YgdGltZXMgd2hpY2gKICAgIEVtYWNzJ3MgYm9va21hcmsgbGlz dCBtYXkgYmUgbW9kaWZpZWQgYmVmb3JlIGl0IGlzIGF1dG9tYXRpY2FsbHkKICAgIHNhdmVkLiku ICBJZiBpdCBpcyBhIG51bWJlciwgRW1hY3Mgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgc2F2ZQog ICAgYm9va21hcmtzIHdoZW4gaXQgaXMga2lsbGVkLgoKVGhlcmVmb3JlLCB0aGUgd2F5IHRvIGdl dCBpdCB0byBzYXZlIGV2ZXJ5IHRpbWUgeW91IG1ha2Ugb3IgZGVsZXRlIGEKYm9va21hcmsgaXMg dG8gc2V0IHRoaXMgdmFyaWFibGUgdG8gMSAob3IgMCwgd2hpY2ggcHJvZHVjZXMgdGhlIHNhbWUK YmVoYXZpb3IuKQoKVG8gc3BlY2lmeSB0aGUgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZW0sIG1v ZGlmeSB0aGUgdmFyaWFibGUKYGJvb2ttYXJrLWRlZmF1bHQtZmlsZScuIgogIDp0eXBlICcoY2hv aWNlIChjb25zdCBuaWwpIGludGVnZXIgKG90aGVyIHQpKSkKCgooZGVmaW5lLW9ic29sZXRlLXZh cmlhYmxlLWFsaWFzICdib29rbWFyay1vbGQtZGVmYXVsdC1maWxlCiAgJ2Jvb2ttYXJrLWRlZmF1 bHQtZmlsZSAiMjcuMSIpCihkZWZpbmUtb2Jzb2xldGUtdmFyaWFibGUtYWxpYXMgJ2Jvb2ttYXJr LWZpbGUgJ2Jvb2ttYXJrLWRlZmF1bHQtZmlsZSAiMjcuMSIpCihkZWZjdXN0b20gYm9va21hcmst ZGVmYXVsdC1maWxlCiAgKGxvY2F0ZS11c2VyLWVtYWNzLWZpbGUgImJvb2ttYXJrcyIgIi5lbWFj cy5ibWsiKQogICJGaWxlIGluIHdoaWNoIHRvIHNhdmUgYm9va21hcmtzIGJ5IGRlZmF1bHQuIgog IDs7IFRoZSBjdXJyZW50IGRlZmF1bHQgZmlsZSBpcyBkZWZpbmVkIHZpYSB0aGUgaW50ZXJuYWwg dmFyaWFibGUKICA7OyBgYm9va21hcmstYm9va21hcmtzLXRpbWVzdGFtcCcuICBUaGlzIGRvZXMg bm90IGFmZmVjdCB0aGUgdmFsdWUKICA7OyBvZiBgYm9va21hcmstZGVmYXVsdC1maWxlJy4KICA6 dHlwZSAnZmlsZSkKCihkZWZjdXN0b20gYm9va21hcmstd2F0Y2gtYm9va21hcmstZmlsZSB0CiAg IklmIG5vbi1uaWwgd2F0Y2ggdGhlIGRlZmF1bHQgYm9va21hcmsgZmlsZS4KSWYgdGhpcyBmaWxl IGhhcyBjaGFuZ2VkIG9uIGRpc2sgc2luY2UgaXQgd2FzIGxhc3QgbG9hZGVkLCBxdWVyeSB0aGUg dXNlcgp3aGV0aGVyIHRvIGxvYWQgaXQgYWdhaW4uICBJZiB0aGUgdmFsdWUgaXMgYHNpbGVudCcg cmVsb2FkIHdpdGhvdXQgcXVlcnlpbmcuClRoaXMgZmlsZSBkZWZhdWx0cyB0byBgYm9va21hcmst ZGVmYXVsdC1maWxlJy4gIEJ1dCBkdXJpbmcgYW4gRW1hY3Mgc2Vzc2lvbiwKYGJvb2ttYXJrLWxv YWQnIGFuZCBgYm9va21hcmstc2F2ZScgY2FuIHJlZGVmaW5lIHRoZSBjdXJyZW50IGRlZmF1bHQg ZmlsZS4iCiAgOnZlcnNpb24gIjI3LjEiCiAgOnR5cGUgJ2Jvb2xlYW4KICA6Z3JvdXAgJ2Jvb2tt YXJrKQoKKGRlZmN1c3RvbSBib29rbWFyay12ZXJzaW9uLWNvbnRyb2wgJ25vc3BlY2lhbAogICJX aGV0aGVyIG9yIG5vdCB0byBtYWtlIG51bWJlcmVkIGJhY2t1cHMgb2YgdGhlIGJvb2ttYXJrIGZp bGUuCkl0IGNhbiBoYXZlIGZvdXIgdmFsdWVzOiB0LCBuaWwsIGBuZXZlcicsIG9yIGBub3NwZWNp YWwnLgpUaGUgZmlyc3QgdGhyZWUgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIHRoYXQgdGhleSBkbyBm b3IgdGhlCnZhcmlhYmxlIGB2ZXJzaW9uLWNvbnRyb2wnOyB0aGUgdmFsdWUgYG5vc3BlY2lhbCcg KHRoZSBkZWZhdWx0KSBtZWFucwpqdXN0IHVzZSB0aGUgdmFsdWUgb2YgYHZlcnNpb24tY29udHJv bCcuIgogIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJJZiBleGlzdGluZyIgbmlsKQogICAg ICAgICAgICAgICAgIChjb25zdCA6dGFnICJOZXZlciIgbmV2ZXIpCiAgICAgICAgICAgICAgICAg KGNvbnN0IDp0YWcgIlVzZSB2YWx1ZSBvZiBvcHRpb24gYHZlcnNpb24tY29udHJvbCciIG5vc3Bl Y2lhbCkKICAgICAgICAgICAgICAgICAob3RoZXIgOnRhZyAiQWx3YXlzIiB0KSkpCgoKKGRlZmN1 c3RvbSBib29rbWFyay1jb21wbGV0aW9uLWlnbm9yZS1jYXNlIHQKICAiTm9uLW5pbCBtZWFucyBi b29rbWFyayBmdW5jdGlvbnMgaWdub3JlIGNhc2UgaW4gY29tcGxldGlvbi4iCiAgOnR5cGUgJ2Jv b2xlYW4pCgoKKGRlZmN1c3RvbSBib29rbWFyay1zb3J0LWZsYWcgdAogICJUaGlzIGNvbnRyb2xz IHRoZSBib29rbWFyayBkaXNwbGF5IHNvcnRpbmcuCm5pbCBtZWFucyB0aGV5IHdpbGwgYmUgZGlz cGxheWVkIGluIExJRk8gb3JkZXIgKHRoYXQgaXMsIG1vc3QKcmVjZW50bHkgY3JlYXRlZCBvbmVz IGNvbWUgZmlyc3QsIG9sZGVzdCBvbmVzIGNvbWUgbGFzdCkuCgpgbGFzdC1tb2RpZmllZCcgbWVh bnMgdGhhdCBib29rbWFya3Mgd2lsbCBiZSBkaXNwbGF5ZWQgc29ydGVkCmZyb20gbW9zdCByZWNl bnRseSBtb2RpZmllZCB0byBsZWFzdCByZWNlbnRseSBtb2RpZmllZC4KCk90aGVyIHZhbHVlcyBt ZWFucyB0aGF0IGJvb2ttYXJrcyB3aWxsIGJlIGRpc3BsYXllZCBzb3J0ZWQgYnkKYm9va21hcmsg bmFtZS4iCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIkJ5IG5hbWUiIHQpCiAgICAgICAg ICAgICAgICAgKGNvbnN0IDp0YWcgIkJ5IG1vZGlmaWVkIHRpbWUiIGxhc3QtbW9kaWZpZWQpCiAg ICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIkJ5IGNyZWF0aW9uIHRpbWUiIG5pbCkpKQoKCihk ZWZjdXN0b20gYm9va21hcmstbWVudS1jb25maXJtLWRlbGV0aW9uIG5pbAogICJOb24tbmlsIG1l YW5zIGNvbmZpcm0gYmVmb3JlIGRlbGV0aW5nIGJvb2ttYXJrcyBpbiBhIGJvb2ttYXJrIG1lbnUg YnVmZmVyLgpOaWwgbWVhbnMgZG9uJ3QgcHJvbXB0IGZvciBjb25maXJtYXRpb24uIgogIDp2ZXJz aW9uICIyOC4xIgogIDp0eXBlICdib29sZWFuKQoKKGRlZmN1c3RvbSBib29rbWFyay1hdXRvbWF0 aWNhbGx5LXNob3ctYW5ub3RhdGlvbnMgdAogICJOb24tbmlsIG1lYW5zIHNob3cgYW5ub3RhdGlv bnMgd2hlbiBqdW1waW5nIHRvIGEgYm9va21hcmsuIgogIDp0eXBlICdib29sZWFuKQoKKGRlZmNv bnN0IGJvb2ttYXJrLWJtZW51LWJ1ZmZlciAiKkJvb2ttYXJrIExpc3QqIgogICJOYW1lIG9mIGJ1 ZmZlciB1c2VkIGZvciBCb29rbWFyayBMaXN0LiIpCgooZGVmdmFyIGJvb2ttYXJrLWJtZW51LXVz ZS1oZWFkZXItbGluZSB0CiAgIk5vbi1uaWwgbWVhbnMgdG8gdXNlIGFuIGltbW92YWJsZSBoZWFk ZXIgbGluZS4KVGhpcyBpcyBhcyBvcHBvc2VkIHRvIGlubGluZSB0ZXh0IGF0IHRoZSB0b3Agb2Yg dGhlIGJ1ZmZlci4iKQoobWFrZS1vYnNvbGV0ZS12YXJpYWJsZSAnYm9va21hcmstYm1lbnUtdXNl LWhlYWRlci1saW5lICJubyBsb25nZXIgdXNlZC4iICIyOC4xIikKCihkZWZjb25zdCBib29rbWFy ay1ibWVudS1pbmxpbmUtaGVhZGVyLWhlaWdodCAyCiAgIk51bWJlciBvZiBsaW5lcyB1c2VkIGZv ciB0aGUgKkJvb2ttYXJrIExpc3QqIGhlYWRlci4KXChUaGlzIGlzIG9ubHkgc2lnbmlmaWNhbnQg d2hlbiBgYm9va21hcmstYm1lbnUtdXNlLWhlYWRlci1saW5lJwppcyBuaWwuKSIpCihtYWtlLW9i c29sZXRlLXZhcmlhYmxlICdib29rbWFyay1ibWVudS1pbmxpbmUtaGVhZGVyLWhlaWdodCAibm8g bG9uZ2VyIHVzZWQuIiAiMjguMSIpCgooZGVmY29uc3QgYm9va21hcmstYm1lbnUtbWFya3Mtd2lk dGggMgogICJOdW1iZXIgb2YgY29sdW1ucyAoY2hhcnMpIHVzZWQgZm9yIHRoZSAqQm9va21hcmsg TGlzdCogbWFya3MgY29sdW1uLgpUaGlzIGluY2x1ZGVzIHRoZSBhbm5vdGF0aW9ucyBjb2x1bW4u IikKCihkZWZjdXN0b20gYm9va21hcmstYm1lbnUtZmlsZS1jb2x1bW4gMzAKICAiQ29sdW1uIGF0 IHdoaWNoIHRvIGRpc3BsYXkgZmlsZW5hbWVzIGluIGEgYnVmZmVyIGxpc3RpbmcgYm9va21hcmtz LgpZb3UgY2FuIHRvZ2dsZSB3aGV0aGVyIGZpbGVzIGFyZSBzaG93biB3aXRoIFxcPGJvb2ttYXJr LWJtZW51LW1vZGUtbWFwPlxcW2Jvb2ttYXJrLWJtZW51LXRvZ2dsZS1maWxlbmFtZXNdLiIKICA6 dHlwZSAnbmF0bnVtKQoKCihkZWZjdXN0b20gYm9va21hcmstYm1lbnUtdG9nZ2xlLWZpbGVuYW1l cyB0CiAgIk5vbi1uaWwgbWVhbnMgc2hvdyBmaWxlbmFtZXMgd2hlbiBsaXN0aW5nIGJvb2ttYXJr cy4KQSBub24tbmlsIHZhbHVlIG1heSByZXN1bHQgaW4gdHJ1bmNhdGVkIGJvb2ttYXJrIG5hbWVz LiIKICA6dHlwZSAnYm9vbGVhbikKCihkZWZmYWNlIGJvb2ttYXJrLW1lbnUtYm9va21hcmsKICAn KCh0ICg6d2VpZ2h0IGJvbGQpKSkKICAiRmFjZSB1c2VkIHRvIGhpZ2hsaWdodCBib29rbWFyayBu YW1lcyBpbiBib29rbWFyayBtZW51IGJ1ZmZlcnMuIikKCihkZWZjdXN0b20gYm9va21hcmstbWVu dS1sZW5ndGggNzAKICAiTWF4aW11bSBsZW5ndGggb2YgYSBib29rbWFyayBuYW1lIGRpc3BsYXll ZCBvbiBhIHBvcHVwIG1lbnUuIgogIDp0eXBlICduYXRudW0pCgo7OyBGSVhNRTogSXMgaXQgcmVh bGx5IHdvcnRoIGEgY3VzdG9taXphdGlvbiBvcHRpb24/CihkZWZjdXN0b20gYm9va21hcmstc2Vh cmNoLWRlbGF5IDAuMgogICJUaW1lIGJlZm9yZSBgYm9va21hcmstYm1lbnUtc2VhcmNoJyB1cGRh dGVzIHRoZSBkaXNwbGF5LiIKICA6dHlwZSAgJ251bWJlcikKCihkZWZjdXN0b20gYm9va21hcmst c2V0LWZyaW5nZS1tYXJrIHQKICAiV2hldGhlciB0byBzZXQgYSBmcmluZ2UgbWFyayBhdCBib29r bWFya2VkIGxpbmVzLiIKICA6dHlwZSAgJ2Jvb2xlYW4KICA6dmVyc2lvbiAiMjguMSIpCgo7OyBG SVhNRTogTm8gbG9uZ2VyIHVzZWQuICBTaG91bGQgYmUgZGVjbGFyZWQgb2Jzb2xldGUgb3IgcmVt b3ZlZC4KKGRlZmZhY2UgYm9va21hcmstbWVudS1oZWFkaW5nCiAgJygodCAoOmluaGVyaXQgZm9u dC1sb2NrLXR5cGUtZmFjZSkpKQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSBoZWFkaW5n IGluIGJvb2ttYXJrIG1lbnUgYnVmZmVycy4iCiAgOnZlcnNpb24gIjIyLjEiKQoKKGRlZmZhY2Ug Ym9va21hcmstZmFjZQogICcoKCgoY2xhc3MgZ3JheXNjYWxlKQogICAgICAoYmFja2dyb3VuZCBs aWdodCkpCiAgICAgOmZvcmVncm91bmQgIkRpbUdyYXkiKQogICAgKCgoY2xhc3MgZ3JheXNjYWxl KQogICAgICAoYmFja2dyb3VuZCBkYXJrKSkKICAgICA6Zm9yZWdyb3VuZCAiTGlnaHRHcmF5IikK ICAgICgoKGNsYXNzIGNvbG9yKQogICAgICAoYmFja2dyb3VuZCBsaWdodCkpCiAgICAgOmJhY2tn cm91bmQgIldoaXRlIiA6Zm9yZWdyb3VuZCAiRGFya09yYW5nZTEiKQogICAgKCgoY2xhc3MgY29s b3IpCiAgICAgIChiYWNrZ3JvdW5kIGRhcmspKQogICAgIDpiYWNrZ3JvdW5kICJCbGFjayIgOmZv cmVncm91bmQgIkRhcmtPcmFuZ2UxIikpCiAgIkZhY2UgdXNlZCB0byBoaWdobGlnaHQgY3VycmVu dCBsaW5lLiIKICA6dmVyc2lvbiAiMjguMSIpCgo7OzsgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0 cyBiZXlvbmQgdGhpcyBwb2ludC4KCgwKOzs7IEtleW1hcCBzdHVmZjoKCjs7IFNldCB1cCB0aGVz ZSBiaW5kaW5ncyBkdW1waW5nIHRpbWUgKm9ubHkqOwo7OyBpZiB0aGUgdXNlciBhbHRlcnMgdGhl bSwgZG9uJ3Qgb3ZlcnJpZGUgdGhlIHVzZXIgd2hlbiBsb2FkaW5nIGJvb2ttYXJrLmVsLgoKOzs7 IyMjYXV0b2xvYWQgKGtleW1hcC1zZXQgY3RsLXgtci1tYXAgImIiICMnYm9va21hcmstanVtcCkK Ozs7IyMjYXV0b2xvYWQgKGtleW1hcC1zZXQgY3RsLXgtci1tYXAgIm0iICMnYm9va21hcmstc2V0 KQo7OzsjIyNhdXRvbG9hZCAoa2V5bWFwLXNldCBjdGwteC1yLW1hcCAiTSIgIydib29rbWFyay1z ZXQtbm8tb3ZlcndyaXRlKQo7OzsjIyNhdXRvbG9hZCAoa2V5bWFwLXNldCBjdGwteC1yLW1hcCAi bCIgIydib29rbWFyay1ibWVudS1saXN0KQoKOzs7IyMjYXV0b2xvYWQKKGRlZnZhci1rZXltYXAg Ym9va21hcmstbWFwCiAgOmRvYyAiS2V5bWFwIGNvbnRhaW5pbmcgYmluZGluZ3MgdG8gYm9va21h cmsgZnVuY3Rpb25zLgpJdCBpcyBub3QgYm91bmQgdG8gYW55IGtleSBieSBkZWZhdWx0OiB0byBi aW5kIGl0CnNvIHRoYXQgeW91IGhhdmUgYSBib29rbWFyayBwcmVmaXgsIGp1c3QgdXNlIGBnbG9i YWwtc2V0LWtleScgYW5kIGJpbmQgYQprZXkgb2YgeW91ciBjaG9pY2UgdG8gdmFyaWFibGUgYGJv b2ttYXJrLW1hcCcuICBBbGwgaW50ZXJhY3RpdmUgYm9va21hcmsKZnVuY3Rpb25zIGhhdmUgYSBi aW5kaW5nIGluIHRoaXMga2V5bWFwLiIKICAieCIgIydib29rbWFyay1zZXQKICAibSIgIydib29r bWFyay1zZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyJtImFyawogICJNIiAjJ2Jvb2tt YXJrLXNldC1uby1vdmVyd3JpdGUgICAgICAgICAgICAgICA7Ik0iYXliZSBtYXJrCiAgImoiICMn Ym9va21hcmstanVtcAogICJnIiAjJ2Jvb2ttYXJrLWp1bXAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7ImcibwogICJvIiAjJ2Jvb2ttYXJrLWp1bXAtb3RoZXItd2luZG93CiAgIjUiICMnYm9v a21hcmstanVtcC1vdGhlci1mcmFtZQogICJpIiAjJ2Jvb2ttYXJrLWluc2VydAogICJlIiAjJ2Vk aXQtYm9va21hcmtzCiAgImYiICMnYm9va21hcmstaW5zZXJ0LWxvY2F0aW9uICAgICAgICAgICAg ICAgIDsiZiJpbmQKICAiciIgIydib29rbWFyay1yZW5hbWUKICAiZCIgIydib29rbWFyay1kZWxl dGUKICAiRCIgIydib29rbWFyay1kZWxldGUtYWxsCiAgImwiICMnYm9va21hcmstbG9hZAogICJ3 IiAjJ2Jvb2ttYXJrLXdyaXRlCiAgInMiICMnYm9va21hcmstc2F2ZSkKCjs7OyMjI2F1dG9sb2Fk IChmc2V0ICdib29rbWFyay1tYXAgYm9va21hcmstbWFwKQoKDAo7OzsgQ29yZSB2YXJpYWJsZXMg YW5kIGRhdGEgc3RydWN0dXJlczoKKGRlZnZhciBib29rbWFyay1hbGlzdCAoKQogICJBc3NvY2lh dGlvbiBsaXN0IG9mIGJvb2ttYXJrIG5hbWVzIGFuZCB0aGVpciBwYXJhbWV0ZXJzLgpCb29rbWFy ayBmdW5jdGlvbnMgdXBkYXRlIHRoZSB2YWx1ZSBhdXRvbWF0aWNhbGx5LgpZb3UgcHJvYmFibHkg ZG8gTk9UIHdhbnQgdG8gY2hhbmdlIHRoZSB2YWx1ZSB5b3Vyc2VsZi4KClRoZSB2YWx1ZSBpcyBh biBhbGlzdCB3aG9zZSBlbGVtZW50cyBhcmUgb2YgdGhlIGZvcm0KCiAoQk9PS01BUkstTkFNRSAu IFBBUkFNLUFMSVNUKQoKb3IgdGhlIGRlcHJlY2F0ZWQgZm9ybSAoQk9PS01BUkstTkFNRSBQQVJB TS1BTElTVCkuICBUaGUgYWxpc3QgaXMKb3JkZXJlZCBmcm9tIG1vc3QgcmVjZW50bHkgY3JlYXRl ZCBib29rbWFyayBhdCB0aGUgZnJvbnQgdG8gbGVhc3QKcmVjZW50bHkgY3JlYXRlZCBib29rbWFy ayBhdCB0aGUgZW5kLgoKQk9PS01BUkstTkFNRSBpcyB0aGUgbmFtZSB5b3UgZ2F2ZSB0byB0aGUg Ym9va21hcmsgd2hlbiBjcmVhdGluZyBpdC4KClBBUkFNLUFMSVNUIGlzIGFuIGFsaXN0IG9mIGJv b2ttYXJrIGluZm9ybWF0aW9uLiAgVGhlIG9yZGVyIG9mIHRoZQplbnRyaWVzIGluIFBBUkFNLUFM SVNUIGlzIG5vdCBpbXBvcnRhbnQuICBUaGUgZGVmYXVsdCBlbnRyaWVzIGFyZQpkZXNjcmliZWQg YmVsb3cuICBBbiBlbnRyeSB3aXRoIGEga2V5IGJ1dCBudWxsIHZhbHVlIG1lYW5zIHRoZSBlbnRy eQppcyBub3QgdXNlZC4KCiAoZmlsZW5hbWUgLiBGSUxFTkFNRSkKIChidWYgLiBCVUZGRVItT1It TkFNRSkKIChwb3NpdGlvbiAuIFBPUykKIChmcm9udC1jb250ZXh0LXN0cmluZyAuIFNUUi1BRlRF Ui1QT1MpCiAocmVhci1jb250ZXh0LXN0cmluZyAgLiBTVFItQkVGT1JFLVBPUykKIChoYW5kbGVy IC4gSEFORExFUikKIChhbm5vdGF0aW9uIC4gQU5OT1RBVElPTikKCkZJTEVOQU1FIG5hbWVzIHRo ZSBib29rbWFya2VkIGZpbGUuCkJVRkZFUi1PUi1OQU1FIGlzIGEgYnVmZmVyIG9yIHRoZSBuYW1l IG9mIGEgYnVmZmVyIHRoYXQgaXMgdXNlZAogIGlmIEZJTEVOQU1FIGlzIG5vdCBkZWZpbmVkIG9y IGl0IHJlZmVycyB0byBhIG5vbi1leGlzdGVudCBmaWxlLgpQT1MgaXMgdGhlIGJvb2ttYXJrZWQg YnVmZmVyIHBvc2l0aW9uLgpTVFItQUZURVItUE9TIGlzIGJ1ZmZlciB0ZXh0IHRoYXQgaW1tZWRp YXRlbHkgZm9sbG93cyBQT1MuClNUUi1CRUZPUkUtUE9TIGlzIGJ1ZmZlciB0ZXh0IHRoYXQgaW1t ZWRpYXRlbHkgcHJlY2VkZXMgUE9TLgpBTk5PVEFUSU9OIGlzIGEgc3RyaW5nIHRoYXQgZGVzY3Jp YmVzIHRoZSBib29rbWFyay4KICBTZWUgb3B0aW9ucyBgYm9va21hcmstdXNlLWFubm90YXRpb25z JyBhbmQKICBgYm9va21hcmstYXV0b21hdGljYWxseS1zaG93LWFubm90YXRpb25zJy4KSEFORExF UiBpcyBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgdGhlIGBib29rbWFyay1qdW1wJyBiZWhhdmlv ciBmb3IgYQpzcGVjaWZpYyBraW5kIG9mIGJvb2ttYXJrIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQg YGJvb2ttYXJrLWRlZmF1bHQtaGFuZGxlcicuClRoaXMgaXMgdGhlIGNhc2UgZm9yIEluZm8gYm9v a21hcmtzLCBmb3IgaW5zdGFuY2UuICBIQU5ETEVSIG11c3QgYWNjZXB0CmEgYm9va21hcmsgYXMg aXRzIHNpbmdsZSBhcmd1bWVudC4KCkEgZnVuY3Rpb24gYGJvb2ttYXJrLW1ha2UtcmVjb3JkLWZ1 bmN0aW9uJyBtYXkgZGVmaW5lIGFkZGl0aW9uYWwgZW50cmllcwppbiBQQVJBTS1MSVNUIHRoYXQg Y2FuIGJlIHVzZWQgYnkgSEFORExFUi4iKQoKKGRlZmluZS1vYnNvbGV0ZS12YXJpYWJsZS1hbGlh cyAnYm9va21hcmtzLWFscmVhZHktbG9hZGVkCiAgJ2Jvb2ttYXJrLWJvb2ttYXJrcy10aW1lc3Rh bXAgIjI3LjEiKQooZGVmdmFyIGJvb2ttYXJrLWJvb2ttYXJrcy10aW1lc3RhbXAgbmlsCiAgIlRp bWVzdGFtcCBvZiBjdXJyZW50IGRlZmF1bHQgYm9va21hcmsgZmlsZS4KVGhlIHZhbHVlIGlzIGFj dHVhbGx5IChGSUxFIC4gTU9EVElNRSksIHdoZXJlIEZJTEUgaXMgYSBib29rbWFyayBmaWxlIHRo YXQKZGVmYXVsdHMgdG8gYGJvb2ttYXJrLWRlZmF1bHQtZmlsZScgYW5kIE1PRFRJTUUgaXMgaXRz IG1vZGlmaWNhdGlvbiB0aW1lLiIpCgooZGVmdmFyIGJvb2ttYXJrLWZpbGUtY29kaW5nLXN5c3Rl bSBuaWwKICAiVGhlIGNvZGluZy1zeXN0ZW0gb2YgdGhlIGxhc3QgbG9hZGVkIG9yIHNhdmVkIGJv b2ttYXJrIGZpbGUuIikKCihkZWZ2YXItbG9jYWwgYm9va21hcmstY3VycmVudC1ib29rbWFyayBu aWwKICAiTmFtZSBvZiBib29rbWFyayBtb3N0IHJlY2VudGx5IHVzZWQgaW4gdGhlIGN1cnJlbnQg ZmlsZS4KSXQgaXMgYnVmZmVyIGxvY2FsLCB1c2VkIHRvIG1ha2UgbW92aW5nIGEgYm9va21hcmsg Zm9yd2FyZAp0aHJvdWdoIGEgZmlsZSBlYXNpZXIuIikKCgooZGVmdmFyIGJvb2ttYXJrLWFsaXN0 LW1vZGlmaWNhdGlvbi1jb3VudCAwCiAgIk51bWJlciBvZiBtb2RpZmljYXRpb25zIHRvIGJvb2tt YXJrIGxpc3Qgc2luY2UgaXQgd2FzIGxhc3Qgc2F2ZWQuIikKCgooZGVmdmFyIGJvb2ttYXJrLXNl YXJjaC1zaXplIDE2CiAgIkxlbmd0aCBvZiB0aGUgY29udGV4dCBzdHJpbmdzIHJlY29yZGVkIG9u IGVpdGhlciBzaWRlIG9mIGEgYm9va21hcmsuIikKCgooZGVmdmFyIGJvb2ttYXJrLWN1cnJlbnQt YnVmZmVyIG5pbAogICJUaGUgYnVmZmVyIGluIHdoaWNoIGEgYm9va21hcmsgaXMgY3VycmVudGx5 IGJlaW5nIHNldCBvciByZW5hbWVkLgpGdW5jdGlvbnMgdGhhdCBpbnNlcnQgc3RyaW5ncyBpbnRv IHRoZSBtaW5pYnVmZmVyIHVzZSB0aGlzIHRvIGtub3cKdGhlIHNvdXJjZSBidWZmZXIgZm9yIHRo YXQgaW5mb3JtYXRpb247IHNlZSBgYm9va21hcmsteWFuay13b3JkJwpmb3IgZXhhbXBsZS4iKQoK CihkZWZ2YXIgYm9va21hcmsteWFuay1wb2ludCAwCiAgIlRoZSBuZXh0IHBvaW50IGZyb20gd2hp Y2ggdG8gcHVsbCBzb3VyY2UgdGV4dCBmb3IgYGJvb2ttYXJrLXlhbmstd29yZCcuClRoaXMgcG9p bnQgaXMgaW4gYGJvb2ttYXJrLWN1cnJlbnQtYnVmZmVyJy4iKQoKCihkZWZ2YXIgYm9va21hcmst cXVpdC1mbGFnIG5pbAogICJOb24tbmlsIG1lYW5zIGBib29rbWFyay1ibWVudS1zZWFyY2gnIHF1 aXRzIGltbWVkaWF0ZWx5LiIpCihtYWtlLW9ic29sZXRlLXZhcmlhYmxlICdib29rbWFyay1xdWl0 LWZsYWcgIm5vIGxvbmdlciB1c2VkIiAiMjcuMSIpCgoMCjs7IEhlbHBlciBmdW5jdGlvbnMgYW5k IG1hY3Jvcy4KCihkZWZtYWNybyB3aXRoLWJ1ZmZlci1tb2RpZmllZC11bm1vZGlmaWVkICgmcmVz dCBib2R5KQogICJSdW4gQk9EWSB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBidWZmZXIncyBgYnVmZmVy LW1vZGlmaWVkLXAnIHN0YXRlLiIKICAobGV0ICgod2FzLW1vZGlmaWVkIChtYWtlLXN5bWJvbCAi d2FzLW1vZGlmaWVkIikpKQogICAgYChsZXQgKCgsd2FzLW1vZGlmaWVkIChidWZmZXItbW9kaWZp ZWQtcCkpKQogICAgICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgICAgKHByb2duICxAYm9keSkK ICAgICAgICAgKHNldC1idWZmZXItbW9kaWZpZWQtcCAsd2FzLW1vZGlmaWVkKSkpKSkKCjs7IE9u bHkgZnVuY3Rpb25zIGJlbG93LCBpbiB0aGlzIHBhZ2UgYW5kIHRoZSBuZXh0IG9uZSAoZmlsZSBm b3JtYXRzKSwKOzsgbmVlZCB0byBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBmb3JtYXQgb2YgYm9v a21hcmstYWxpc3QgZW50cmllcy4KOzsgRXZlcnlvbmUgZWxzZSBzaG91bGQgZ28gdGhyb3VnaCB0 aGVtLgoKKGRlZnVuIGJvb2ttYXJrLW5hbWUtZnJvbS1mdWxsLXJlY29yZCAoYm9va21hcmstcmVj b3JkKQogICJSZXR1cm4gdGhlIG5hbWUgb2YgQk9PS01BUkstUkVDT1JELgpCT09LTUFSSy1SRUNP UkQgaXMsIGUuZy4sIG9uZSBlbGVtZW50IGZyb20gYGJvb2ttYXJrLWFsaXN0Jy4iCiAgKGNhciBi b29rbWFyay1yZWNvcmQpKQoKKGRlZnVuIGJvb2ttYXJrLXR5cGUtZnJvbS1mdWxsLXJlY29yZCAo Ym9va21hcmstcmVjb3JkKQogICJSZXR1cm4gdGhlbiB0eXBlIG9mIEJPT0tNQVJLLVJFQ09SRC4K Qk9PS01BUkstUkVDT1JEIGlzLCBlLmcuLCBvbmUgZWxlbWVudCBmcm9tIGBib29rbWFyay1hbGlz dCcuIEl0J3MKdHlwZSBpcyByZWFkIGZyb20gdGhlIHN5bWJvbCBwcm9wZXJ0eSBuYW1lZApgYm9v a21hcmstaGFuZGxlci10eXBlJyByZWFkIG9uIHRoZSByZWNvcmQgaGFuZGxlciBmdW5jdGlvbi4i CiAgKGxldCAoKGhhbmRsZXIgKGJvb2ttYXJrLWdldC1oYW5kbGVyIGJvb2ttYXJrLXJlY29yZCkp KQogICAgKHdoZW4gKGF1dG9sb2FkcCAoc3ltYm9sLWZ1bmN0aW9uIGhhbmRsZXIpKQogICAgICAo YXV0b2xvYWQtZG8tbG9hZCAoc3ltYm9sLWZ1bmN0aW9uIGhhbmRsZXIpKSkKICAgIChpZiAoc3lt Ym9scCBoYW5kbGVyKQogICAgICAgIChnZXQgaGFuZGxlciAnYm9va21hcmstaGFuZGxlci10eXBl KQogICAgICIiKSkpCgooZGVmdW4gYm9va21hcmstYWxsLW5hbWVzICgpCiAgIlJldHVybiBhIGxp c3Qgb2YgYWxsIGN1cnJlbnQgYm9va21hcmsgbmFtZXMuIgogIChib29rbWFyay1tYXliZS1sb2Fk LWRlZmF1bHQtZmlsZSkKICAobWFwY2FyICdib29rbWFyay1uYW1lLWZyb20tZnVsbC1yZWNvcmQg Ym9va21hcmstYWxpc3QpKQoKCihkZWZ1biBib29rbWFyay1nZXQtYm9va21hcmsgKGJvb2ttYXJr LW5hbWUtb3ItcmVjb3JkICZvcHRpb25hbCBub2Vycm9yKQogICJSZXR1cm4gdGhlIGJvb2ttYXJr IHJlY29yZCBjb3JyZXNwb25kaW5nIHRvIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JELgpJZiBCT09L TUFSSy1OQU1FLU9SLVJFQ09SRCBpcyBhIHN0cmluZywgbG9vayBmb3IgdGhlIGNvcnJlc3BvbmRp bmcKYm9va21hcmsgcmVjb3JkIGluIGBib29rbWFyay1hbGlzdCc7IHJldHVybiBpdCBpZiBmb3Vu ZCwgb3RoZXJ3aXNlCmVycm9yLiAgSWYgb3B0aW9uYWwgYXJndW1lbnQgTk9FUlJPUiBpcyBub24t bmlsLCByZXR1cm4gbmlsCmluc3RlYWQgb2Ygc2lnbmFsaW5nIGFuIGVycm9yLiAgRWxzZSBpZiBC T09LTUFSSy1OQU1FLU9SLVJFQ09SRAppcyBhbHJlYWR5IGEgYm9va21hcmsgcmVjb3JkLCBqdXN0 IHJldHVybiBpdC4iCiAgKGNvbmQKICAgKChjb25zcCBib29rbWFyay1uYW1lLW9yLXJlY29yZCkg Ym9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgICgoc3RyaW5ncCBib29rbWFyay1uYW1lLW9yLXJl Y29yZCkKICAgIChvciAoYXNzb2Mtc3RyaW5nIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkIGJvb2tt YXJrLWFsaXN0CiAgICAgICAgICAgICAgICAgICAgICBib29rbWFyay1jb21wbGV0aW9uLWlnbm9y ZS1jYXNlKQogICAgICAgICh1bmxlc3Mgbm9lcnJvciAoZXJyb3IgIkludmFsaWQgYm9va21hcmsg JXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rbWFyay1uYW1lLW9yLXJlY29y ZCkpKSkpKQoKCihkZWZ1biBib29rbWFyay1nZXQtYm9va21hcmstcmVjb3JkIChib29rbWFyay1u YW1lLW9yLXJlY29yZCkKICAiUmV0dXJuIHRoZSByZWNvcmQgcG9ydGlvbiBvZiBCT09LTUFSSy1O QU1FLU9SLVJFQ09SRCBpbiBgYm9va21hcmstYWxpc3QnLgpJbiBvdGhlciB3b3JkcywgcmV0dXJu IGFsbCBpbmZvcm1hdGlvbiBidXQgdGhlIG5hbWUuIgogIChsZXQgKChhbGlzdCAoY2RyIChib29r bWFyay1nZXQtYm9va21hcmsgYm9va21hcmstbmFtZS1vci1yZWNvcmQpKSkpCiAgICA7OyBUaGUg Ym9va21hcmsgb2JqZWN0cyBjYW4gZWl0aGVyIGxvb2sgbGlrZSAoTkFNRSBBTElTVCkgb3IKICAg IDs7IChOQU1FIC4gQUxJU1QpLCBzbyB3ZSBoYXZlIHRvIGRpc3Rpbmd1aXNoIHRoZSB0d28gaGVy ZS4KICAgIChpZiAoYW5kIChudWxsIChjZHIgYWxpc3QpKSAoY29uc3AgKGNhYXIgYWxpc3QpKSkK ICAgICAgICAoY2FyIGFsaXN0KSBhbGlzdCkpKQoKCihkZWZ1biBib29rbWFyay1zZXQtbmFtZSAo Ym9va21hcmstbmFtZS1vci1yZWNvcmQgbmV3bmFtZSkKICAiU2V0IEJPT0tNQVJLLU5BTUUtT1It UkVDT1JEJ3MgbmFtZSB0byBORVdOQU1FLiIKICAoc2V0Y2FyIChib29rbWFyay1nZXQtYm9va21h cmsgYm9va21hcmstbmFtZS1vci1yZWNvcmQpIG5ld25hbWUpKQoKKGRlZnVuIGJvb2ttYXJrLXBy b3AtZ2V0IChib29rbWFyay1uYW1lLW9yLXJlY29yZCBwcm9wKQogICJSZXR1cm4gdGhlIHByb3Bl cnR5IFBST1Agb2YgQk9PS01BUkstTkFNRS1PUi1SRUNPUkQsIG9yIG5pbCBpZiBub25lLiIKICAo Y2RyIChhc3NxIHByb3AgKGJvb2ttYXJrLWdldC1ib29rbWFyay1yZWNvcmQgYm9va21hcmstbmFt ZS1vci1yZWNvcmQpKSkpCgooZGVmdW4gYm9va21hcmstcHJvcC1zZXQgKGJvb2ttYXJrLW5hbWUt b3ItcmVjb3JkIHByb3AgdmFsKQogICJTZXQgdGhlIHByb3BlcnR5IFBST1Agb2YgQk9PS01BUkst TkFNRS1PUi1SRUNPUkQgdG8gVkFMLiIKICAobGV0ICgoY2VsbCAoYXNzcQogICAgICAgICAgICAg ICBwcm9wIChib29rbWFyay1nZXQtYm9va21hcmstcmVjb3JkIGJvb2ttYXJrLW5hbWUtb3ItcmVj b3JkKSkpKQogICAgKGlmIGNlbGwKICAgICAgICAoc2V0Y2RyIGNlbGwgdmFsKQogICAgICAobmNv bmMgKGJvb2ttYXJrLWdldC1ib29rbWFyay1yZWNvcmQgYm9va21hcmstbmFtZS1vci1yZWNvcmQp CiAgICAgICAgICAgICAobGlzdCAoY29ucyBwcm9wIHZhbCkpKSkpKQoKKGRlZnVuIGJvb2ttYXJr LWdldC1hbm5vdGF0aW9uIChib29rbWFyay1uYW1lLW9yLXJlY29yZCkKICAiUmV0dXJuIHRoZSBh bm5vdGF0aW9uIG9mIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JELCBvciBuaWwgaWYgbm9uZS4iCiAg KGJvb2ttYXJrLXByb3AtZ2V0IGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkICdhbm5vdGF0aW9uKSkK CihkZWZ1biBib29rbWFyay1zZXQtYW5ub3RhdGlvbiAoYm9va21hcmstbmFtZS1vci1yZWNvcmQg YW5uKQogICJTZXQgdGhlIGFubm90YXRpb24gb2YgQk9PS01BUkstTkFNRS1PUi1SRUNPUkQgdG8g QU5OLiIKICAoYm9va21hcmstcHJvcC1zZXQgYm9va21hcmstbmFtZS1vci1yZWNvcmQgJ2Fubm90 YXRpb24gYW5uKSkKCgooZGVmdW4gYm9va21hcmstZ2V0LWZpbGVuYW1lIChib29rbWFyay1uYW1l LW9yLXJlY29yZCkKICAiUmV0dXJuIHRoZSBmdWxsIGZpbGVuYW1lIG9mIEJPT0tNQVJLLU5BTUUt T1ItUkVDT1JELCBvciBuaWwgaWYgbm9uZS4iCiAgKGJvb2ttYXJrLXByb3AtZ2V0IGJvb2ttYXJr LW5hbWUtb3ItcmVjb3JkICdmaWxlbmFtZSkpCgoKKGRlZnVuIGJvb2ttYXJrLXNldC1maWxlbmFt ZSAoYm9va21hcmstbmFtZS1vci1yZWNvcmQgZmlsZW5hbWUpCiAgIlNldCB0aGUgZnVsbCBmaWxl bmFtZSBvZiBCT09LTUFSSy1OQU1FLU9SLVJFQ09SRCB0byBGSUxFTkFNRS4iCiAgKGJvb2ttYXJr LXByb3Atc2V0IGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkICdmaWxlbmFtZSBmaWxlbmFtZSkpCgoK KGRlZnVuIGJvb2ttYXJrLWdldC1wb3NpdGlvbiAoYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAg IlJldHVybiB0aGUgcG9zaXRpb24gKGkuZS46IHBvaW50KSBvZiBCT09LTUFSSy1OQU1FLU9SLVJF Q09SRCwgb3IgbmlsIGlmIG5vbmUuIgogIChib29rbWFyay1wcm9wLWdldCBib29rbWFyay1uYW1l LW9yLXJlY29yZCAncG9zaXRpb24pKQoKCihkZWZ1biBib29rbWFyay1zZXQtcG9zaXRpb24gKGJv b2ttYXJrLW5hbWUtb3ItcmVjb3JkIHBvc2l0aW9uKQogICJTZXQgdGhlIHBvc2l0aW9uIChpLmUu OiBwb2ludCkgb2YgQk9PS01BUkstTkFNRS1PUi1SRUNPUkQgdG8gUE9TSVRJT04uIgogIChib29r bWFyay1wcm9wLXNldCBib29rbWFyay1uYW1lLW9yLXJlY29yZCAncG9zaXRpb24gcG9zaXRpb24p KQoKCihkZWZ1biBib29rbWFyay1nZXQtZnJvbnQtY29udGV4dC1zdHJpbmcgKGJvb2ttYXJrLW5h bWUtb3ItcmVjb3JkKQogICJSZXR1cm4gdGhlIGZyb250LWNvbnRleHQtc3RyaW5nIG9mIEJPT0tN QVJLLU5BTUUtT1ItUkVDT1JELCBvciBuaWwgaWYgbm9uZS4iCiAgKGJvb2ttYXJrLXByb3AtZ2V0 IGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkICdmcm9udC1jb250ZXh0LXN0cmluZykpCgoKKGRlZnVu IGJvb2ttYXJrLXNldC1mcm9udC1jb250ZXh0LXN0cmluZyAoYm9va21hcmstbmFtZS1vci1yZWNv cmQgc3RyaW5nKQogICJTZXQgdGhlIGZyb250LWNvbnRleHQtc3RyaW5nIG9mIEJPT0tNQVJLLU5B TUUtT1ItUkVDT1JEIHRvIFNUUklORy4iCiAgKGJvb2ttYXJrLXByb3Atc2V0IGJvb2ttYXJrLW5h bWUtb3ItcmVjb3JkICdmcm9udC1jb250ZXh0LXN0cmluZyBzdHJpbmcpKQoKCihkZWZ1biBib29r bWFyay1nZXQtcmVhci1jb250ZXh0LXN0cmluZyAoYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAg IlJldHVybiB0aGUgcmVhci1jb250ZXh0LXN0cmluZyBvZiBCT09LTUFSSy1OQU1FLU9SLVJFQ09S RCwgb3IgbmlsIGlmIG5vbmUuIgogIChib29rbWFyay1wcm9wLWdldCBib29rbWFyay1uYW1lLW9y LXJlY29yZCAncmVhci1jb250ZXh0LXN0cmluZykpCgoKKGRlZnVuIGJvb2ttYXJrLXNldC1yZWFy LWNvbnRleHQtc3RyaW5nIChib29rbWFyay1uYW1lLW9yLXJlY29yZCBzdHJpbmcpCiAgIlNldCB0 aGUgcmVhci1jb250ZXh0LXN0cmluZyBvZiBCT09LTUFSSy1OQU1FLU9SLVJFQ09SRCB0byBTVFJJ TkcuIgogIChib29rbWFyay1wcm9wLXNldCBib29rbWFyay1uYW1lLW9yLXJlY29yZCAncmVhci1j b250ZXh0LXN0cmluZyBzdHJpbmcpKQoKCihkZWZ1biBib29rbWFyay1nZXQtaGFuZGxlciAoYm9v a21hcmstbmFtZS1vci1yZWNvcmQpCiAgIlJldHVybiB0aGUgaGFuZGxlciBmdW5jdGlvbiBmb3Ig Qk9PS01BUkstTkFNRS1PUi1SRUNPUkQsIG9yIG5pbCBpZiBub25lLiIKICAoYm9va21hcmstcHJv cC1nZXQgYm9va21hcmstbmFtZS1vci1yZWNvcmQgJ2hhbmRsZXIpKQoKCihkZWZ1biBib29rbWFy ay1nZXQtbGFzdC1tb2RpZmllZCAoYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgIlJldHVybiB0 aGUgbGFzdC1tb2RpZmllZCBmb3IgQk9PS01BUkstTkFNRS1PUi1SRUNPUkQsIG9yIG5pbCBpZiBu b25lLiIKICAoYm9va21hcmstcHJvcC1nZXQgYm9va21hcmstbmFtZS1vci1yZWNvcmQgJ2xhc3Qt bW9kaWZpZWQpKQoKCihkZWZ1biBib29rbWFyay11cGRhdGUtbGFzdC1tb2RpZmllZCAoYm9va21h cmstbmFtZS1vci1yZWNvcmQpCiAgIlVwZGF0ZSB0aGUgbGFzdC1tb2RpZmllZCBkYXRlIG9mIEJP T0tNQVJLLU5BTUUtT1ItUkVDT1JEIHRvIHRoZSBjdXJyZW50IHRpbWUuIgogIChib29rbWFyay1w cm9wLXNldCBib29rbWFyay1uYW1lLW9yLXJlY29yZCAnbGFzdC1tb2RpZmllZCAoY3VycmVudC10 aW1lKSkpCgoKKGRlZnZhciBib29rbWFyay1oaXN0b3J5IG5pbAogICJUaGUgaGlzdG9yeSBsaXN0 IGZvciBib29rbWFyayBmdW5jdGlvbnMuIikKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnYm9va21h cmstZnJpbmdlLW1hcmsKICAiXHgzY1x4N2VceGZmXHhmZlx4ZmZceGZmXHg3ZVx4M2MiKQoKKGRl ZnVuIGJvb2ttYXJrLS1zZXQtZnJpbmdlLW1hcmsgKCkKICAiQXBwbHkgYSBjb2xvcml6ZWQgb3Zl cmxheSB0byB0aGUgYm9va21hcmtlZCBsb2NhdGlvbi4KU2VlIHVzZXIgb3B0aW9uIGBib29rbWFy ay1zZXQtZnJpbmdlLW1hcmsnLiIKICAobGV0ICgoYm0gKG1ha2Utb3ZlcmxheSAocG9pbnQtYXQt Ym9sKSAoMSsgKHBvaW50LWF0LWJvbCkpKSkpCiAgICAob3ZlcmxheS1wdXQgYm0gJ2NhdGVnb3J5 ICdib29rbWFyaykKICAgIChvdmVybGF5LXB1dCBibSAnZXZhcG9yYXRlIHQpCiAgICAob3Zlcmxh eS1wdXQgYm0gJ2JlZm9yZS1zdHJpbmcKICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZQogICAg ICAgICAgICAgICAgICAieCIgJ2Rpc3BsYXkKICAgICAgICAgICAgICAgICAgYChsZWZ0LWZyaW5n ZSBib29rbWFyay1mcmluZ2UtbWFyayBib29rbWFyay1mYWNlKSkpKSkKCihkZWZ1biBib29rbWFy ay0tcmVtb3ZlLWZyaW5nZS1tYXJrIChibSkKICAiUmVtb3ZlIGEgYm9va21hcmsncyBjb2xvcml6 ZWQgb3ZlcmxheS4KQk0gaXMgYSBib29rbWFyayBhcyByZXR1cm5lZCBmcm9tIGZ1bmN0aW9uIGBi b29rbWFyay1nZXQtYm9va21hcmsnLgpTZWUgdXNlciBvcHRpb24gYGJvb2ttYXJrLXNldC1mcmlu Z2UnLiIKICAobGV0ICgoZmlsZW5hbWUgKGNkciAoYXNzcSAnZmlsZW5hbWUgYm0pKSkKICAgICAg ICAocG9zIChjZHIgKGFzc3EgJ3Bvc2l0aW9uIGJtKSkpCiAgICAgICAgb3ZlcmxheXMgZm91bmQg dGVtcCkKICAgICh3aGVuIChhbmQgcG9zIGZpbGVuYW1lKQogICAgICAoc2V0cSBmaWxlbmFtZSAo ZXhwYW5kLWZpbGUtbmFtZSBmaWxlbmFtZSkpCiAgICAgIChkb2xpc3QgKGJ1ZiAoYnVmZmVyLWxp c3QpKQogICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZgogICAgICAgICAgKHdoZW4gKGVx dWFsIGZpbGVuYW1lIGJ1ZmZlci1maWxlLW5hbWUpCiAgICAgICAgICAgIChzZXRxIG92ZXJsYXlz CiAgICAgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgIChn b3RvLWNoYXIgcG9zKQogICAgICAgICAgICAgICAgICAgIChvdmVybGF5cy1pbiAocG9pbnQtYXQt Ym9sKSAoMSsgKHBvaW50LWF0LWJvbCkpKSkpCiAgICAgICAgICAgICh3aGlsZSAoYW5kIChub3Qg Zm91bmQpIChzZXRxIHRlbXAgKHBvcCBvdmVybGF5cykpKQogICAgICAgICAgICAgICh3aGVuIChl cSAnYm9va21hcmsgKG92ZXJsYXktZ2V0IHRlbXAgJ2NhdGVnb3J5KSkKICAgICAgICAgICAgICAg IChkZWxldGUtb3ZlcmxheSAoc2V0cSBmb3VuZCB0ZW1wKSkpKSkpKSkpKQoKKGRlZnVuIGJvb2tt YXJrLW1heWJlLXNvcnQtYWxpc3QgKCkKICAiUmV0dXJuIGBib29rbWFyay1hbGlzdCcgZm9yIGRp c3BsYXkuCklmIGBib29rbWFyay1zb3J0LWZsYWcnIGlzIFQsIHRoZW4gcmV0dXJuIGEgc29ydGVk IGJ5IG5hbWUgY29weSBvZiB0aGUgYWxpc3QuCklmIGBib29rbWFyay1zb3J0LWZsYWcnIGlzIExB U1QtTU9ESUZJRUQsIHRoZW4gcmV0dXJuIGEgc29ydGVkIGJ5IGxhc3QgbW9kaWZpZWQKY29weSBv ZiB0aGUgYWxpc3QuICBPdGhlcndpc2UsIGp1c3QgcmV0dXJuIGBib29rbWFyay1hbGlzdCcsIHdo aWNoIGJ5IGRlZmF1bHQKaXMgb3JkZXJlZCBmcm9tIG1vc3QgcmVjZW50bHkgY3JlYXRlZCB0byBs ZWFzdCByZWNlbnRseSBjcmVhdGVkIGJvb2ttYXJrLiIKICAobGV0ICgoY29weSAoY29weS1hbGlz dCBib29rbWFyay1hbGlzdCkpKQogICAgKGNvbmQgKChlcSBib29rbWFyay1zb3J0LWZsYWcgdCkK ICAgICAgICAgICAoc29ydCBjb3B5IChsYW1iZGEgKHggeSkgKHN0cmluZy1sZXNzcCAoY2FyIHgp IChjYXIgeSkpKSkpCiAgICAgICAgICAoKGVxIGJvb2ttYXJrLXNvcnQtZmxhZyAnbGFzdC1tb2Rp ZmllZCkKICAgICAgICAgICAoc29ydCBjb3B5IChsYW1iZGEgKHggeSkKICAgICAgICAgICAgICAg ICAgICAgICAgKGxldCAoKHR4IChib29rbWFyay1nZXQtbGFzdC1tb2RpZmllZCB4KSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHR5IChib29rbWFyay1nZXQtbGFzdC1tb2RpZmllZCB5 KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmQgKChudWxsIHR4KSBuaWwpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChudWxsIHR5KSB0KQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh0ICh0aW1lLWxlc3MtcCB0eSB0eCkpKSkpKSkKICAgICAgICAgICh0 IGNvcHkpKSkpCgooZGVmdW4gYm9va21hcmstY29tcGxldGluZy1yZWFkIChwcm9tcHQgJm9wdGlv bmFsIGRlZmF1bHQpCiAgIlByb21wdGluZyB3aXRoIFBST01QVCwgcmVhZCBhIGJvb2ttYXJrIG5h bWUgaW4gY29tcGxldGlvbi4KUFJPTVBUIHdpbGwgZ2V0IGEgXCI6IFwiIHN0dWNrIG9uIHRoZSBl bmQgbm8gbWF0dGVyIHdoYXQsIHNvIHlvdQpwcm9iYWJseSBkb24ndCB3YW50IHRvIGluY2x1ZGUg b25lIHlvdXJzZWxmLgpPcHRpb25hbCBhcmcgREVGQVVMVCBpcyBhIHN0cmluZyB0byByZXR1cm4g aWYgdGhlIHVzZXIgaW5wdXQgaXMgZW1wdHkuCklmIERFRkFVTFQgaXMgbmlsIHRoZW4gcmV0dXJu IGVtcHR5IHN0cmluZyBmb3IgZW1wdHkgaW5wdXQuIgogIChib29rbWFyay1tYXliZS1sb2FkLWRl ZmF1bHQtZmlsZSkgOyBwYXJhbm9pYQogIChpZiAobGlzdHAgbGFzdC1ub25tZW51LWV2ZW50KQog ICAgICAoYm9va21hcmstbWVudS1wb3B1cC1wYW5lZC1tZW51IHQgcHJvbXB0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNhciAnYm9va21hcmstbmFtZS1mcm9tLWZ1 bGwtcmVjb3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Ym9va21hcmstbWF5YmUtc29ydC1hbGlzdCkpKQogICAgKGxldCogKChjb21wbGV0aW9uLWlnbm9y ZS1jYXNlIGJvb2ttYXJrLWNvbXBsZXRpb24taWdub3JlLWNhc2UpCiAgICAgICAgICAgKGRlZmF1 bHQgKHVubGVzcyAoZXF1YWwgIiIgZGVmYXVsdCkgZGVmYXVsdCkpKQogICAgICAoY29tcGxldGlu Zy1yZWFkIChmb3JtYXQtcHJvbXB0IHByb21wdCBkZWZhdWx0KQogICAgICAgICAgICAgICAgICAg ICAgIChsYW1iZGEgKHN0cmluZyBwcmVkIGFjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAg IChpZiAoZXEgYWN0aW9uICdtZXRhZGF0YSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn KG1ldGFkYXRhIChjYXRlZ29yeSAuIGJvb2ttYXJrKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29tcGxldGUtd2l0aC1hY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YWN0aW9uIGJvb2ttYXJrLWFsaXN0IHN0cmluZyBwcmVkKSkpCiAgICAgICAgICAgICAgICAgICAg ICAgbmlsIDAgbmlsICdib29rbWFyay1oaXN0b3J5IGRlZmF1bHQpKSkpCgoKKGRlZm1hY3JvIGJv b2ttYXJrLW1heWJlLWhpc3RvcmljaXplLXN0cmluZyAoc3RyaW5nKQogICJQdXQgU1RSSU5HIGlu dG8gdGhlIGJvb2ttYXJrIHByb21wdCBoaXN0b3J5LCBpZiBjYWxsZXIgbm9uLWludGVyYWN0aXZl LgpXZSBuZWVkIHRoaXMgYmVjYXVzZSBzb21ldGltZXMgYm9va21hcmsgZnVuY3Rpb25zIGFyZSBp bnZva2VkCmZyb20gb3RoZXIgY29tbWFuZHMgdGhhdCBwYXNzIGluIHRoZSBib29rbWFyayBuYW1l LCBzbwpgY29tcGxldGluZy1yZWFkJyBuZXZlciBnZXRzIGEgY2hhbmNlIHRvIHNldCBgYm9va21h cmstaGlzdG9yeScuIgogIGAob3IKICAgIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdpbnRlcmFj dGl2ZSkKICAgIChzZXRxIGJvb2ttYXJrLWhpc3RvcnkgKGNvbnMgLHN0cmluZyBib29rbWFyay1o aXN0b3J5KSkpKQoKKGRlZnZhciBib29rbWFyay1tYWtlLXJlY29yZC1mdW5jdGlvbiAnYm9va21h cmstbWFrZS1yZWNvcmQtZGVmYXVsdAogICJBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxl ZCB0byBjcmVhdGUgYSBib29rbWFyayByZWNvcmQuCk1vZGVzIG1heSBzZXQgdGhpcyB2YXJpYWJs ZSBidWZmZXItbG9jYWxseSB0byBlbmFibGUgYm9va21hcmtpbmcgb2YKbG9jYXRpb25zIHRoYXQg c2hvdWxkIGJlIHRyZWF0ZWQgc3BlY2lhbGx5LCBzdWNoIGFzIEluZm8gbm9kZXMsCm5ld3MgcG9z dHMsIGltYWdlcywgcGRmIGRvY3VtZW50cywgZXRjLgoKVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2Fs bGVkIHdpdGggbm8gYXJndW1lbnRzLgpJdCBzaG91bGQgc2lnbmFsIGEgdXNlciBlcnJvciBpZiBp dCBpcyB1bmFibGUgdG8gY29uc3RydWN0IGEgcmVjb3JkIGZvcgp0aGUgY3VycmVudCBsb2NhdGlv bi4KClRoZSByZXR1cm5lZCByZWNvcmQgc2hvdWxkIGJlIGEgY29ucyBjZWxsIG9mIHRoZSBmb3Jt IChOQU1FIC4gQUxJU1QpCndoZXJlIEFMSVNUIGlzIGFzIGRlc2NyaWJlZCBpbiBgYm9va21hcmst YWxpc3QnIGFuZCBtYXkgdHlwaWNhbGx5IGNvbnRhaW4KYSBzcGVjaWFsIGNvbnMgKGhhbmRsZXIg LiBIQU5ETEVSLUZVTkMpIHdoaWNoIHNwZWNpZmllcyB0aGUgaGFuZGxlciBmdW5jdGlvbgp0aGF0 IHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgYGJvb2ttYXJrLWRlZmF1bHQtaGFuZGxlcicgdG8g b3BlbiB0aGlzCmJvb2ttYXJrLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgYm9va21hcmst YWxpc3QnIGZvciBtb3JlLgoKTkFNRSBpcyBhIHN1Z2dlc3RlZCBuYW1lIGZvciB0aGUgY29uc3Ry dWN0ZWQgYm9va21hcmsuICBJdCBjYW4gYmUgbmlsCmluIHdoaWNoIGNhc2UgYSBkZWZhdWx0IGhl dXJpc3RpYyB3aWxsIGJlIHVzZWQuICBUaGUgZnVuY3Rpb24gY2FuIGFsc28KZXF1aXZhbGVudGx5 IGp1c3QgcmV0dXJuIEFMSVNUIHdpdGhvdXQgTkFNRS4iKQoKKGRlZnVuIGJvb2ttYXJrLW1ha2Ut cmVjb3JkICgpCiAgIlJldHVybiBhIG5ldyBib29rbWFyayByZWNvcmQgKE5BTUUgLiBBTElTVCkg Zm9yIHRoZSBjdXJyZW50IGxvY2F0aW9uLiIKICAobGV0ICgocmVjb3JkIChmdW5jYWxsIGJvb2tt YXJrLW1ha2UtcmVjb3JkLWZ1bmN0aW9uKSkpCiAgICA7OyBTZXQgdXAgZGVmYXVsdCBuYW1lIGlm IHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBwcm92aWRlIG9uZS4KICAgICh1bmxlc3MgKHN0cmluZ3Ag KGNhciByZWNvcmQpKQogICAgICAoaWYgKGNhciByZWNvcmQpIChwdXNoIG5pbCByZWNvcmQpKQog ICAgICAoc2V0Y2FyIHJlY29yZCAob3IgYm9va21hcmstY3VycmVudC1ib29rbWFyayAoYm9va21h cmstYnVmZmVyLW5hbWUpKSkpCiAgICA7OyBTZXQgdXAgZGVmYXVsdHMuCiAgICAoYm9va21hcmst cHJvcC1zZXQKICAgICByZWNvcmQgJ2RlZmF1bHRzCiAgICAgKGRlbHEgbmlsIChkZWxldGUtZHVw cyAoYXBwZW5kIChib29rbWFyay1wcm9wLWdldCByZWNvcmQgJ2RlZmF1bHRzKQoJCQkJICAgIChs aXN0IGJvb2ttYXJrLWN1cnJlbnQtYm9va21hcmsKCQkJCQkgIChjYXIgcmVjb3JkKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYm9va21hcmstYnVmZmVyLW5hbWUp KSkpKSkKICAgIHJlY29yZCkpCgooZGVmdW4gYm9va21hcmstc3RvcmUgKG5hbWUgYWxpc3Qgbm8t b3ZlcndyaXRlKQogICJTdG9yZSB0aGUgYm9va21hcmsgTkFNRSB3aXRoIGRhdGEgQUxJU1QuCklm IE5PLU9WRVJXUklURSBpcyBub24tbmlsIGFuZCBhbm90aGVyIGJvb2ttYXJrIG9mIHRoZSBzYW1l IG5hbWUgYWxyZWFkeQpleGlzdHMgaW4gYGJvb2ttYXJrLWFsaXN0JywgcmVjb3JkIHRoZSBuZXcg Ym9va21hcmsgd2l0aG91dCB0aHJvd2luZyBhd2F5IHRoZQpvbGQgb25lLiIKICAoYm9va21hcmst bWF5YmUtbG9hZC1kZWZhdWx0LWZpbGUpCiAgKGxldCAoKHN0cmlwcGVkLW5hbWUgKGNvcHktc2Vx dWVuY2UgbmFtZSkpKQogICAgKHNldC10ZXh0LXByb3BlcnRpZXMgMCAobGVuZ3RoIHN0cmlwcGVk LW5hbWUpIG5pbCBzdHJpcHBlZC1uYW1lKQogICAgKGlmIChhbmQgKG5vdCBuby1vdmVyd3JpdGUp CiAgICAgICAgICAgICAoYm9va21hcmstZ2V0LWJvb2ttYXJrIHN0cmlwcGVkLW5hbWUgJ25vZXJy b3IpKQogICAgICAgIDs7IEFscmVhZHkgZXhpc3RpbmcgYm9va21hcmsgdW5kZXIgdGhhdCBuYW1l IGFuZAogICAgICAgIDs7IG5vIHByZWZpeCBhcmcgbWVhbnMganVzdCBvdmVyd3JpdGUgb2xkIGJv b2ttYXJrLgogICAgICAgIChsZXQgKChibSAoYm9va21hcmstZ2V0LWJvb2ttYXJrIHN0cmlwcGVk LW5hbWUpKSkKICAgICAgICAgIDs7IEZpcnN0IGNsZWFuIHVwIGlmIHByZXZpb3VzbHkgbG9jYXRp b24gd2FzIGZvbnRpZmllZC4KICAgICAgICAgICh3aGVuIGJvb2ttYXJrLXNldC1mcmluZ2UtbWFy awogICAgICAgICAgICAoYm9va21hcmstLXJlbW92ZS1mcmluZ2UtbWFyayBibSkpCiAgICAgICAg ICA7OyBNb2RpZnkgdXNpbmcgdGhlIG5ldyAoTkFNRSAuIEFMSVNUKSBmb3JtYXQuCiAgICAgICAg ICAoc2V0Y2RyIGJtIGFsaXN0KSkKCiAgICAgIDs7IE90aGVyd2lzZSBqdXN0IHB1dCBpdCBvbnRv IHRoZSBmcm9udCBvZiB0aGUgbGlzdC4gIEVpdGhlciB0aGUKICAgICAgOzsgYm9va21hcmsgZG9l c24ndCBleGlzdCBhbHJlYWR5LCBvciB0aGVyZSBpcyBubyBwcmVmaXggYXJnLgogICAgICA7OyBJ biBlaXRoZXIgY2FzZSwgd2Ugd2FudCB0aGUgbmV3IGJvb2ttYXJrIG9uIHRoZSBmcm9udCBvZiB0 aGUKICAgICAgOzsgbGlzdCwgc2luY2UgdGhlIGxpc3QgaXMga2VwdCBpbiByZXZlcnNlIG9yZGVy IG9mIGNyZWF0aW9uLgogICAgICAocHVzaCAoY29ucyBzdHJpcHBlZC1uYW1lIGFsaXN0KSBib29r bWFyay1hbGlzdCkpCgogICAgOzsgQWRkZWQgYnkgZGIKICAgIChzZXRxIGJvb2ttYXJrLWN1cnJl bnQtYm9va21hcmsgc3RyaXBwZWQtbmFtZSkKICAgIChzZXRxIGJvb2ttYXJrLWFsaXN0LW1vZGlm aWNhdGlvbi1jb3VudAogICAgICAgICAgKDErIGJvb2ttYXJrLWFsaXN0LW1vZGlmaWNhdGlvbi1j b3VudCkpCiAgICAoaWYgKGJvb2ttYXJrLXRpbWUtdG8tc2F2ZS1wKQogICAgICAgIChib29rbWFy ay1zYXZlKSkKCiAgICAoc2V0cSBib29rbWFyay1jdXJyZW50LWJvb2ttYXJrIHN0cmlwcGVkLW5h bWUpCiAgICAoYm9va21hcmstYm1lbnUtc3VycmVwdGl0aW91c2x5LXJlYnVpbGQtbGlzdCkpKQoK KGRlZnVuIGJvb2ttYXJrLW1ha2UtcmVjb3JkLWRlZmF1bHQgKCZvcHRpb25hbCBuby1maWxlIG5v LWNvbnRleHQgcG9zbikKICAiUmV0dXJuIHRoZSByZWNvcmQgZGVzY3JpYmluZyB0aGUgbG9jYXRp b24gb2YgYSBuZXcgYm9va21hcmsuClBvaW50IHNob3VsZCBiZSBhdCB0aGUgYnVmZmVyIGluIHdo aWNoIHRoZSBib29rbWFyayBpcyBiZWluZyBzZXQsCmFuZCBub3JtYWxseSBzaG91bGQgYmUgYXQg dGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBib29rbWFyayBpcyBkZXNpcmVkLApidXQgc2VlIHRoZSBv cHRpb25hbCBhcmd1bWVudHMgZm9yIG90aGVyIHBvc3NpYmlsaXRpZXMuCgpJZiBOTy1GSUxFIGlz IG5vbi1uaWwsIHRoZW4gb25seSByZXR1cm4gdGhlIHN1YnNldCBvZiB0aGUKcmVjb3JkIHRoYXQg cGVydGFpbnMgdG8gdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgYnVmZmVyLCBsZWF2aW5nIG9mZgp0 aGUgcGFydCB0aGF0IHJlY29yZHMgdGhlIGZpbGVuYW1lLgoKSWYgTk8tQ09OVEVYVCBpcyBub24t bmlsLCBkbyBub3QgaW5jbHVkZSB0aGUgZnJvbnQtIGFuZCByZWFyLWNvbnRleHQKc3RyaW5ncyBp biB0aGUgcmVjb3JkIC0tIHRoZSBwb3NpdGlvbiBpcyBlbm91Z2guCgpJZiBQT1NOIGlzIG5vbi1u aWwsIHJlY29yZCBQT1NOIGFzIHRoZSBwb2ludCBpbnN0ZWFkIG9mIGAocG9pbnQpJy4iCiAgYCgs QCh1bmxlc3Mgbm8tZmlsZSBgKChmaWxlbmFtZSAuICwoYm9va21hcmstYnVmZmVyLWZpbGUtbmFt ZSkpKSkKICAgICxAKHVubGVzcyBuby1jb250ZXh0IGAoKGZyb250LWNvbnRleHQtc3RyaW5nCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIC4gLChpZiAoPj0gKC0gKHBvaW50LW1heCkgKHBvaW50 KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rbWFyay1zZWFyY2gt c2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5n LW5vLXByb3BlcnRpZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCsgKHBvaW50KSBib29rbWFyay1z ZWFyY2gtc2l6ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwpKSkpCiAg ICAsQCh1bmxlc3Mgbm8tY29udGV4dCBgKChyZWFyLWNvbnRleHQtc3RyaW5nCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIC4gLChpZiAoPj0gKC0gKHBvaW50KSAocG9pbnQtbWluKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rbWFyay1zZWFyY2gtc2l6ZSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3Bl cnRpZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0gKHBvaW50KSBib29rbWFyay1zZWFyY2gtc2l6 ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwpKSkpCiAgICAocG9zaXRp b24gLiAsKG9yIHBvc24gKHBvaW50KSkpCiAgICAobGFzdC1tb2RpZmllZCAuICwoY3VycmVudC10 aW1lKSkpKQoKDAo7OzsgRmlsZSBmb3JtYXQgc3R1ZmYKCjs7ICpJTVBPUlRBTlQgTk9USUNFKiBJ ZiB5b3UgYXJlIHRoaW5raW5nIGFib3V0IG1vZGlmeWluZyAocmVkZWZpbmluZykKOzsgdGhlIGJv b2ttYXJrIGZpbGUgZm9ybWF0IC0tIHBsZWFzZSBkb24ndC4gIFRoZSBjdXJyZW50IGZvcm1hdAo7 OyBzaG91bGQgYmUgZXh0ZW5zaWJsZSBlbm91Z2guICBJZiB5b3UgZmVlbCB0aGUgbmVlZCB0byBj aGFuZ2UgaXQsCjs7IHBsZWFzZSBkaXNjdXNzIGl0IHdpdGggb3RoZXIgRW1hY3MgZGV2ZWxvcGVy cyBmaXJzdC4KOzsKOzsgVGhlIGZvcm1hdCBvZiBgYm9va21hcmstYWxpc3QnIGhhcyBjaGFuZ2Vk IHR3aWNlIGluIGl0cyBsaWZldGltZS4KOzsgVGhpcyBjb21tZW50IGRlc2NyaWJlcyB0aGUgdGhy ZWUgZm9ybWF0cywgRklSU1QsIFNFQ09ORCwgYW5kCjs7IENVUlJFTlQuCjs7Cjs7IFRoZSBGSVJT VCBmb3JtYXQgd2FzIHVzZWQgcHJpb3IgdG8gRW1hY3MgMjA6Cjs7Cjs7ICAgICAgICgoQk9PS01B UkstTkFNRSAoRklMRU5BTUUKOzsgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklORy1JTi1G Uk9OVAo7OyAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HLUJFSElORAo7OyAgICAgICAg ICAgICAgICAgICAgICAgICAgUE9JTlQpKQo7OyAgICAgICAgLi4uKQo7Owo7OyBUaGUgU0VDT05E IGZvcm1hdCB3YXMgaW50cm9kdWNlZCBpbiBFbWFjcyAyMDoKOzsKOzsgICAgICAgKChCT09LTUFS Sy1OQU1FICgoZmlsZW5hbWUgICAuIEZJTEVOQU1FKQo7OyAgICAgICAgICAgICAgICAgICAgICAg IChwb3NpdGlvbiAgIC4gUE9TKQo7OyAgICAgICAgICAgICAgICAgICAgICAgIChmcm9udC1jb250 ZXh0LXN0cmluZyAuIFNUUi1BRlRFUi1QT1MpCjs7ICAgICAgICAgICAgICAgICAgICAgICAgKHJl YXItY29udGV4dC1zdHJpbmcgIC4gU1RSLUJFRk9SRS1QT1MpCjs7ICAgICAgICAgICAgICAgICAg ICAgICAgKGFubm90YXRpb24gLiBBTk5PVEFUSU9OKQo7OyAgICAgICAgICAgICAgICAgICAgICAg ICh3aGF0ZXZlciAgIC4gVkFMVUUpCjs7ICAgICAgICAgICAgICAgICAgICAgICAgLi4uCjs7ICAg ICAgICAgICAgICAgICAgICAgICApKQo7OyAgICAgICAgLi4uKQo7Owo7OyBUaGUgQ1VSUkVOVCBm b3JtYXQgd2FzIGludHJvZHVjZWQgaW4gRW1hY3MgMjI6Cjs7Cjs7ICAgICAgICgoQk9PS01BUkst TkFNRSAoZmlsZW5hbWUgICAuIEZJTEVOQU1FKQo7OyAgICAgICAgICAgICAgICAgICAgICAgKHBv c2l0aW9uICAgLiBQT1MpCjs7ICAgICAgICAgICAgICAgICAgICAgICAoZnJvbnQtY29udGV4dC1z dHJpbmcgLiBTVFItQUZURVItUE9TKQo7OyAgICAgICAgICAgICAgICAgICAgICAgKHJlYXItY29u dGV4dC1zdHJpbmcgIC4gU1RSLUJFRk9SRS1QT1MpCjs7ICAgICAgICAgICAgICAgICAgICAgICAo YW5ub3RhdGlvbiAuIEFOTk9UQVRJT04pCjs7ICAgICAgICAgICAgICAgICAgICAgICAod2hhdGV2 ZXIgICAuIFZBTFVFKQo7OyAgICAgICAgICAgICAgICAgICAgICAgLi4uCjs7ICAgICAgICAgICAg ICAgICAgICAgICApCjs7ICAgICAgICAuLi4pCjs7Cjs7IEJvdGggRklSU1QgYW5kIFNFQ09ORCBo YXZlIHRoZSBzYW1lIGxldmVsIG9mIG5lc3Rpbmc6IHRoZSBjYWRyIG9mIGEKOzsgYm9va21hcmsg cmVjb3JkIGlzIGEgbGlzdCBvZiBlbnRyeSBpbmZvcm1hdGlvbi4gIEZJUlNUIGFuZCBTRUNPTkQK OzsgZGlmZmVyIGluIHRoZSBmb3JtIG9mIHRoZSByZWNvcmQgaW5mb3JtYXRpb246IEZJUlNUIHVz ZXMgYSBsaXN0IG9mCjs7IGF0b21zLCBhbmQgU0VDT05EIHVzZXMgYW4gYWxpc3QuICBJbiB0aGUg RklSU1QgZm9ybWF0LCB0aGUgb3JkZXIgb2YKOzsgdGhlIGxpc3QgZWxlbWVudHMgbWF0dGVycy4g IEluIHRoZSBTRUNPTkQgZm9ybWF0LCB0aGUgb3JkZXIgb2YgdGhlCjs7IGFsaXN0IGVsZW1lbnRz IGlzIHVuaW1wb3J0YW50LiAgVGhlIFNFQ09ORCBmb3JtYXQgZmFjaWxpdGF0ZXMgdGhlCjs7IGFk ZGl0aW9uIG9mIG5ldyBraW5kcyBvZiBlbGVtZW50cywgdG8gc3VwcG9ydCBuZXcga2luZHMgb2YK OzsgYm9va21hcmtzIG9yIGNvZGUgZXZvbHV0aW9uLgo7Owo7OyBUaGUgQ1VSUkVOVCBmb3JtYXQg cmVtb3ZlcyBhIGxldmVsIG9mIG5lc3Rpbmcgd3J0IEZJUlNUIGFuZCBTRUNPTkQsCjs7IHNhdmlu ZyBvbmUgY29ucyBjZWxsIHBlciBib29rbWFyazogdGhlIGNhZHIgb2YgYSBib29rbWFyayByZWNv cmQgaXMKOzsgbm8gbG9uZ2VyIGEgY29ucy4gIFdoeSB0aGF0IGNoYW5nZSB3YXMgbWFkZSByZW1h aW5zIGEgbXlzdGVyeSAtLQo7OyBqdXN0IGJlIGF3YXJlIG9mIGl0LiAgKEJlIGF3YXJlIHRvbyB0 aGF0IHRoaXMgZXhwbGFuYXRvcnkgY29tbWVudAo7OyB3YXMgaW5jb3JyZWN0IGluIEVtYWNzIDIy IGFuZCBFbWFjcyAyMy4xLikKOzsKOzsgVG8gZGVhbCB3aXRoIHRoZSBjaGFuZ2UgZnJvbSBGSVJT VCBmb3JtYXQgdG8gU0VDT05ELCBjb252ZXJzaW9uCjs7IGNvZGUgd2FzIGFkZGVkLCB3aGljaCBp cyBubyBsb25nZXIgdXNlZCBhbmQgaGFzIGJlZW4gZGVjbGFyZWQKOzsgb2Jzb2xldGUuICBTZWUg YGJvb2ttYXJrLW1heWJlLXVwZ3JhZGUtZmlsZS1mb3JtYXQnLgo7Owo7OyBObyBjb252ZXJzaW9u IGZyb20gU0VDT05EIHRvIENVUlJFTlQgaXMgZG9uZS4gIEluc3RlYWQsIHRoZSBjb2RlCjs7IGhh bmRsZXMgYm90aCBmb3JtYXRzIE9LLiAgSXQgbXVzdCBjb250aW51ZSB0byBkbyBzby4KOzsKOzsg U2VlIHRoZSBkb2Mgc3RyaW5nIG9mIGBib29rbWFyay1hbGlzdCcgZm9yIGluZm9ybWF0aW9uIGFi b3V0IHRoZQo7OyBlbGVtZW50cyB0aGF0IGRlZmluZSBhIGJvb2ttYXJrIChlLmcuIGBmaWxlbmFt ZScpLgoKCihkZWZjb25zdCBib29rbWFyay1maWxlLWZvcm1hdC12ZXJzaW9uIDEKICAiVGhlIGN1 cnJlbnQgdmVyc2lvbiBvZiB0aGUgZm9ybWF0IHVzZWQgYnkgYm9va21hcmsgZmlsZXMuCllvdSBz aG91bGQgbmV2ZXIgbmVlZCB0byBjaGFuZ2UgdGhpcy4iKQoKCihkZWZjb25zdCBib29rbWFyay1l bmQtb2YtdmVyc2lvbi1zdGFtcC1tYXJrZXIKICAiLSotIEVuZCBPZiBCb29rbWFyayBGaWxlIEZv cm1hdCBWZXJzaW9uIFN0YW1wIC0qLVxuIgogICJUaGlzIHN0cmluZyBtYXJrcyB0aGUgZW5kIG9m IHRoZSB2ZXJzaW9uIHN0YW1wIGluIGEgYm9va21hcmsgZmlsZS4iKQoKCihkZWZ1biBib29rbWFy ay1hbGlzdC1mcm9tLWJ1ZmZlciAoKQogICJSZXR1cm4gYSBgYm9va21hcmstYWxpc3QnIGZyb20g dGhlIGN1cnJlbnQgYnVmZmVyLgpUaGUgYnVmZmVyIG11c3Qgb2YgY291cnNlIGNvbnRhaW4gYm9v a21hcmsgZm9ybWF0IGluZm9ybWF0aW9uLgpEb2VzIG5vdCBjYXJlIGZyb20gd2hlcmUgaW4gdGhl IGJ1ZmZlciBpdCBpcyBjYWxsZWQsIGFuZCBkb2VzIG5vdAphZmZlY3QgcG9pbnQuIgogIChzYXZl LWV4Y3Vyc2lvbgogICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgIChpZiAoc2VhcmNoLWZv cndhcmQgYm9va21hcmstZW5kLW9mLXZlcnNpb24tc3RhbXAtbWFya2VyIG5pbCB0KQogICAgICAg IChyZWFkIChjdXJyZW50LWJ1ZmZlcikpCiAgICAgIChpZiBidWZmZXItZmlsZS1uYW1lCiAgICAg ICAgICAoZXJyb3IgIkZpbGUgbm90IGluIGJvb2ttYXJrIGZvcm1hdDogJXMiIGJ1ZmZlci1maWxl LW5hbWUpCiAgICAgICAgKGVycm9yICJCdWZmZXIgbm90IGluIGJvb2ttYXJrIGZvcm1hdDogJXMi IChidWZmZXItbmFtZSkpKSkpKQoKKGRlZnVuIGJvb2ttYXJrLXVwZ3JhZGUtdmVyc2lvbi0wLWFs aXN0IChvbGQtbGlzdCkKICAiVXBncmFkZSBhIHZlcnNpb24gMCBhbGlzdCBPTEQtTElTVCB0byB0 aGUgY3VycmVudCB2ZXJzaW9uLiIKICAoZGVjbGFyZSAob2Jzb2xldGUgbmlsICIyNy4xIikpCiAg KG1hcGNhcgogICAobGFtYmRhIChib29rbWFyaykKICAgICAobGV0KiAoKG5hbWUgICAgICAoY2Fy IGJvb2ttYXJrKSkKICAgICAgICAgICAgKHJlY29yZCAgICAoY2FyIChjZHIgYm9va21hcmspKSkK ICAgICAgICAgICAgKGZpbGVuYW1lICAobnRoIDAgcmVjb3JkKSkKICAgICAgICAgICAgKGZyb250 LXN0ciAobnRoIDEgcmVjb3JkKSkKICAgICAgICAgICAgKHJlYXItc3RyICAobnRoIDIgcmVjb3Jk KSkKICAgICAgICAgICAgKHBvc2l0aW9uICAobnRoIDMgcmVjb3JkKSkKICAgICAgICAgICAgKGFu biAgICAgICAobnRoIDQgcmVjb3JkKSkpCiAgICAgICAobGlzdAogICAgICAgIG5hbWUKICAgICAg ICBgKChmaWxlbmFtZSAgICAgICAgICAgICAuICAgICxmaWxlbmFtZSkKICAgICAgICAgIChmcm9u dC1jb250ZXh0LXN0cmluZyAuICAgICwob3IgZnJvbnQtc3RyICIiKSkKICAgICAgICAgIChyZWFy LWNvbnRleHQtc3RyaW5nICAuICAgICwob3IgcmVhci1zdHIgICIiKSkKICAgICAgICAgIChwb3Np dGlvbiAgICAgICAgICAgICAuICAgICxwb3NpdGlvbikKICAgICAgICAgIChhbm5vdGF0aW9uICAg ICAgICAgICAuICAgICxhbm4pKSkpKQogICBvbGQtbGlzdCkpCgoKKGRlZnVuIGJvb2ttYXJrLXVw Z3JhZGUtZmlsZS1mb3JtYXQtZnJvbS0wICgpCiAgIlVwZ3JhZGUgYSBib29rbWFyayBmaWxlIG9m IGZvcm1hdCAwICh0aGUgb3JpZ2luYWwgZm9ybWF0KSB0byBmb3JtYXQgMS4KVGhpcyBleHBlY3Rz IHRvIGJlIGNhbGxlZCBmcm9tIGBwb2ludC1taW4nIGluIGEgYm9va21hcmsgZmlsZS4iCiAgKGRl Y2xhcmUgKG9ic29sZXRlIG5pbCAiMjcuMSIpKQogIChsZXQqICgocmVwb3J0ZXIgKG1ha2UtcHJv Z3Jlc3MtcmVwb3J0ZXIKICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJVcGdyYWRpbmcgYm9v a21hcmsgZm9ybWF0IGZyb20gMCB0byAlZC4uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2ttYXJrLWZpbGUtZm9ybWF0LXZlcnNpb24pKSkKICAgICAgICAgKG9sZC1saXN0IChib29r bWFyay1hbGlzdC1mcm9tLWJ1ZmZlcikpCiAgICAgICAgIChuZXctbGlzdCAod2l0aC1zdXBwcmVz c2VkLXdhcm5pbmdzCiAgICAgICAgICAgICAgICAgICAgICAgKChvYnNvbGV0ZSBib29rbWFyay11 cGdyYWRlLXZlcnNpb24tMC1hbGlzdCkpCiAgICAgICAgICAgICAgICAgICAgIChib29rbWFyay11 cGdyYWRlLXZlcnNpb24tMC1hbGlzdCBvbGQtbGlzdCkpKSkKICAgIChkZWxldGUtcmVnaW9uIChw b2ludC1taW4pIChwb2ludC1tYXgpKQogICAgKGJvb2ttYXJrLWluc2VydC1maWxlLWZvcm1hdC12 ZXJzaW9uLXN0YW1wIGJ1ZmZlci1maWxlLWNvZGluZy1zeXN0ZW0pCiAgICAocHAgbmV3LWxpc3Qg KGN1cnJlbnQtYnVmZmVyKSkKICAgIChzYXZlLWJ1ZmZlcikKICAgIChnb3RvLWNoYXIgKHBvaW50 LW1pbikpCiAgICAocHJvZ3Jlc3MtcmVwb3J0ZXItZG9uZSByZXBvcnRlcikpKQoKCihkZWZ1biBi b29rbWFyay1ncm9rLWZpbGUtZm9ybWF0LXZlcnNpb24gKCkKICAiUmV0dXJuIGFuIGludGVnZXIg d2hpY2ggaXMgdGhlIGZpbGUtZm9ybWF0IHZlcnNpb24gb2YgdGhpcyBib29rbWFyayBmaWxlLgpU aGlzIGV4cGVjdHMgdG8gYmUgY2FsbGVkIGZyb20gYHBvaW50LW1pbicgaW4gYSBib29rbWFyayBm aWxlLiIKICAoZGVjbGFyZSAob2Jzb2xldGUgbmlsICIyNy4xIikpCiAgKGlmIChsb29raW5nLWF0 ICJeOzs7OyIpCiAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgIChzYXZlLW1hdGNoLWRhdGEK ICAgICAgICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiWzAtOV0iKQogICAgICAgICAgKGZvcndhcmQt Y2hhciAtMSkKICAgICAgICAgIChyZWFkIChjdXJyZW50LWJ1ZmZlcikpKSkKICAgIDs7IEVsc2Ug dGhpcyBpcyBmb3JtYXQgdmVyc2lvbiAwLCB0aGUgb3JpZ2luYWwgb25lLCB3aGljaCBkaWRuJ3QK ICAgIDs7IGV2ZW4gaGF2ZSB2ZXJzaW9uIHN0YW1wcy4KICAgIDApKQoKCihkZWZ1biBib29rbWFy ay1tYXliZS11cGdyYWRlLWZpbGUtZm9ybWF0ICgpCiAgIkNoZWNrIHRoZSBmaWxlLWZvcm1hdCB2 ZXJzaW9uIG9mIHRoaXMgYm9va21hcmsgZmlsZS4KSWYgdGhlIHZlcnNpb24gaXMgbm90IHVwLXRv LWRhdGUsIHVwZ3JhZGUgaXQgYXV0b21hdGljYWxseS4KVGhpcyBleHBlY3RzIHRvIGJlIGNhbGxl ZCBmcm9tIGBwb2ludC1taW4nIGluIGEgYm9va21hcmsgZmlsZS4iCiAgKGRlY2xhcmUgKG9ic29s ZXRlIG5pbCAiMjcuMSIpKQogIChsZXQgKCh2ZXJzaW9uCiAgICAgICAgICh3aXRoLXN1cHByZXNz ZWQtd2FybmluZ3MKICAgICAgICAgICAgICgob2Jzb2xldGUgYm9va21hcmstZ3Jvay1maWxlLWZv cm1hdC12ZXJzaW9uKSkKICAgICAgICAgICAoYm9va21hcmstZ3Jvay1maWxlLWZvcm1hdC12ZXJz aW9uKSkpKQogICAgKGNvbmQKICAgICAoKD0gdmVyc2lvbiBib29rbWFyay1maWxlLWZvcm1hdC12 ZXJzaW9uKQogICAgICApIDsgaG9tZSBmcmVlIC0tIHZlcnNpb24gaXMgY3VycmVudAogICAgICgo PSB2ZXJzaW9uIDApCiAgICAgICh3aXRoLXN1cHByZXNzZWQtd2FybmluZ3MKICAgICAgICAgICgo b2Jzb2xldGUgYm9va21hcmstdXBncmFkZS1maWxlLWZvcm1hdC1mcm9tLTApKQogICAgICAgIChi b29rbWFyay11cGdyYWRlLWZpbGUtZm9ybWF0LWZyb20tMCkpKQogICAgICh0CiAgICAgIChlcnJv ciAiQm9va21hcmsgZmlsZSBmb3JtYXQgdmVyc2lvbiBzdHJhbmdlbmVzcyIpKSkpKQoKCihkZWZ1 biBib29rbWFyay1pbnNlcnQtZmlsZS1mb3JtYXQtdmVyc2lvbi1zdGFtcCAoY29kaW5nKQogICJJ bnNlcnQgdGV4dCBpbmRpY2F0aW5nIGN1cnJlbnQgdmVyc2lvbiBvZiBib29rbWFyayBmaWxlIGZv cm1hdC4KQ09ESU5HIGlzIHRoZSBzeW1ib2wgb2YgdGhlIGNvZGluZy1zeXN0ZW0gaW4gd2hpY2gg dGhlIGZpbGUgaXMgZW5jb2RlZC4iCiAgKGlmIChtZW1xIChjb2Rpbmctc3lzdGVtLWJhc2UgY29k aW5nKSAnKHVuZGVjaWRlZCBwcmVmZXItdXRmLTgpKQogICAgICAoc2V0cSBjb2RpbmcgJ3V0Zi04 LWVtYWNzKSkKICAoaW5zZXJ0CiAgIChmb3JtYXQKICAgICI7Ozs7IEVtYWNzIEJvb2ttYXJrIEZv cm1hdCBWZXJzaW9uICVkXAo7Ozs7IC0qLSBjb2Rpbmc6ICVTOyBtb2RlOiBsaXNwLWRhdGEgLSot XG4iCiAgICBib29rbWFyay1maWxlLWZvcm1hdC12ZXJzaW9uIChjb2Rpbmctc3lzdGVtLWJhc2Ug Y29kaW5nKSkpCiAgKGluc2VydCAiOzs7IFRoaXMgZm9ybWF0IGlzIG1lYW50IHRvIGJlIHNsaWdo dGx5IGh1bWFuLXJlYWRhYmxlO1xuIgogICAgICAgICAgIjs7OyBuZXZlcnRoZWxlc3MsIHlvdSBw cm9iYWJseSBkb24ndCB3YW50IHRvIGVkaXQgaXQuXG4iCiAgICAgICAgICAiOzs7ICIKICAgICAg ICAgIGJvb2ttYXJrLWVuZC1vZi12ZXJzaW9uLXN0YW1wLW1hcmtlcikpCgoKOzs7IGVuZCBmaWxl LWZvcm1hdCBzdHVmZgoKDAo7OzsgQ29yZSBjb2RlOgoKKGRlZmluZS1vYnNvbGV0ZS1mdW5jdGlv bi1hbGlhcyAnYm9va21hcmstbWF5YmUtbWVzc2FnZSAnbWVzc2FnZSAiMjcuMSIpCgooZGVmdmFy LWtleW1hcCBib29rbWFyay1taW5pYnVmZmVyLXJlYWQtbmFtZS1tYXAKICA6cGFyZW50IG1pbmli dWZmZXItbG9jYWwtbWFwCiAgIkMtdyIgIydib29rbWFyay15YW5rLXdvcmQpCgooZGVmdW4gYm9v a21hcmstc2V0LWludGVybmFsIChwcm9tcHQgbmFtZSBvdmVyd3JpdGUtb3ItcHVzaCkKICAiU2V0 IGEgYm9va21hcmsgdXNpbmcgc3BlY2lmaWVkIE5BTUUgb3IgcHJvbXB0aW5nIHdpdGggUFJPTVBU LgpUaGUgYm9va21hcmsgaXMgc2V0IGF0IHRoZSBjdXJyZW50IGxvY2F0aW9uLgoKSWYgTkFNRSBp cyBub24tbmlsLCB1c2UgaXQgYXMgdGhlIG5hbWUgb2YgdGhlIG5ldyBib29rbWFyay4gIEluCnRo aXMgY2FzZSwgdGhlIHZhbHVlIG9mIFBST01QVCBpcyBpZ25vcmVkLgoKT3RoZXJ3aXNlLCBwcm9t cHQgdGhlIHVzZXIgZm9yIHRoZSBib29rbWFyayBuYW1lLiAgQmVnaW4gdGhlCmludGVyYWN0aXZl IHByb21wdCB3aXRoIFBST01QVCwgZm9sbG93ZWQgYnkgYSBzcGFjZSwgYSBnZW5lcmF0ZWQKZGVm YXVsdCBuYW1lIGluIHBhcmVudGhlc2VzLCBhIGNvbG9uIGFuZCBhIHNwYWNlLgoKT1ZFUldSSVRF LU9SLVBVU0ggY29udHJvbHMgd2hhdCBoYXBwZW5zIGlmIHRoZXJlIGlzIGFscmVhZHkgYQpib29r bWFyayB3aXRoIHRoZSBzYW1lIG5hbWU6IG5pbCBtZWFucyBzaWduYWwgYW4gZXJyb3I7CmBvdmVy d3JpdGUnIG1lYW5zIHJlcGxhY2UgYW55IGV4aXN0aW5nIGJvb2ttYXJrOyBgcHVzaCcgbWVhbnMK cHVzaCB0aGUgbmV3IGJvb2ttYXJrIG9udG8gdGhlIGJvb2ttYXJrIGFsaXN0LiAgVGhlIGBwdXNo JwpiZWhhdmlvciBtZWFucyB0aGF0IGFtb25nIGJvb2ttYXJrcyB3aXRoIHRoZSBzYW1lIG5hbWUs IHRoaXMgbW9zdApyZWNlbnRseSBzZXQgb25lIGJlY29tZXMgdGhlIG9uZSBpbiBlZmZlY3QsIGJ1 dCB0aGUgb3RoZXJzIGFyZQpzdGlsbCB0aGVyZSwgaW4gb3JkZXIsIGlmIHRoZSB0b3Btb3N0IG9u ZSBpcyBldmVyIGRlbGV0ZWQuIgogICh1bndpbmQtcHJvdGVjdAogICAgICAgKGxldCogKChyZWNv cmQgKGJvb2ttYXJrLW1ha2UtcmVjb3JkKSkKICAgICAgICAgICAgICA7OyBgZGVmYXVsdHMnIGlz IGEgdHJhbnNpZW50IGVsZW1lbnQgb2YgdGhlCiAgICAgICAgICAgICAgOzsgZXh0ZW5zaWJsZSBm b3JtYXQgZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBzZWN0aW9uCiAgICAgICAgICAgICAgOzsgYEZp bGUgZm9ybWF0IHN0dWZmJy4gIEJvb2ttYXJrIHJlY29yZCBmdW5jdGlvbnMKICAgICAgICAgICAg ICA7OyBjYW4gdXNlIGl0IHRvIHNwZWNpZnkgYSBsaXN0IG9mIGRlZmF1bHQgdmFsdWVzCiAgICAg ICAgICAgICAgOzsgYWNjZXNzaWJsZSB2aWEgTS1uIHdoaWxlIHJlYWRpbmcgYSBib29rbWFyayBu YW1lLgogICAgICAgICAgICAgIChkZWZhdWx0cyAoYm9va21hcmstcHJvcC1nZXQgcmVjb3JkICdk ZWZhdWx0cykpCiAgICAgICAgICAgICAgKGRlZmF1bHQgKGlmIChjb25zcCBkZWZhdWx0cykgKGNh ciBkZWZhdWx0cykgZGVmYXVsdHMpKSkKCiAgICAgICAgIChpZiBkZWZhdWx0cwogICAgICAgICAg ICAgOzsgRG9uJ3Qgc3RvcmUgZGVmYXVsdCB2YWx1ZXMgaW4gdGhlIHJlY29yZC4KICAgICAgICAg ICAgIChzZXRxIHJlY29yZCAoYXNzcS1kZWxldGUtYWxsICdkZWZhdWx0cyByZWNvcmQpKQogICAg ICAgICAgIDs7IFdoZW4gbm8gZGVmYXVsdHMgaW4gdGhlIHJlY29yZCwgdXNlIGl0cyBmaXJzdCBl bGVtZW50LgogICAgICAgICAgIChzZXRxIGRlZmF1bHRzIChjYXIgcmVjb3JkKSBkZWZhdWx0IGRl ZmF1bHRzKSkKCiAgICAgICAgIChib29rbWFyay1tYXliZS1sb2FkLWRlZmF1bHQtZmlsZSkKICAg ICAgICAgOzsgRG9uJ3Qgc2V0IGBib29rbWFyay15YW5rLXBvaW50JyBhbmQgYGJvb2ttYXJrLWN1 cnJlbnQtYnVmZmVyJwogICAgICAgICA7OyBpZiB0aGV5IGhhdmUgYmVlbiBhbHJlYWR5IHNldCBp biBhbm90aGVyIGJ1ZmZlci4gKGUuZyBnbnVzLWFydCkuCiAgICAgICAgICh1bmxlc3MgKGFuZCBi b29rbWFyay15YW5rLXBvaW50CiAgICAgICAgICAgICAgICAgICAgICBib29rbWFyay1jdXJyZW50 LWJ1ZmZlcikKICAgICAgICAgICAoc2V0cSBib29rbWFyay15YW5rLXBvaW50IChwb2ludCkpCiAg ICAgICAgICAgKHNldHEgYm9va21hcmstY3VycmVudC1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkp CgogICAgICAgICAobGV0ICgoc3RyCiAgICAgICAgICAgICAgICAob3IgbmFtZQogICAgICAgICAg ICAgICAgICAgIChyZWFkLWZyb20tbWluaWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAoZm9y bWF0LXByb21wdCBwcm9tcHQgZGVmYXVsdCkKICAgICAgICAgICAgICAgICAgICAgbmlsCiAgICAg ICAgICAgICAgICAgICAgIGJvb2ttYXJrLW1pbmlidWZmZXItcmVhZC1uYW1lLW1hcAogICAgICAg ICAgICAgICAgICAgICBuaWwgbmlsIGRlZmF1bHRzKSkpKQogICAgICAgICAgIChhbmQgKHN0cmlu Zy1lcXVhbCBzdHIgIiIpIChzZXRxIHN0ciBkZWZhdWx0KSkKCiAgICAgICAgICAgKGNvbmQKICAg ICAgICAgICAgKChlcSBvdmVyd3JpdGUtb3ItcHVzaCBuaWwpCiAgICAgICAgICAgICAoaWYgKGJv b2ttYXJrLWdldC1ib29rbWFyayBzdHIgdCkKICAgICAgICAgICAgICAgICAoZXJyb3IgIkEgYm9v a21hcmsgbmFtZWQgXCIlc1wiIGFscmVhZHkgZXhpc3RzIiBzdHIpCiAgICAgICAgICAgICAgIChi b29rbWFyay1zdG9yZSBzdHIgKGNkciByZWNvcmQpIG5pbCkpKQogICAgICAgICAgICAoKGVxIG92 ZXJ3cml0ZS1vci1wdXNoICdvdmVyd3JpdGUpCiAgICAgICAgICAgICAoYm9va21hcmstc3RvcmUg c3RyIChjZHIgcmVjb3JkKSBuaWwpKQogICAgICAgICAgICAoKGVxIG92ZXJ3cml0ZS1vci1wdXNo ICdwdXNoKQogICAgICAgICAgICAgKGJvb2ttYXJrLXN0b3JlIHN0ciAoY2RyIHJlY29yZCkgdCkp CiAgICAgICAgICAgICh0CiAgICAgICAgICAgICAoZXJyb3IgIlVucmVjb2duaXplZCB2YWx1ZSBm b3IgYG92ZXJ3cml0ZS1vci1wdXNoJzogJVMiCiAgICAgICAgICAgICAgICAgICAgb3ZlcndyaXRl LW9yLXB1c2gpKSkKCiAgICAgICAgICAgOzsgQXNrIGZvciBhbiBhbm5vdGF0aW9uIGJ1ZmZlciBm b3IgdGhpcyBib29rbWFyawogICAgICAgICAgICh3aGVuIGJvb2ttYXJrLXVzZS1hbm5vdGF0aW9u cwogICAgICAgICAgICAgKGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbiBzdHIpKQogICAgICAgICAg ICh3aGVuIGJvb2ttYXJrLXNldC1mcmluZ2UtbWFyawogICAgICAgICAgICAgKGJvb2ttYXJrLS1z ZXQtZnJpbmdlLW1hcmspKSkpCiAgICAoc2V0cSBib29rbWFyay15YW5rLXBvaW50IG5pbCkKICAg IChzZXRxIGJvb2ttYXJrLWN1cnJlbnQtYnVmZmVyIG5pbCkpKQoKCjs7OyMjI2F1dG9sb2FkCihk ZWZ1biBib29rbWFyay1zZXQgKCZvcHRpb25hbCBuYW1lIG5vLW92ZXJ3cml0ZSkKICAiU2V0IGEg Ym9va21hcmsgbmFtZWQgTkFNRSBhdCB0aGUgY3VycmVudCBsb2NhdGlvbi4KSWYgTkFNRSBpcyBu aWwsIHRoZW4gcHJvbXB0IHRoZSB1c2VyLgoKV2l0aCBhIHByZWZpeCBhcmcgKG5vbi1uaWwgTk8t T1ZFUldSSVRFKSwgZG8gbm90IG92ZXJ3cml0ZSBhbnkKZXhpc3RpbmcgYm9va21hcmsgdGhhdCBo YXMgdGhlIHNhbWUgbmFtZSBhcyBOQU1FLCBidXQgaW5zdGVhZCBwdXNoIHRoZQpuZXcgYm9va21h cmsgb250byB0aGUgYm9va21hcmsgYWxpc3QuICBUaGUgbW9zdCByZWNlbnRseSBzZXQgYm9va21h cmsKd2l0aCBuYW1lIE5BTUUgaXMgdGh1cyB0aGUgb25lIGluIGVmZmVjdCBhdCBhbnkgZ2l2ZW4g dGltZSwgYnV0IHRoZQpvdGhlcnMgYXJlIHN0aWxsIHRoZXJlLCBzaG91bGQgdGhlIHVzZXIgZGVj aWRlIHRvIGRlbGV0ZSB0aGUgbW9zdApyZWNlbnQgb25lLgoKVG8geWFuayB3b3JkcyBmcm9tIHRo ZSB0ZXh0IG9mIHRoZSBidWZmZXIgYW5kIHVzZSB0aGVtIGFzIHBhcnQgb2YgdGhlCmJvb2ttYXJr IG5hbWUsIHR5cGUgXFw8Ym9va21hcmstbWluaWJ1ZmZlci1yZWFkLW5hbWUtbWFwPlwKXFxbYm9v a21hcmsteWFuay13b3JkXSB3aGlsZSBzZXR0aW5nIGEgYm9va21hcmsuICBTdWNjZXNzaXZlIFwK XFxbYm9va21hcmsteWFuay13b3JkXSdzCnlhbmsgc3VjY2Vzc2l2ZSB3b3Jkcy4KClR5cGluZyBc XFt1bml2ZXJzYWwtYXJndW1lbnRdIGluc2VydHMgKGF0IHRoZSBib29rbWFyayBuYW1lIHByb21w dCkgdGhlIG5hbWUgb2YgdGhlIGxhc3QKYm9va21hcmsgdXNlZCBpbiB0aGUgZG9jdW1lbnQgd2hl cmUgdGhlIG5ldyBib29rbWFyayBpcyBiZWluZyBzZXQ7CnRoaXMgaGVscHMgeW91IHVzZSBhIHNp bmdsZSBib29rbWFyayBuYW1lIHRvIHRyYWNrIHByb2dyZXNzIHRocm91Z2ggYQpsYXJnZSBkb2N1 bWVudC4gIElmIHRoZXJlIGlzIG5vIHByaW9yIGJvb2ttYXJrIGZvciB0aGlzIGRvY3VtZW50LCB0 aGVuClxcW3VuaXZlcnNhbC1hcmd1bWVudF0gaW5zZXJ0cyBhbiBhcHByb3ByaWF0ZSBuYW1lIGJh c2VkIG9uIHRoZSBidWZmZXIgb3IgZmlsZS4KClVzZSBcXFtib29rbWFyay1kZWxldGVdIHRvIHJl bW92ZSBib29rbWFya3MgKHlvdSBnaXZlIGl0IGEgbmFtZSBhbmQKaXQgcmVtb3ZlcyBvbmx5IHRo ZSBmaXJzdCBpbnN0YW5jZSBvZiBhIGJvb2ttYXJrIHdpdGggdGhhdCBuYW1lIGZyb20KdGhlIGxp c3Qgb2YgYm9va21hcmtzLikiCiAgKGludGVyYWN0aXZlIChsaXN0IG5pbCBjdXJyZW50LXByZWZp eC1hcmcpKQogIChsZXQgKChwcm9tcHQKICAgICAgICAgKGlmIG5vLW92ZXJ3cml0ZSAiQXBwZW5k IGJvb2ttYXJrIG5hbWVkIiAiU2V0IGJvb2ttYXJrIG5hbWVkIikpKQogICAgKGJvb2ttYXJrLXNl dC1pbnRlcm5hbCBwcm9tcHQgbmFtZSAoaWYgbm8tb3ZlcndyaXRlICdwdXNoICdvdmVyd3JpdGUp KSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gYm9va21hcmstc2V0LW5vLW92ZXJ3cml0ZSAoJm9w dGlvbmFsIG5hbWUgcHVzaC1ib29rbWFyaykKICAiU2V0IGEgYm9va21hcmsgbmFtZWQgTkFNRSBh dCB0aGUgY3VycmVudCBsb2NhdGlvbi4KSWYgTkFNRSBpcyBuaWwsIHRoZW4gcHJvbXB0IHRoZSB1 c2VyLgoKSWYgYSBib29rbWFyayBuYW1lZCBOQU1FIGFscmVhZHkgZXhpc3RzIGFuZCBwcmVmaXgg YXJndW1lbnQKUFVTSC1CT09LTUFSSyBpcyBub24tbmlsLCB0aGVuIHB1c2ggdGhlIG5ldyBib29r bWFyayBvbnRvIHRoZQpib29rbWFyayBhbGlzdC4gIFB1c2hpbmcgaXQgbWVhbnMgdGhhdCBhbW9u ZyBib29rbWFya3MgbmFtZWQKTkFNRSwgdGhpcyBvbmUgYmVjb21lcyB0aGUgb25lIGluIGVmZmVj dCwgYnV0IHRoZSBvdGhlcnMgYXJlCnN0aWxsIHRoZXJlLCBpbiBvcmRlciwgYW5kIGJlY29tZSBl ZmZlY3RpdmUgYWdhaW4gaWYgdGhlIHVzZXIKZXZlciBkZWxldGVzIHRoZSBtb3N0IHJlY2VudCBv bmUuCgpPdGhlcndpc2UsIGlmIGEgYm9va21hcmsgbmFtZWQgTkFNRSBhbHJlYWR5IGV4aXN0cyBi dXQgUFVTSC1CT09LTUFSSwppcyBuaWwsIHJhaXNlIGFuIGVycm9yLgoKVG8geWFuayB3b3JkcyBm cm9tIHRoZSB0ZXh0IG9mIHRoZSBidWZmZXIgYW5kIHVzZSB0aGVtIGFzIHBhcnQgb2YgdGhlCmJv b2ttYXJrIG5hbWUsIHR5cGUgXFw8Ym9va21hcmstbWluaWJ1ZmZlci1yZWFkLW5hbWUtbWFwPlwK XFxbYm9va21hcmsteWFuay13b3JkXSB3aGlsZSBzZXR0aW5nIGEgYm9va21hcmsuICBTdWNjZXNz aXZlIFwKXFxbYm9va21hcmsteWFuay13b3JkXSdzCnlhbmsgc3VjY2Vzc2l2ZSB3b3Jkcy4KClR5 cGluZyBcXFt1bml2ZXJzYWwtYXJndW1lbnRdIGluc2VydHMgKGF0IHRoZSBib29rbWFyayBuYW1l IHByb21wdCkgdGhlIG5hbWUgb2YgdGhlIGxhc3QKYm9va21hcmsgdXNlZCBpbiB0aGUgZG9jdW1l bnQgd2hlcmUgdGhlIG5ldyBib29rbWFyayBpcyBiZWluZyBzZXQ7CnRoaXMgaGVscHMgeW91IHVz ZSBhIHNpbmdsZSBib29rbWFyayBuYW1lIHRvIHRyYWNrIHByb2dyZXNzIHRocm91Z2ggYQpsYXJn ZSBkb2N1bWVudC4gIElmIHRoZXJlIGlzIG5vIHByaW9yIGJvb2ttYXJrIGZvciB0aGlzIGRvY3Vt ZW50LCB0aGVuClxcW3VuaXZlcnNhbC1hcmd1bWVudF0gaW5zZXJ0cyBhbiBhcHByb3ByaWF0ZSBu YW1lIGJhc2VkIG9uIHRoZSBidWZmZXIgb3IgZmlsZS4KClVzZSBcXFtib29rbWFyay1kZWxldGVd IHRvIHJlbW92ZSBib29rbWFya3MgKHlvdSBnaXZlIGl0IGEgbmFtZSBhbmQKaXQgcmVtb3ZlcyBv bmx5IHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhIGJvb2ttYXJrIHdpdGggdGhhdCBuYW1lIGZyb20K dGhlIGxpc3Qgb2YgYm9va21hcmtzLikiCiAgKGludGVyYWN0aXZlIChsaXN0IG5pbCBjdXJyZW50 LXByZWZpeC1hcmcpKQogIChib29rbWFyay1zZXQtaW50ZXJuYWwgIlNldCBib29rbWFyayIgbmFt ZSAoaWYgcHVzaC1ib29rbWFyayAncHVzaCBuaWwpKSkKCgooZGVmdW4gYm9va21hcmsta2lsbC1s aW5lICgmb3B0aW9uYWwgbmV3bGluZS10b28pCiAgIktpbGwgZnJvbSBwb2ludCB0byBlbmQgb2Yg bGluZS4KSWYgb3B0aW9uYWwgYXJnIE5FV0xJTkUtVE9PIGlzIG5vbi1uaWwsIGRlbGV0ZSB0aGUg bmV3bGluZSB0b28uCkRvZXMgbm90IGFmZmVjdCB0aGUga2lsbCByaW5nLiIKICAobGV0ICgoZW9s IChsaW5lLWVuZC1wb3NpdGlvbikpKQogICAgKGRlbGV0ZS1yZWdpb24gKHBvaW50KSBlb2wpCiAg ICAod2hlbiAoYW5kIG5ld2xpbmUtdG9vICg9IChmb2xsb3dpbmctY2hhcikgP1xuKSkKICAgICAg KGRlbGV0ZS1jaGFyIDEpKSkpCgooZGVmdmFyLWxvY2FsIGJvb2ttYXJrLWFubm90YXRpb24tbmFt ZSBuaWwKICAiTmFtZSBvZiBib29rbWFyayB1bmRlciBlZGl0IGluIGBib29rbWFyay1lZGl0LWFu bm90YXRpb24tbW9kZScuIikKCihkZWZ2YXItbG9jYWwgYm9va21hcmstLWFubm90YXRpb24tZnJv bS1ib29rbWFyay1saXN0IG5pbAogICJJZiBub24tbmlsLCBgYm9va21hcmstZWRpdC1hbm5vdGF0 aW9uLW1vZGUnIHNob3VsZCByZXR1cm4gdG8gYm9va21hcmsgbGlzdC4iKQoKKGRlZnVuIGJvb2tt YXJrLWRlZmF1bHQtYW5ub3RhdGlvbi10ZXh0IChib29rbWFyay1uYW1lKQogICJSZXR1cm4gZGVm YXVsdCBhbm5vdGF0aW9uIHRleHQgZm9yIEJPT0tNQVJLLU5BTUUuClRoZSBkZWZhdWx0IGFubm90 YXRpb24gdGV4dCBpcyBzaW1wbHkgc29tZSB0ZXh0IGV4cGxhaW5pbmcgaG93IHRvIHVzZQphbm5v dGF0aW9ucy4iCiAgKGNvbmNhdCAoZm9ybWF0LW1lc3NhZ2UKICAgICAgICAgICAiIyAgVHlwZSB0 aGUgYW5ub3RhdGlvbiBmb3IgYm9va21hcmsgYCVzJyBoZXJlLlxuIgogICAgICAgICAgIGJvb2tt YXJrLW5hbWUpCgkgIChmb3JtYXQtbWVzc2FnZQogICAgICAgICAgICIjICBBbGwgbGluZXMgd2hp Y2ggc3RhcnQgd2l0aCBhIGAjJyB3aWxsIGJlIGRlbGV0ZWQuXG4iKQogICAgICAgICAgKHN1YnN0 aXR1dGUtY29tbWFuZC1rZXlzCiAgICAgICAgICAgKGNvbmNhdAogICAgICAgICAgICAiIyAgVHlw ZSBcXFtib29rbWFyay1lZGl0LWFubm90YXRpb24tY29uZmlybV0gd2hlbiBkb25lLiAgVHlwZSAi CiAgICAgICAgICAgICJcXFtib29rbWFyay1lZGl0LWFubm90YXRpb24tY2FuY2VsXSB0byBjYW5j ZWwuXG4jXG4iKSkKCSAgIiMgIEF1dGhvcjogIiAodXNlci1mdWxsLW5hbWUpICIgPCIgKHVzZXIt bG9naW4tbmFtZSkgIkAiCgkgIChzeXN0ZW0tbmFtZSkgIj5cbiIKICAgICAgICAgICIjICBEYXRl OiAgICIgKGN1cnJlbnQtdGltZS1zdHJpbmcpICJcbiIpKQoKCihkZWZ2YXIgYm9va21hcmstZWRp dC1hbm5vdGF0aW9uLXRleHQtZnVuYyAnYm9va21hcmstZGVmYXVsdC1hbm5vdGF0aW9uLXRleHQK ICAiRnVuY3Rpb24gdG8gcmV0dXJuIGRlZmF1bHQgdGV4dCB0byB1c2UgZm9yIGEgYm9va21hcmsg YW5ub3RhdGlvbi4KSXQgdGFrZXMgb25lIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgYm9va21h cmssIGFzIGEgc3RyaW5nLiIpCgooZGVmdmFyLWtleW1hcCBib29rbWFyay1lZGl0LWFubm90YXRp b24tbW9kZS1tYXAKICA6ZG9jICJLZXltYXAgZm9yIGVkaXRpbmcgYW4gYW5ub3RhdGlvbiBvZiBh IGJvb2ttYXJrLiIKICA6cGFyZW50IHRleHQtbW9kZS1tYXAKICAiQy1jIEMtYyIgIydib29rbWFy ay1lZGl0LWFubm90YXRpb24tY29uZmlybQogICJDLWMgQy1rIiAjJ2Jvb2ttYXJrLWVkaXQtYW5u b3RhdGlvbi1jYW5jZWwpCgooZGVmdW4gYm9va21hcmstaW5zZXJ0LWFubm90YXRpb24gKGJvb2tt YXJrLW5hbWUtb3ItcmVjb3JkKQogICJJbnNlcnQgYW5ub3RhdGlvbiBmb3IgQk9PS01BUkstTkFN RS1PUi1SRUNPUkQgYXQgcG9pbnQuIgogICh3aGVuIChub3QgKGJvb2ttYXJrLWdldC1ib29rbWFy ayBib29rbWFyay1uYW1lLW9yLXJlY29yZCB0KSkKICAgIChlcnJvciAiSW52YWxpZCBib29rbWFy azogJXMiIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKSkKICAoaW5zZXJ0IChmdW5jYWxsIGJvb2tt YXJrLWVkaXQtYW5ub3RhdGlvbi10ZXh0LWZ1bmMgYm9va21hcmstbmFtZS1vci1yZWNvcmQpKQog IChsZXQgKChhbm5vdGF0aW9uIChib29rbWFyay1nZXQtYW5ub3RhdGlvbiBib29rbWFyay1uYW1l LW9yLXJlY29yZCkpKQogICAgKGlmIChhbmQgYW5ub3RhdGlvbiAobm90IChzdHJpbmctZXF1YWwg YW5ub3RhdGlvbiAiIikpKQoJKGluc2VydCBhbm5vdGF0aW9uKSkpKQoKKGRlZmluZS1kZXJpdmVk LW1vZGUgYm9va21hcmstZWRpdC1hbm5vdGF0aW9uLW1vZGUKICB0ZXh0LW1vZGUgIkVkaXQgQm9v a21hcmsgQW5ub3RhdGlvbiIKICAiTW9kZSBmb3IgZWRpdGluZyB0aGUgYW5ub3RhdGlvbiBvZiBi b29rbWFya3MuClxcPGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi1tb2RlLW1hcD5cCldoZW4geW91 IGhhdmUgZmluaXNoZWQgY29tcG9zaW5nLCB0eXBlIFxcW2Jvb2ttYXJrLWVkaXQtYW5ub3RhdGlv bi1jb25maXJtXSBcCm9yIFxcW2Jvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi1jYW5jZWxdIHRvIGNh bmNlbC4KClxce2Jvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi1tb2RlLW1hcH0iKQoKKGRlZm1hY3Jv IGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi0tbWF5YmUtZGlzcGxheS1saXN0ICgmcmVzdCBib2R5 KQogICJEaXNwbGF5IGJvb2ttYXJrIGxpc3QgYWZ0ZXIgZWRpdGluZyBpZiBhcHByb3ByaWF0ZS4i CiAgYChsZXQgKChmcm9tLWJvb2ttYXJrLWxpc3QgYm9va21hcmstLWFubm90YXRpb24tZnJvbS1i b29rbWFyay1saXN0KQogICAgICAgICAob2xkLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKSkKICAg ICAsQGJvZHkKICAgICAocXVpdC13aW5kb3cpCiAgICAgKGJvb2ttYXJrLWJtZW51LXN1cnJlcHRp dGlvdXNseS1yZWJ1aWxkLWxpc3QpCiAgICAgKHdoZW4gZnJvbS1ib29rbWFyay1saXN0CiAgICAg ICAocG9wLXRvLWJ1ZmZlciAoZ2V0LWJ1ZmZlciBib29rbWFyay1ibWVudS1idWZmZXIpKQogICAg ICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgICAgIChib29rbWFyay1ibWVudS1ib29rbWFy aykpCiAgICAgKGtpbGwtYnVmZmVyIG9sZC1idWZmZXIpKSkKCihkZWZ1biBib29rbWFyay1lZGl0 LWFubm90YXRpb24tY2FuY2VsICgpCiAgIkNhbmNlbCB0aGUgY3VycmVudCBhbm5vdGF0aW9uIGVk aXQuIgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21hcmstZWRpdC1hbm5vdGF0aW9uLW1vZGUpCiAg KGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi0tbWF5YmUtZGlzcGxheS1saXN0CiAgIChtZXNzYWdl ICJDYW5jZWxlZCBieSB1c2VyIikpKQoKKGRlZnVuIGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi1j b25maXJtICgpCiAgIlVzZSBidWZmZXIgY29udGVudHMgYXMgYW5ub3RhdGlvbiBmb3IgYSBib29r bWFyay4KTGluZXMgYmVnaW5uaW5nIHdpdGggYCMnIGFyZSBpZ25vcmVkLiIKICAoaW50ZXJhY3Rp dmUgbmlsIGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbi1tb2RlKQogIChpZiAobm90IChkZXJpdmVk LW1vZGUtcCAnYm9va21hcmstZWRpdC1hbm5vdGF0aW9uLW1vZGUpKQogICAgICAoZXJyb3IgIk5v dCBpbiBib29rbWFyay1lZGl0LWFubm90YXRpb24tbW9kZSIpKQogIChnb3RvLWNoYXIgKHBvaW50 LW1pbikpCiAgKHdoaWxlICg8IChwb2ludCkgKHBvaW50LW1heCkpCiAgICAoaWYgKD0gKGZvbGxv d2luZy1jaGFyKSA/IykKICAgICAgICAoYm9va21hcmsta2lsbC1saW5lIHQpCiAgICAgIChmb3J3 YXJkLWxpbmUgMSkpKQogIDs7IFRha2Ugbm8gY2hhbmNlcyB3aXRoIHRleHQgcHJvcGVydGllcy4K ICAoYm9va21hcmstZWRpdC1hbm5vdGF0aW9uLS1tYXliZS1kaXNwbGF5LWxpc3QKICAgKGxldCAo KGFubm90YXRpb24gKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAocG9pbnQtbWluKSAo cG9pbnQtbWF4KSkpCiAgICAgICAgIChib29rbWFyay1uYW1lIGJvb2ttYXJrLWFubm90YXRpb24t bmFtZSkpCiAgICAgKGJvb2ttYXJrLXNldC1hbm5vdGF0aW9uIGJvb2ttYXJrLW5hbWUgYW5ub3Rh dGlvbikKICAgICAoYm9va21hcmstdXBkYXRlLWxhc3QtbW9kaWZpZWQgYm9va21hcmstbmFtZSkK ICAgICAoc2V0cSBib29rbWFyay1hbGlzdC1tb2RpZmljYXRpb24tY291bnQKICAgICAgICAgICAo MSsgYm9va21hcmstYWxpc3QtbW9kaWZpY2F0aW9uLWNvdW50KSkKICAgICAobWVzc2FnZSAiQW5u b3RhdGlvbiB1cGRhdGVkIGZvciBcIiVzXCIiIGJvb2ttYXJrLW5hbWUpKSkpCgoKKGRlZnVuIGJv b2ttYXJrLWVkaXQtYW5ub3RhdGlvbiAoYm9va21hcmstbmFtZS1vci1yZWNvcmQgJm9wdGlvbmFs IGZyb20tYm9va21hcmstbGlzdCkKICAiUG9wIHVwIGEgYnVmZmVyIGZvciBlZGl0aW5nIGJvb2tt YXJrIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JEJ3MgYW5ub3RhdGlvbi4KSWYgb3B0aW9uYWwgYXJn dW1lbnQgRlJPTS1CT09LTUFSSy1MSVNUIGlzIG5vbi1uaWwsIHJldHVybiB0byB0aGUKYm9va21h cmsgbGlzdCB3aGVuIGVkaXRpbmcgaXMgZG9uZS4iCiAgKHBvcC10by1idWZmZXIgKGdlbmVyYXRl LW5ldy1idWZmZXItbmFtZSAiKkJvb2ttYXJrIEFubm90YXRpb24gQ29tcG9zZSoiKSkKICAoYm9v a21hcmstZWRpdC1hbm5vdGF0aW9uLW1vZGUpCiAgKGJvb2ttYXJrLWluc2VydC1hbm5vdGF0aW9u IGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKQogIChzZXRxIGJvb2ttYXJrLS1hbm5vdGF0aW9uLWZy b20tYm9va21hcmstbGlzdCBmcm9tLWJvb2ttYXJrLWxpc3QpCiAgKHNldHEgYm9va21hcmstYW5u b3RhdGlvbi1uYW1lIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKSkKCgooZGVmdW4gYm9va21hcmst YnVmZmVyLW5hbWUgKCkKICAiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBp biBhIGZvcm0gdXNhYmxlIGFzIGEgYm9va21hcmsgbmFtZS4KSWYgdGhlIGJ1ZmZlciBpcyBhc3Nv Y2lhdGVkIHdpdGggYSBmaWxlIG9yIGRpcmVjdG9yeSwgdXNlIHRoYXQgbmFtZS4iCiAgKGNvbmQK ICAgOzsgT3IgYXJlIHdlIGEgZmlsZT8KICAgKGJ1ZmZlci1maWxlLW5hbWUgKGZpbGUtbmFtZS1u b25kaXJlY3RvcnkgYnVmZmVyLWZpbGUtbmFtZSkpCiAgIDs7IE9yIGFyZSB3ZSBhIGRpcmVjdG9y eT8KICAgKChhbmQgKGJvdW5kcCAnZGlyZWQtZGlyZWN0b3J5KSBkaXJlZC1kaXJlY3RvcnkpCiAg ICAobGV0KiAoKGRpcm5hbWUgKGlmIChzdHJpbmdwIGRpcmVkLWRpcmVjdG9yeSkKICAgICAgICAg ICAgICAgICAgICAgICAgZGlyZWQtZGlyZWN0b3J5CiAgICAgICAgICAgICAgICAgICAgICAoY2Fy IGRpcmVkLWRpcmVjdG9yeSkpKQogICAgICAgICAgIChpZHggKDEtIChsZW5ndGggZGlybmFtZSkp KSkKICAgICAgOzsgU3RyaXAgdGhlIHRyYWlsaW5nIHNsYXNoLgogICAgICAoaWYgKD0gPy8gKGFy ZWYgZGlybmFtZSBpZHgpKQogICAgICAgICAgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkgKHN1YnN0 cmluZyBkaXJuYW1lIDAgaWR4KSkKICAgICAgICA7OyBFbHNlIHJldHVybiB0aGUgY3VycmVudC1i dWZmZXIKICAgICAgICAoYnVmZmVyLW5hbWUgKGN1cnJlbnQtYnVmZmVyKSkpKSkKICAgOzsgSWYg YWxsIGVsc2UgZmFpbHMsIHVzZSB0aGUgYnVmZmVyJ3MgbmFtZS4KICAgKHQKICAgIChidWZmZXIt bmFtZSAoY3VycmVudC1idWZmZXIpKSkpKQoKCihkZWZ1biBib29rbWFyay15YW5rLXdvcmQgKCkK ICAiR2V0IHRoZSBuZXh0IHdvcmQgZnJvbSBidWZmZXIgYGJvb2ttYXJrLWN1cnJlbnQtYnVmZmVy JyBhbmQgYXBwZW5kCml0IHRvIHRoZSBuYW1lIG9mIHRoZSBib29rbWFyayBjdXJyZW50bHkgYmVp bmcgc2V0LCBhZHZhbmNpbmcKYGJvb2ttYXJrLXlhbmstcG9pbnQnIGJ5IG9uZSB3b3JkLiIKICAo aW50ZXJhY3RpdmUpCiAgKGxldCAoKHN0cmluZyAod2l0aC1jdXJyZW50LWJ1ZmZlciBib29rbWFy ay1jdXJyZW50LWJ1ZmZlcgogICAgICAgICAgICAgICAgICAoZ290by1jaGFyIGJvb2ttYXJrLXlh bmstcG9pbnQpCiAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRp ZXMKICAgICAgICAgICAgICAgICAgIChwb2ludCkKICAgICAgICAgICAgICAgICAgIChwcm9nbgog ICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC13b3JkIDEpCiAgICAgICAgICAgICAgICAgICAg IChzZXRxIGJvb2ttYXJrLXlhbmstcG9pbnQgKHBvaW50KSkpKSkpKQogICAgKGluc2VydCBzdHJp bmcpKSkKCihkZWZ1biBib29rbWFyay1idWZmZXItZmlsZS1uYW1lICgpCiAgIlJldHVybiB0aGUg Y3VycmVudCBidWZmZXIncyBmaWxlIGluIGEgd2F5IHVzZWZ1bCBmb3IgYm9va21hcmtzLiIKICA7 OyBBYmJyZXZpYXRlIHRoZSBwYXRoLCBib3RoIHNvIGl0J3Mgc2hvcnRlciBhbmQgc28gaXQncyBt b3JlCiAgOzsgcG9ydGFibGUuICBFLmcuLCB0aGUgdXNlcidzIGhvbWUgZGlyIG1pZ2h0IGJlIGEg ZGlmZmVyZW50CiAgOzsgcGF0aCBvbiBkaWZmZXJlbnQgbWFjaGluZXMsIGJ1dCAifi8iIHdpbGwg c3RpbGwgcmVhY2ggaXQuCiAgKGFiYnJldmlhdGUtZmlsZS1uYW1lCiAgIChjb25kCiAgICAoYnVm ZmVyLWZpbGUtbmFtZSBidWZmZXItZmlsZS1uYW1lKQogICAgKChhbmQgKGJvdW5kcCAnZGlyZWQt ZGlyZWN0b3J5KSBkaXJlZC1kaXJlY3RvcnkpCiAgICAgKGlmIChzdHJpbmdwIGRpcmVkLWRpcmVj dG9yeSkKICAgICAgICAgZGlyZWQtZGlyZWN0b3J5CiAgICAgICAoY2FyIGRpcmVkLWRpcmVjdG9y eSkpKQogICAgKHQgKGVycm9yICJCdWZmZXIgbm90IHZpc2l0aW5nIGEgZmlsZSBvciBkaXJlY3Rv cnkiKSkpKSkKCihkZWZ2YXIgYm9va21hcmstLXdhdGNoLWFscmVhZHktYXNrZWQtbXRpbWUgbmls CiAgIk10aW1lIGZvciB3aGljaCB3ZSBhbHJlYWR5IHF1ZXJpZWQgYWJvdXQgcmVsb2FkaW5nLiIp CgooZGVmdW4gYm9va21hcmstLXdhdGNoLWZpbGUtYWxyZWFkeS1xdWVyaWVkLXAgKG5ldy1tdGlt ZSkKICA7OyBEb24ndCBhc2sgcmVwZWF0ZWRseSBpZiB1c2VyIGFscmVhZHkgc2FpZCAibm8iIHRv IHJlbG9hZGluZyBhCiAgOzsgZmlsZSB3aXRoIHRoaXMgbXRpbWU6CiAgKHByb2cxICh0aW1lLWVx dWFsLXAgbmV3LW10aW1lIGJvb2ttYXJrLS13YXRjaC1hbHJlYWR5LWFza2VkLW10aW1lKQogICAg KHNldHEgYm9va21hcmstLXdhdGNoLWFscmVhZHktYXNrZWQtbXRpbWUgbmV3LW10aW1lKSkpCgoo ZGVmdW4gYm9va21hcmstbWF5YmUtbG9hZC1kZWZhdWx0LWZpbGUgKCkKICAiSWYgYm9va21hcmtz IGhhdmUgbm90IGJlZW4gbG9hZGVkIGZyb20gdGhlIGRlZmF1bHQgcGxhY2UsIGxvYWQgdGhlbS4i CiAgKGNvbmQgKChhbmQgKG5vdCBib29rbWFyay1ib29rbWFya3MtdGltZXN0YW1wKQogICAgICAg ICAgICAgIChudWxsIGJvb2ttYXJrLWFsaXN0KQogICAgICAgICAgICAgIChmaWxlLXJlYWRhYmxl LXAgYm9va21hcmstZGVmYXVsdC1maWxlKQogICAgICAgICAgICAgIChib29rbWFyay1sb2FkIGJv b2ttYXJrLWRlZmF1bHQtZmlsZSB0IHQpKSkKICAgICAgICAoKGFuZCBib29rbWFyay13YXRjaC1i b29rbWFyay1maWxlCiAgICAgICAgICAgICAgKGxldCAoKG5ldy1tdGltZSAobnRoIDUgKGZpbGUt YXR0cmlidXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FyIGJv b2ttYXJrLWJvb2ttYXJrcy10aW1lc3RhbXApKSkpCiAgICAgICAgICAgICAgICAgICAgKG9sZC1t dGltZSAoY2RyIGJvb2ttYXJrLWJvb2ttYXJrcy10aW1lc3RhbXApKSkKCQkoYW5kIChub3QgKHRp bWUtZXF1YWwtcCBuZXctbXRpbWUgb2xkLW10aW1lKSkKICAgICAgICAgICAgICAgICAgICAgKG5v dCAoYm9va21hcmstLXdhdGNoLWZpbGUtYWxyZWFkeS1xdWVyaWVkLXAgbmV3LW10aW1lKSkKICAg ICAgICAgICAgICAgICAgICAgKG9yIChlcSAnc2lsZW50IGJvb2ttYXJrLXdhdGNoLWJvb2ttYXJr LWZpbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAoeWVzLW9yLW5vLXAKICAgICAgICAgICAg ICAgICAgICAgICAgICAoZm9ybWF0ICJCb29rbWFya3MgJXMgY2hhbmdlZCBvbiBkaXNrLiAgUmVs b2FkPyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FyIGJvb2ttYXJrLWJv b2ttYXJrcy10aW1lc3RhbXApKSkpKSkpCiAgICAgICAgIChib29rbWFyay1sb2FkIChjYXIgYm9v a21hcmstYm9va21hcmtzLXRpbWVzdGFtcCkgdCB0KSkpKQoKCgooZGVmdmFyIGJvb2ttYXJrLWFm dGVyLWp1bXAtaG9vayBuaWwKICAiSG9vayBydW4gYWZ0ZXIgYGJvb2ttYXJrLWp1bXAnIGp1bXBz IHRvIGEgYm9va21hcmsuClVzZWZ1bCBmb3IgZXhhbXBsZSB0byB1bmhpZGUgdGV4dCBpbiBgb3V0 bGluZS1tb2RlJy4iKQoKKGRlZnVuIGJvb2ttYXJrLS1qdW1wLXZpYSAoYm9va21hcmstbmFtZS1v ci1yZWNvcmQgZGlzcGxheS1mdW5jdGlvbikKICAiSGFuZGxlIEJPT0tNQVJLLU5BTUUtT1ItUkVD T1JELCB0aGVuIGNhbGwgRElTUExBWS1GVU5DVElPTi4KRElTUExBWS1GVU5DVElPTiBpcyBjYWxs ZWQgd2l0aCB0aGUgY3VycmVudCBidWZmZXIgYXMgYXJndW1lbnQuCgpBZnRlciBjYWxsaW5nIERJ U1BMQVktRlVOQ1RJT04sIHNldCB3aW5kb3cgcG9pbnQgdG8gdGhlIHBvaW50IHNwZWNpZmllZApi eSBCT09LTUFSSy1OQU1FLU9SLVJFQ09SRCwgaWYgbmVjZXNzYXJ5LCBydW4gYGJvb2ttYXJrLWFm dGVyLWp1bXAtaG9vaycsCmFuZCB0aGVuIHNob3cgYW55IGFubm90YXRpb25zIGZvciB0aGlzIGJv b2ttYXJrLiIKICAoYm9va21hcmstaGFuZGxlLWJvb2ttYXJrIGJvb2ttYXJrLW5hbWUtb3ItcmVj b3JkKQogIChzYXZlLWN1cnJlbnQtYnVmZmVyCiAgICAoZnVuY2FsbCBkaXNwbGF5LWZ1bmN0aW9u IChjdXJyZW50LWJ1ZmZlcikpKQogIChsZXQgKCh3aW4gKGdldC1idWZmZXItd2luZG93IChjdXJy ZW50LWJ1ZmZlcikgMCkpKQogICAgKGlmIHdpbiAoc2V0LXdpbmRvdy1wb2ludCB3aW4gKHBvaW50 KSkpKQogIDs7IEZJWE1FOiB3ZSB1c2VkIHRvIG9ubHkgcnVuIGJvb2ttYXJrLWFmdGVyLWp1bXAt aG9vayBpbgogIDs7IGBib29rbWFyay1qdW1wJyBpdHNlbGYsIGJ1dCBpbiBub25lIG9mIHRoZSBv dGhlciBjb21tYW5kcy4KICAod2hlbiBib29rbWFyay1zZXQtZnJpbmdlLW1hcmsKICAgIChsZXQg KChvdmVybGF5cyAob3ZlcmxheXMtaW4gKHBvaW50LWF0LWJvbCkgKDErIChwb2ludC1hdC1ib2wp KSkpCiAgICAgICAgICB0ZW1wIGZvdW5kKQogICAgICAod2hpbGUgKGFuZCAobm90IGZvdW5kKSAo c2V0cSB0ZW1wIChwb3Agb3ZlcmxheXMpKSkKICAgICAgICAod2hlbiAoZXEgJ2Jvb2ttYXJrIChv dmVybGF5LWdldCB0ZW1wICdjYXRlZ29yeSkpCiAgICAgICAgICAoc2V0cSBmb3VuZCB0KSkpCiAg ICAgICh1bmxlc3MgZm91bmQKICAgICAgICAoYm9va21hcmstLXNldC1mcmluZ2UtbWFyaykpKSkK ICAocnVuLWhvb2tzICdib29rbWFyay1hZnRlci1qdW1wLWhvb2spCiAgKGlmIGJvb2ttYXJrLWF1 dG9tYXRpY2FsbHktc2hvdy1hbm5vdGF0aW9ucwogICAgICA7OyBpZiB0aGVyZSBpcyBhbiBhbm5v dGF0aW9uIGZvciB0aGlzIGJvb2ttYXJrLAogICAgICA7OyBzaG93IGl0IGluIGEgYnVmZmVyLgog ICAgICAoYm9va21hcmstc2hvdy1hbm5vdGF0aW9uIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKSkp CgoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGJvb2ttYXJrLWp1bXAgKGJvb2ttYXJrICZvcHRpb25h bCBkaXNwbGF5LWZ1bmMpCiAgIkp1bXAgdG8gYm9va21hcmsgQk9PS01BUksgKGEgcG9pbnQgaW4g c29tZSBmaWxlKS4KWW91IG1heSBoYXZlIGEgcHJvYmxlbSB1c2luZyB0aGlzIGZ1bmN0aW9uIGlm IHRoZSB2YWx1ZSBvZiB2YXJpYWJsZQpgYm9va21hcmstYWxpc3QnIGlzIG5pbC4gIElmIHRoYXQg aGFwcGVucywgeW91IG5lZWQgdG8gbG9hZCBpbiBzb21lCmJvb2ttYXJrcy4gIFNlZSBoZWxwIG9u IGZ1bmN0aW9uIGBib29rbWFyay1sb2FkJyBmb3IgbW9yZSBhYm91dAp0aGlzLgoKSWYgdGhlIGZp bGUgcG9pbnRlZCB0byBieSBCT09LTUFSSyBubyBsb25nZXIgZXhpc3RzLCB5b3Ugd2lsbCBiZSBh c2tlZAppZiB5b3Ugd2lzaCB0byBnaXZlIHRoZSBib29rbWFyayBhIG5ldyBsb2NhdGlvbiwgYW5k IGBib29rbWFyay1qdW1wJwp3aWxsIHRoZW4ganVtcCB0byB0aGUgbmV3IGxvY2F0aW9uLCBhcyB3 ZWxsIGFzIHJlY29yZGluZyBpdCBpbiBwbGFjZQpvZiB0aGUgb2xkIG9uZSBpbiB0aGUgcGVybWFu ZW50IGJvb2ttYXJrIHJlY29yZC4KCkJPT0tNQVJLIGlzIHVzdWFsbHkgYSBib29rbWFyayBuYW1l IChhIHN0cmluZykuICBJdCBjYW4gYWxzbyBiZSBhCmJvb2ttYXJrIHJlY29yZCwgYnV0IHRoaXMg aXMgdXN1YWxseSBvbmx5IGRvbmUgYnkgcHJvZ3JhbW1hdGljIGNhbGxlcnMuCgpJZiBESVNQTEFZ LUZVTkMgaXMgbm9uLW5pbCwgaXQgaXMgYSBmdW5jdGlvbiB0byBpbnZva2UgdG8gZGlzcGxheSB0 aGUKYm9va21hcmsuICBJdCBkZWZhdWx0cyB0byBgcG9wLXRvLWJ1ZmZlci1zYW1lLXdpbmRvdycu ICBBIHR5cGljYWwgdmFsdWUgZm9yCkRJU1BMQVktRlVOQyB3b3VsZCBiZSBgc3dpdGNoLXRvLWJ1 ZmZlci1vdGhlci13aW5kb3cnLiIKICAoaW50ZXJhY3RpdmUKICAgKGxpc3QgKGJvb2ttYXJrLWNv bXBsZXRpbmctcmVhZCAiSnVtcCB0byBib29rbWFyayIKCQkJCSAgIGJvb2ttYXJrLWN1cnJlbnQt Ym9va21hcmspKSkKICAodW5sZXNzIGJvb2ttYXJrCiAgICAoZXJyb3IgIk5vIGJvb2ttYXJrIHNw ZWNpZmllZCIpKQogIChib29rbWFyay1tYXliZS1oaXN0b3JpY2l6ZS1zdHJpbmcgYm9va21hcmsp CiAgOzsgRG9uJ3QgdXNlIGBzd2l0Y2gtdG8tYnVmZmVyJyBiZWNhdXNlIGl0IHdvdWxkIGxldCB0 aGUKICA7OyB3aW5kb3ctcG9pbnQgb3ZlcnJpZGUgdGhlIGJvb2ttYXJrJ3MgcG9pbnQgd2hlbgog IDs7IGBzd2l0Y2gtdG8tYnVmZmVyLXByZXNlcnZlLXdpbmRvdy1wb2ludCcgaXMgbm9uLW5pbC4K ICAoYm9va21hcmstLWp1bXAtdmlhIGJvb2ttYXJrIChvciBkaXNwbGF5LWZ1bmMgJ3BvcC10by1i dWZmZXItc2FtZS13aW5kb3cpKSkKCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gYm9va21hcmstanVt cC1vdGhlci13aW5kb3cgKGJvb2ttYXJrKQogICJKdW1wIHRvIEJPT0tNQVJLIGluIGFub3RoZXIg d2luZG93LiAgU2VlIGBib29rbWFyay1qdW1wJyBmb3IgbW9yZS4iCiAgKGludGVyYWN0aXZlCiAg IChsaXN0IChib29rbWFyay1jb21wbGV0aW5nLXJlYWQgIkp1bXAgdG8gYm9va21hcmsgKGluIGFu b3RoZXIgd2luZG93KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rbWFy ay1jdXJyZW50LWJvb2ttYXJrKSkpCiAgKGJvb2ttYXJrLWp1bXAgYm9va21hcmsgJ3N3aXRjaC10 by1idWZmZXItb3RoZXItd2luZG93KSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBib29rbWFyay1q dW1wLW90aGVyLWZyYW1lIChib29rbWFyaykKICAiSnVtcCB0byBCT09LTUFSSyBpbiBhbm90aGVy IGZyYW1lLiAgU2VlIGBib29rbWFyay1qdW1wJyBmb3IgbW9yZS4iCiAgKGludGVyYWN0aXZlCiAg IChsaXN0IChib29rbWFyay1jb21wbGV0aW5nLXJlYWQgIkp1bXAgdG8gYm9va21hcmsgKGluIGFu b3RoZXIgZnJhbWUpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2ttYXJr LWN1cnJlbnQtYm9va21hcmspKSkKICAobGV0ICgocG9wLXVwLWZyYW1lcyB0KSkKICAgIChib29r bWFyay1qdW1wLW90aGVyLXdpbmRvdyBib29rbWFyaykpKQoKKGRlZnVuIGJvb2ttYXJrLWhhbmRs ZS1ib29rbWFyayAoYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgIkNhbGwgQk9PS01BUkstTkFN RS1PUi1SRUNPUkQncyBoYW5kbGVyIG9yIGBib29rbWFyay1kZWZhdWx0LWhhbmRsZXInCmlmIGl0 IGhhcyBub25lLiAgVGhpcyBjaGFuZ2VzIGN1cnJlbnQgYnVmZmVyIGFuZCBwb2ludCBhbmQgcmV0 dXJucyBuaWwsCm9yIHNpZ25hbHMgYSBgZmlsZS1lcnJvcicuCgpJZiBCT09LTUFSSy1OQU1FLU9S LVJFQ09SRCBoYXMgbm8gZmlsZSwgdGhpcyBpcyBhIG5vLW9wLiAgSWYKQk9PS01BUkstTkFNRS1P Ui1SRUNPUkQgaGFzIGEgZmlsZSwgYnV0IHRoYXQgZmlsZSBubyBsb25nZXIgZXhpc3RzLAp0aGVu IG9mZmVyIGludGVyYWN0aXZlbHkgdG8gcmVsb2NhdGUgQk9PS01BUkstTkFNRS1PUi1SRUNPUkQu IgogIChjb25kaXRpb24tY2FzZSBlcnIKICAgICAgKGZ1bmNhbGwgKG9yIChib29rbWFyay1nZXQt aGFuZGxlciBib29rbWFyay1uYW1lLW9yLXJlY29yZCkKICAgICAgICAgICAgICAgICAgICdib29r bWFyay1kZWZhdWx0LWhhbmRsZXIpCiAgICAgICAgICAgICAgIChib29rbWFyay1nZXQtYm9va21h cmsgYm9va21hcmstbmFtZS1vci1yZWNvcmQpKQogICAgKGJvb2ttYXJrLWVycm9yLW5vLWZpbGVu YW1lICAgICAgICAgO2ZpbGUtZXJyb3IKICAgICA7OyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIHRo ZSBtYXJrZWQgZmlsZSwgc28gYXNrIGlmIHVzZXIgd2FudHMgdG8KICAgICA7OyByZWxvY2F0ZSB0 aGUgYm9va21hcmssIGVsc2UgcmVtaW5kIHRoZW0gdG8gY29uc2lkZXIgZGVsZXRpb24uCiAgICAg KHdoZW4gKHN0cmluZ3AgYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgICAgICA7OyBgYm9va21h cmstbmFtZS1vci1yZWNvcmQnIGNhbiBiZSBlaXRoZXIgYSBib29rbWFyayBuYW1lCiAgICAgICA7 OyAoZnJvbSBgYm9va21hcmstYWxpc3QnKSAgb3IgYSBib29rbWFyayBvYmplY3QuICBJZiBpdCdz IGFuCiAgICAgICA7OyBvYmplY3QsIHdlIGFzc3VtZSBpdCdzIGEgYm9va21hcmsgdXNlZCBpbnRl cm5hbGx5IGJ5IHNvbWUKICAgICAgIDs7IG90aGVyIHBhY2thZ2UuCiAgICAgICAobGV0ICgoZmls ZSAoYm9va21hcmstZ2V0LWZpbGVuYW1lIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKSkpCiAgICAg ICAgICh3aGVuIGZpbGUgICAgICAgIDtEb24ndCBrbm93IGhvdyB0byByZWxvY2F0ZSBpZiB0aGVy ZSdzIG5vIGBmaWxlJy4KICAgICAgICAgICA7OyBJZiBmaWxlIGlzIG5vdCBhIGRpciwgZGlyZWN0 b3J5LWZpbGUtbmFtZSBqdXN0IHJldHVybnMgZmlsZS4KICAgICAgICAgICAobGV0ICgoZGlzcGxh eS1uYW1lIChkaXJlY3RvcnktZmlsZS1uYW1lIGZpbGUpKSkKICAgICAgICAgICAgIChkaW5nKQog ICAgICAgICAgICAgOzsgRGlhbG9nIGJveGVzIGNhbiBhY2NlcHQgYSBmaWxlIHRhcmdldCwgYnV0 IHVzdWFsbHkgZG9uJ3QKICAgICAgICAgICAgIDs7IGtub3cgaG93IHRvIGFjY2VwdCBhIGRpcmVj dG9yeSB0YXJnZXQgKGF0IGxlYXN0LCB0aGlzCiAgICAgICAgICAgICA7OyBpcyB0cnVlIGluIEdu b21lIG9uIEdOVS9MaW51eCwgYW5kIEJ1ZyM0MjMwIHNheXMgaXQncwogICAgICAgICAgICAgOzsg dHJ1ZSBvbiBXaW5kb3dzIGFzIHdlbGwpLiAgU28gd2Ugc3VwcHJlc3MgZmlsZSBkaWFsb2dzCiAg ICAgICAgICAgICA7OyB3aGVuIHJlbG9jYXRpbmcuCiAgICAgICAgICAgICAobGV0ICgodXNlLWRp YWxvZy1ib3ggbmlsKQogICAgICAgICAgICAgICAgICAgKHVzZS1maWxlLWRpYWxvZyBuaWwpKQog ICAgICAgICAgICAgICAoaWYgKHktb3Itbi1wIChjb25jYXQgZGlzcGxheS1uYW1lICIgbm9uZXhp c3RlbnQuICBSZWxvY2F0ZSBcIiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkICJcIj8gIikpCiAgICAgICAgICAgICAgICAgICAocHJv Z24KICAgICAgICAgICAgICAgICAgICAgKGJvb2ttYXJrLXJlbG9jYXRlIGJvb2ttYXJrLW5hbWUt b3ItcmVjb3JkKQogICAgICAgICAgICAgICAgICAgICA7OyBUcnkgYWdhaW4uCiAgICAgICAgICAg ICAgICAgICAgIChmdW5jYWxsIChvciAoYm9va21hcmstZ2V0LWhhbmRsZXIgYm9va21hcmstbmFt ZS1vci1yZWNvcmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9va21hcmst ZGVmYXVsdC1oYW5kbGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYm9va21hcmst Z2V0LWJvb2ttYXJrIGJvb2ttYXJrLW5hbWUtb3ItcmVjb3JkKSkpCiAgICAgICAgICAgICAgICAg KG1lc3NhZ2UKICAgICAgICAgICAgICAgICAgIkJvb2ttYXJrIG5vdCByZWxvY2F0ZWQ7IGNvbnNp ZGVyIHJlbW92aW5nIGl0ICglcykuIgogICAgICAgICAgICAgICAgICBib29rbWFyay1uYW1lLW9y LXJlY29yZCkKICAgICAgICAgICAgICAgICAoc2lnbmFsIChjYXIgZXJyKSAoY2RyIGVycikpKSkp KSkpKSkKICA7OyBBZGRlZCBieSBkYi4KICAod2hlbiAoc3RyaW5ncCBib29rbWFyay1uYW1lLW9y LXJlY29yZCkKICAgIChzZXRxIGJvb2ttYXJrLWN1cnJlbnQtYm9va21hcmsgYm9va21hcmstbmFt ZS1vci1yZWNvcmQpKQogIG5pbCkKCihkZWZpbmUtZXJyb3IgJ2Jvb2ttYXJrLWVycm9ycwogICJC b29rbWFyayBlcnJvciIpCihkZWZpbmUtZXJyb3IgJ2Jvb2ttYXJrLWVycm9yLW5vLWZpbGVuYW1l CiAgIkJvb2ttYXJrIGhhcyBubyBhc3NvY2lhdGVkIGZpbGUgKG9yIGRpcmVjdG9yeSkiICdib29r bWFyay1lcnJvcnMpCgooZGVmdW4gYm9va21hcmstZGVmYXVsdC1oYW5kbGVyIChibWstcmVjb3Jk KQogICJEZWZhdWx0IGhhbmRsZXIgdG8ganVtcCB0byBhIHBhcnRpY3VsYXIgYm9va21hcmsgbG9j YXRpb24uCkJNSy1SRUNPUkQgaXMgYSBib29rbWFyayByZWNvcmQsIG5vdCBhIGJvb2ttYXJrIG5h bWUgKGkuZS4sIG5vdCBhIHN0cmluZykuCkNoYW5nZXMgY3VycmVudCBidWZmZXIgYW5kIHBvaW50 IGFuZCByZXR1cm5zIG5pbCwgb3Igc2lnbmFscyBhIGBmaWxlLWVycm9yJy4KCklmIEJNSy1SRUNP UkQgaGFzIGEgcHJvcGVydHkgY2FsbGVkIGBidWZmZXInLCBpdCBzaG91bGQgYmUgYSBsaXZlCmJ1 ZmZlciBvYmplY3QsIGFuZCB0aGlzIGJ1ZmZlciB3aWxsIGJlIHNlbGVjdGVkLiIKICAobGV0ICgo ZmlsZSAgICAgICAgICAoYm9va21hcmstZ2V0LWZpbGVuYW1lIGJtay1yZWNvcmQpKQoJKGJ1ZiAg ICAgICAgICAgKGJvb2ttYXJrLXByb3AtZ2V0IGJtay1yZWNvcmQgJ2J1ZmZlcikpCiAgICAgICAg KGZvcndhcmQtc3RyICAgKGJvb2ttYXJrLWdldC1mcm9udC1jb250ZXh0LXN0cmluZyBibWstcmVj b3JkKSkKICAgICAgICAoYmVoaW5kLXN0ciAgICAoYm9va21hcmstZ2V0LXJlYXItY29udGV4dC1z dHJpbmcgYm1rLXJlY29yZCkpCiAgICAgICAgKHBsYWNlICAgICAgICAgKGJvb2ttYXJrLWdldC1w b3NpdGlvbiBibWstcmVjb3JkKSkpCiAgICAoc2V0LWJ1ZmZlcgogICAgIChjb25kCiAgICAgICgo YW5kIGZpbGUgKGZpbGUtcmVhZGFibGUtcCBmaWxlKSAobm90IChidWZmZXItbGl2ZS1wIGJ1Zikp KQogICAgICAgKGZpbmQtZmlsZS1ub3NlbGVjdCBmaWxlKSkKICAgICAgOzsgTm8gZmlsZSBmb3Vu ZC4gIFNlZSBpZiBidWZmZXIgQlVGIGhhcyBiZWVuIGNyZWF0ZWQuCiAgICAgICgoYW5kIGJ1ZiAo Z2V0LWJ1ZmZlciBidWYpKSkKICAgICAgKHQgOzsgSWYgbm90LCByYWlzZSBlcnJvci4KICAgICAg IChzaWduYWwgJ2Jvb2ttYXJrLWVycm9yLW5vLWZpbGVuYW1lIChsaXN0ICdzdHJpbmdwIGZpbGUp KSkpKQogICAgKGlmIHBsYWNlIChnb3RvLWNoYXIgcGxhY2UpKQogICAgOzsgR28gc2VhcmNoaW5n IGZvcndhcmQgZmlyc3QuICBUaGVuLCBpZiBmb3J3YXJkLXN0ciBleGlzdHMgYW5kCiAgICA7OyB3 YXMgZm91bmQgaW4gdGhlIGZpbGUsIHdlIGNhbiBzZWFyY2ggYmFja3dhcmQgZm9yIGJlaGluZC1z dHIuCiAgICA7OyBSYXRpb25hbGUgaXMgdGhhdCBpZiB0ZXh0IHdhcyBpbnNlcnRlZCBiZXR3ZWVu IHRoZSB0d28gaW4gdGhlCiAgICA7OyBmaWxlLCBpdCdzIGJldHRlciB0byBiZSBwdXQgYmVmb3Jl IGl0IHNvIHlvdSBjYW4gcmVhZCBpdCwKICAgIDs7IHJhdGhlciB0aGFuIGFmdGVyIGFuZCByZW1h aW4gcGVyaGFwcyB1bmF3YXJlIG9mIHRoZSBjaGFuZ2VzLgogICAgKHdoZW4gKGFuZCBmb3J3YXJk LXN0ciAoc2VhcmNoLWZvcndhcmQgZm9yd2FyZC1zdHIgKHBvaW50LW1heCkgdCkpCiAgICAgIChn b3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAwKSkpCiAgICAod2hlbiAoYW5kIGJlaGluZC1zdHIg KHNlYXJjaC1iYWNrd2FyZCBiZWhpbmQtc3RyIChwb2ludC1taW4pIHQpKQogICAgICAoZ290by1j aGFyIChtYXRjaC1lbmQgMCkpKQogICAgbmlsKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBib29r bWFyay1yZWxvY2F0ZSAoYm9va21hcmstbmFtZSkKICAiUmVsb2NhdGUgQk9PS01BUkstTkFNRSB0 byBhbm90aGVyIGZpbGUsIHJlYWRpbmcgZmlsZSBuYW1lIHdpdGggbWluaWJ1ZmZlci4KClRoaXMg bWFrZXMgYW4gYWxyZWFkeSBleGlzdGluZyBib29rbWFyayBwb2ludCB0byB0aGF0IGZpbGUsIGlu c3RlYWQgb2YKdGhlIG9uZSBpdCB1c2VkIHRvIHBvaW50IGF0LiAgVXNlZnVsIHdoZW4gYSBmaWxl IGhhcyBiZWVuIHJlbmFtZWQKYWZ0ZXIgYSBib29rbWFyayB3YXMgc2V0IGluIGl0LiIKICAoaW50 ZXJhY3RpdmUgKGxpc3QgKGJvb2ttYXJrLWNvbXBsZXRpbmctcmVhZCAiQm9va21hcmsgdG8gcmVs b2NhdGUiKSkpCiAgKGJvb2ttYXJrLW1heWJlLWhpc3RvcmljaXplLXN0cmluZyBib29rbWFyay1u YW1lKQogIChib29rbWFyay1tYXliZS1sb2FkLWRlZmF1bHQtZmlsZSkKICAobGV0KiAoKGJtcmst ZmlsZW5hbWUgKGJvb2ttYXJrLWdldC1maWxlbmFtZSBib29rbWFyay1uYW1lKSkKICAgICAgICAg KG5ld2xvYyAoYWJicmV2aWF0ZS1maWxlLW5hbWUKICAgICAgICAgICAgICAgICAgKGV4cGFuZC1m aWxlLW5hbWUKICAgICAgICAgICAgICAgICAgIChyZWFkLWZpbGUtbmFtZQogICAgICAgICAgICAg ICAgICAgIChmb3JtYXQgIlJlbG9jYXRlICVzIHRvOiAiIGJvb2ttYXJrLW5hbWUpCiAgICAgICAg ICAgICAgICAgICAgKGZpbGUtbmFtZS1kaXJlY3RvcnkgYm1yay1maWxlbmFtZSkpKSkpKQogICAg KGJvb2ttYXJrLXNldC1maWxlbmFtZSBib29rbWFyay1uYW1lIG5ld2xvYykKICAgIChib29rbWFy ay11cGRhdGUtbGFzdC1tb2RpZmllZCBib29rbWFyay1uYW1lKQogICAgKHNldHEgYm9va21hcmst YWxpc3QtbW9kaWZpY2F0aW9uLWNvdW50CiAgICAgICAgICAoMSsgYm9va21hcmstYWxpc3QtbW9k aWZpY2F0aW9uLWNvdW50KSkKICAgIChpZiAoYm9va21hcmstdGltZS10by1zYXZlLXApCiAgICAg ICAgKGJvb2ttYXJrLXNhdmUpKQogICAgKGJvb2ttYXJrLWJtZW51LXN1cnJlcHRpdGlvdXNseS1y ZWJ1aWxkLWxpc3QpKSkKCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gYm9va21hcmstaW5zZXJ0LWxv Y2F0aW9uIChib29rbWFyay1uYW1lICZvcHRpb25hbCBuby1oaXN0b3J5KQogICJJbnNlcnQgdGhl IG5hbWUgb2YgdGhlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIEJPT0tNQVJLLU5BTUUuCgpPcHRpb25h bCBzZWNvbmQgYXJnIE5PLUhJU1RPUlkgbWVhbnMgZG9uJ3QgcmVjb3JkIHRoaXMgaW4gdGhlCm1p bmlidWZmZXIgaGlzdG9yeSBsaXN0IGBib29rbWFyay1oaXN0b3J5Jy4iCiAgKGludGVyYWN0aXZl IChsaXN0IChib29rbWFyay1jb21wbGV0aW5nLXJlYWQgIkluc2VydCBib29rbWFyayBsb2NhdGlv biIpKSkKICAob3Igbm8taGlzdG9yeSAoYm9va21hcmstbWF5YmUtaGlzdG9yaWNpemUtc3RyaW5n IGJvb2ttYXJrLW5hbWUpKQogIChpbnNlcnQgKGJvb2ttYXJrLWxvY2F0aW9uIGJvb2ttYXJrLW5h bWUpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZhbGlhcyAnYm9va21hcmstbG9jYXRlICdib29rbWFy ay1pbnNlcnQtbG9jYXRpb24pCgooZGVmdW4gYm9va21hcmstbG9jYXRpb24gKGJvb2ttYXJrLW5h bWUtb3ItcmVjb3JkKQogICJSZXR1cm4gYSBkZXNjcmlwdGlvbiBvZiB0aGUgbG9jYXRpb24gb2Yg Qk9PS01BUkstTkFNRS1PUi1SRUNPUkQuIgogIChib29rbWFyay1tYXliZS1sb2FkLWRlZmF1bHQt ZmlsZSkKICA7OyBXZSBjb3VsZCBjYWxsIHRoZSBgaGFuZGxlcicgYW5kIGFzayBmb3IgaXQgdG8g Y29uc3RydWN0IGEgZGVzY3JpcHRpb24KICA7OyBkeW5hbWljYWxseTogaXQgd291bGQgb3BlbiB1 cCBzZXZlcmFsIG5ldyBwb3NzaWJpbGl0aWVzLCBidXQgaXQKICA7OyB3b3VsZCBoYXZlIHRoZSBt YWpvciBkaXNhZHZhbnRhZ2Ugb2YgZm9yY2luZyB0byBsb2FkIGVhY2ggYW5kCiAgOzsgZXZlcnkg aGFuZGxlciB3aGVuIHRoZSB1c2VyIGNhbGxzIGJvb2ttYXJrLW1lbnUuCiAgKG9yIChib29rbWFy ay1wcm9wLWdldCBib29rbWFyay1uYW1lLW9yLXJlY29yZCAnbG9jYXRpb24pCiAgICAgIChib29r bWFyay1nZXQtZmlsZW5hbWUgYm9va21hcmstbmFtZS1vci1yZWNvcmQpCiAgICAgICItLSBVbmtu b3duIGxvY2F0aW9uIC0tIikpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gYm9va21hcmstcmVuYW1l IChvbGQtbmFtZSAmb3B0aW9uYWwgbmV3LW5hbWUpCiAgIkNoYW5nZSB0aGUgbmFtZSBvZiBPTEQt TkFNRSBib29rbWFyayB0byBORVctTkFNRSBuYW1lLgpJZiBjYWxsZWQgZnJvbSBrZXlib2FyZCwg cHJvbXB0IGZvciBPTEQtTkFNRSBhbmQgTkVXLU5BTUUuCklmIGNhbGxlZCBmcm9tIG1lbnViYXIs IHNlbGVjdCBPTEQtTkFNRSBmcm9tIGEgbWVudSBhbmQgcHJvbXB0IGZvciBORVctTkFNRS4KCklm IGNhbGxlZCBmcm9tIExpc3AsIHByb21wdCBmb3IgTkVXLU5BTUUgaWYgb25seSBPTEQtTkFNRSB3 YXMgcGFzc2VkCmFzIGFuIGFyZ3VtZW50LiAgSWYgY2FsbGVkIHdpdGggdHdvIHN0cmluZ3MsIHRo ZW4gbm8gcHJvbXB0aW5nIGlzIGRvbmUuCllvdSBtdXN0IHBhc3MgYXQgbGVhc3QgT0xELU5BTUUg d2hlbiBjYWxsaW5nIGZyb20gTGlzcC4KCldoaWxlIHlvdSBhcmUgZW50ZXJpbmcgdGhlIG5ldyBu YW1lLCBjb25zZWN1dGl2ZSBcClxcPGJvb2ttYXJrLW1pbmlidWZmZXItcmVhZC1uYW1lLW1hcD5c XFtib29rbWFyay15YW5rLXdvcmRdJ3MgaW5zZXJ0CmNvbnNlY3V0aXZlIHdvcmRzIGZyb20gdGhl IHRleHQgb2YgdGhlIGJ1ZmZlciBpbnRvIHRoZSBuZXcgYm9va21hcmsKbmFtZS4iCiAgKGludGVy YWN0aXZlIChsaXN0IChib29rbWFyay1jb21wbGV0aW5nLXJlYWQgIk9sZCBib29rbWFyayBuYW1l IikpKQogIChib29rbWFyay1tYXliZS1oaXN0b3JpY2l6ZS1zdHJpbmcgb2xkLW5hbWUpCiAgKGJv b2ttYXJrLW1heWJlLWxvYWQtZGVmYXVsdC1maWxlKQoKICAoc2V0cSBib29rbWFyay15YW5rLXBv aW50IChwb2ludCkpCiAgKHNldHEgYm9va21hcmstY3VycmVudC1idWZmZXIgKGN1cnJlbnQtYnVm ZmVyKSkKICAobGV0ICgoZmluYWwtbmV3LW5hbWUKICAgICAgICAgKG9yIG5ldy1uYW1lICAgOyB1 c2Ugc2Vjb25kIGFyZywgaWYgbm9uLW5pbAogICAgICAgICAgICAgKHJlYWQtZnJvbS1taW5pYnVm ZmVyCiAgICAgICAgICAgICAgIk5ldyBuYW1lOiAiCiAgICAgICAgICAgICAgbmlsCiAgICAgICAg ICAgICAgKGRlZmluZS1rZXltYXAKICAgICAgICAgICAgICAgIDpwYXJlbnQgbWluaWJ1ZmZlci1s b2NhbC1tYXAKICAgICAgICAgICAgICAgICJDLXciICMnYm9va21hcmsteWFuay13b3JkKQogICAg ICAgICAgICAgIG5pbAogICAgICAgICAgICAgICdib29rbWFyay1oaXN0b3J5KSkpKQogICAgKGJv b2ttYXJrLXNldC1uYW1lIG9sZC1uYW1lIGZpbmFsLW5ldy1uYW1lKQogICAgKGJvb2ttYXJrLXVw ZGF0ZS1sYXN0LW1vZGlmaWVkIGZpbmFsLW5ldy1uYW1lKQogICAgKHNldHEgYm9va21hcmstY3Vy cmVudC1ib29rbWFyayBmaW5hbC1uZXctbmFtZSkKICAgIChib29rbWFyay1ibWVudS1zdXJyZXB0 aXRpb3VzbHktcmVidWlsZC1saXN0KQogICAgKHNldHEgYm9va21hcmstYWxpc3QtbW9kaWZpY2F0 aW9uLWNvdW50CiAgICAgICAgICAoMSsgYm9va21hcmstYWxpc3QtbW9kaWZpY2F0aW9uLWNvdW50 KSkKICAgIChpZiAoYm9va21hcmstdGltZS10by1zYXZlLXApCiAgICAgICAgKGJvb2ttYXJrLXNh dmUpKSkpCgoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGJvb2ttYXJrLWluc2VydCAoYm9va21hcmst bmFtZSkKICAiSW5zZXJ0IHRoZSB0ZXh0IG9mIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgYm9va21h cmsgQk9PS01BUkstTkFNRS4KQk9PS01BUkstTkFNRSBpcyBhIGJvb2ttYXJrIG5hbWUgKGEgc3Ry aW5nKSwgbm90IGEgYm9va21hcmsgcmVjb3JkLgoKWW91IG1heSBoYXZlIGEgcHJvYmxlbSB1c2lu ZyB0aGlzIGZ1bmN0aW9uIGlmIHRoZSB2YWx1ZSBvZiB2YXJpYWJsZQpgYm9va21hcmstYWxpc3Qn IGlzIG5pbC4gIElmIHRoYXQgaGFwcGVucywgeW91IG5lZWQgdG8gbG9hZCBpbiBzb21lCmJvb2tt YXJrcy4gIFNlZSBoZWxwIG9uIGZ1bmN0aW9uIGBib29rbWFyay1sb2FkJyBmb3IgbW9yZSBhYm91 dAp0aGlzLiIKICAoaW50ZXJhY3RpdmUgKGxpc3QgKGJvb2ttYXJrLWNvbXBsZXRpbmctcmVhZCAi SW5zZXJ0IGJvb2ttYXJrIGNvbnRlbnRzIikpKQogIChib29rbWFyay1tYXliZS1oaXN0b3JpY2l6 ZS1zdHJpbmcgYm9va21hcmstbmFtZSkKICAoYm9va21hcmstbWF5YmUtbG9hZC1kZWZhdWx0LWZp bGUpCiAgKGxldCAoKG9yaWctcG9pbnQgKHBvaW50KSkKCShzdHItdG8taW5zZXJ0CgkgKHNhdmUt Y3VycmVudC1idWZmZXIKICAgICAgICAgICAoYm9va21hcmstaGFuZGxlLWJvb2ttYXJrIGJvb2tt YXJrLW5hbWUpCgkgICAoYnVmZmVyLXN0cmluZykpKSkKICAgIChpbnNlcnQgc3RyLXRvLWluc2Vy dCkKICAgIChwdXNoLW1hcmspCiAgICAoZ290by1jaGFyIG9yaWctcG9pbnQpKSkKCgo7OzsjIyNh dXRvbG9hZAooZGVmdW4gYm9va21hcmstZGVsZXRlIChib29rbWFyay1uYW1lICZvcHRpb25hbCBi YXRjaCkKICAiRGVsZXRlIEJPT0tNQVJLLU5BTUUgZnJvbSB0aGUgYm9va21hcmsgbGlzdC4KClJl bW92ZXMgb25seSB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYSBib29rbWFyayB3aXRoIHRoYXQgbmFt ZS4gIElmCnRoZXJlIGFyZSBvbmUgb3IgbW9yZSBvdGhlciBib29rbWFya3Mgd2l0aCB0aGUgc2Ft ZSBuYW1lLCB0aGV5IHdpbGwKbm90IGJlIGRlbGV0ZWQuICBEZWZhdWx0cyB0byB0aGUgXCJjdXJy ZW50XCIgYm9va21hcmsgKHRoYXQgaXMsIHRoZQpvbmUgbW9zdCByZWNlbnRseSB1c2VkIGluIHRo aXMgZmlsZSwgaWYgYW55KS4KT3B0aW9uYWwgc2Vjb25kIGFyZyBCQVRDSCBtZWFucyBkb24ndCB1 cGRhdGUgdGhlIGJvb2ttYXJrIGxpc3QgYnVmZmVyLApwcm9iYWJseSBiZWNhdXNlIHdlIHdlcmUg Y2FsbGVkIGZyb20gdGhlcmUuIgogIChpbnRlcmFjdGl2ZQogICAobGlzdCAoYm9va21hcmstY29t cGxldGluZy1yZWFkICJEZWxldGUgYm9va21hcmsiCgkJCQkgICBib29rbWFyay1jdXJyZW50LWJv b2ttYXJrKSkpCiAgKGJvb2ttYXJrLW1heWJlLWhpc3RvcmljaXplLXN0cmluZyBib29rbWFyay1u YW1lKQogIChib29rbWFyay1tYXliZS1sb2FkLWRlZmF1bHQtZmlsZSkKICAobGV0ICgod2lsbC1n byAoYm9va21hcmstZ2V0LWJvb2ttYXJrIGJvb2ttYXJrLW5hbWUgJ25vZXJyb3IpKSkKICAgIChi b29rbWFyay0tcmVtb3ZlLWZyaW5nZS1tYXJrIHdpbGwtZ28pCiAgICAoc2V0cSBib29rbWFyay1h bGlzdCAoZGVscSB3aWxsLWdvIGJvb2ttYXJrLWFsaXN0KSkKICAgIDs7IEFkZGVkIGJ5IGRiLCBu aWwgYm9va21hcmstY3VycmVudC1ib29rbWFyayBpZiB0aGUgbGFzdAogICAgOzsgb2NjdXJyZW5j ZSBoYXMgYmVlbiBkZWxldGVkCiAgICAob3IgKGJvb2ttYXJrLWdldC1ib29rbWFyayBib29rbWFy ay1jdXJyZW50LWJvb2ttYXJrICdub2Vycm9yKQogICAgICAgIChzZXRxIGJvb2ttYXJrLWN1cnJl bnQtYm9va21hcmsgbmlsKSkpCiAgKHVubGVzcyBiYXRjaAogICAgKGJvb2ttYXJrLWJtZW51LXN1 cnJlcHRpdGlvdXNseS1yZWJ1aWxkLWxpc3QpKQogIChzZXRxIGJvb2ttYXJrLWFsaXN0LW1vZGlm aWNhdGlvbi1jb3VudAogICAgICAgICgxKyBib29rbWFyay1hbGlzdC1tb2RpZmljYXRpb24tY291 bnQpKQogICh3aGVuIChib29rbWFyay10aW1lLXRvLXNhdmUtcCkKICAgIChib29rbWFyay1zYXZl KSkpCgoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGJvb2ttYXJrLWRlbGV0ZS1hbGwgKCZvcHRpb25h bCBuby1jb25maXJtKQogICJQZXJtYW5lbnRseSBkZWxldGUgYWxsIGJvb2ttYXJrcy4KSWYgb3B0 aW9uYWwgYXJndW1lbnQgTk8tQ09ORklSTSBpcyBub24tbmlsLCBkb24ndCBhc2sgZm9yCmNvbmZp cm1hdGlvbi4iCiAgKGludGVyYWN0aXZlICJQIikKICA7OyBXZSBkb24ndCB1c2UgYGJvb2ttYXJr LW1lbnUtY29uZmlybS1kZWxldGlvbicgaGVyZSBiZWNhdXNlIHRoYXQKICA7OyB2YXJpYWJsZSBp cyBzcGVjaWZpY2FsbHkgdG8gY29udHJvbCBjb25maXJtYXRpb24gcHJvbXB0aW5nIGluIGEKICA7 OyBib29rbWFyayBtZW51IGJ1ZmZlciwgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBtYXJrZWQtZm9y LWRlbGV0aW9uCiAgOzsgYm9va21hcmtzIGFycmF5ZWQgaW4gZnJvbnQgb2YgdGhlbSBhbmQgbWln aHQgaGF2ZSBhY2NpZGVudGFsbHkKICA7OyBoaXQgdGhlIGtleSB0aGF0IGV4ZWN1dGVzIHRoZSBk ZWxldGlvbnMuICBUaGUgVUkgc2l0dWF0aW9uIGhlcmUKICA7OyBpcyBxdWl0ZSBkaWZmZXJlbnQs IGJ5IGNvbnRyYXN0OiB0aGUgdXNlciBnb3QgdG8gdGhpcyBwb2ludCBieSBhCiAgOzsgc2VxdWVu Y2Ugb2Yga2V5c3Ryb2tlcyB1bmxpa2VseSB0byBiZSB0eXBlZCBieSBjaGFuY2UuCiAgKHdoZW4g KG9yIG5vLWNvbmZpcm0KICAgICAgICAgICAgKHllcy1vci1uby1wICJQZXJtYW5lbnRseSBkZWxl dGUgYWxsIGJvb2ttYXJrcz8gIikpCiAgICAoYm9va21hcmstbWF5YmUtbG9hZC1kZWZhdWx0LWZp bGUpCiAgICAoc2V0cSBib29rbWFyay1hbGlzdC1tb2RpZmljYXRpb24tY291bnQKICAgICAgICAg ICgrIGJvb2ttYXJrLWFsaXN0LW1vZGlmaWNhdGlvbi1jb3VudCAobGVuZ3RoIGJvb2ttYXJrLWFs aXN0KSkpCiAgICAoc2V0cSBib29rbWFyay1hbGlzdCBuaWwpCiAgICAoYm9va21hcmstYm1lbnUt c3VycmVwdGl0aW91c2x5LXJlYnVpbGQtbGlzdCkKICAgICh3aGVuIChib29rbWFyay10aW1lLXRv LXNhdmUtcCkKICAgICAgKGJvb2ttYXJrLXNhdmUpKSkpCgoKKGRlZnVuIGJvb2ttYXJrLXRpbWUt dG8tc2F2ZS1wICgmb3B0aW9uYWwgZmluYWwtdGltZSkKICAiUmV0dXJuIHQgaWYgaXQgaXMgdGlt ZSB0byBzYXZlIGJvb2ttYXJrcyB0byBkaXNrLCBuaWwgb3RoZXJ3aXNlLgpPcHRpb25hbCBhcmd1 bWVudCBGSU5BTC1USU1FIG1lYW5zIHRoaXMgaXMgYmVpbmcgY2FsbGVkIHdoZW4gRW1hY3MKaXMg YmVpbmcga2lsbGVkLCBzbyBzYXZlIGV2ZW4gaWYgYGJvb2ttYXJrLXNhdmUtZmxhZycgaXMgYSBu dW1iZXIgYW5kCmlzIGdyZWF0ZXIgdGhhbiBgYm9va21hcmstYWxpc3QtbW9kaWZpY2F0aW9uLWNv dW50Jy4iCiAgOzsgQnkgR3JlZ29yeSBNLiBTYXVuZGVycyA8c2F1bmRlcnN7X0FUX31jaXMub2hp by1zdGF0ZS5lZHU+CiAgKGNvbmQgKGZpbmFsLXRpbWUKCSAoYW5kICg+IGJvb2ttYXJrLWFsaXN0 LW1vZGlmaWNhdGlvbi1jb3VudCAwKQoJICAgICAgYm9va21hcmstc2F2ZS1mbGFnKSkKCSgobnVt YmVycCBib29rbWFyay1zYXZlLWZsYWcpCgkgKD49IGJvb2ttYXJrLWFsaXN0LW1vZGlmaWNhdGlv bi1jb3VudCBib29rbWFyay1zYXZlLWZsYWcpKQoJKHQKCSBuaWwpKSkKCgo7OzsjIyNhdXRvbG9h ZAooZGVmdW4gYm9va21hcmstd3JpdGUgKCkKICAiV3JpdGUgYm9va21hcmtzIHRvIGEgZmlsZSAo cmVhZGluZyB0aGUgZmlsZSBuYW1lIHdpdGggdGhlIG1pbmlidWZmZXIpLiIKICAoZGVjbGFyZSAo aW50ZXJhY3RpdmUtb25seSBib29rbWFyay1zYXZlKSkKICAoaW50ZXJhY3RpdmUpCiAgKGJvb2tt YXJrLW1heWJlLWxvYWQtZGVmYXVsdC1maWxlKQogIChib29rbWFyay1zYXZlIHQpKQoKCjs7OyMj I2F1dG9sb2FkCihkZWZ1biBib29rbWFyay1zYXZlICgmb3B0aW9uYWwgcGFyZyBmaWxlIG1ha2Ut ZGVmYXVsdCkKICAiU2F2ZSBjdXJyZW50bHkgZGVmaW5lZCBib29rbWFya3MgaW4gRklMRS4KRklM RSBkZWZhdWx0cyB0byBgYm9va21hcmstZGVmYXVsdC1maWxlJy4KV2l0aCBwcmVmaXggUEFSRywg cXVlcnkgdXNlciBmb3IgYSBmaWxlIHRvIHNhdmUgaW4uCklmIE1BS0UtREVGQVVMVCBpcyBub24t bmlsIChpbnRlcmFjdGl2ZWx5IHdpdGggcHJlZml4IFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gXFxb dW5pdmVyc2FsLWFyZ3VtZW50XSkKdGhlIGZpbGUgd2Ugc2F2ZSBpbiBiZWNvbWVzIHRoZSBuZXcg ZGVmYXVsdCBpbiB0aGUgY3VycmVudCBFbWFjcwpzZXNzaW9uICh3aXRob3V0IGFmZmVjdGluZyB0 aGUgdmFsdWUgb2YgYGJvb2ttYXJrLWRlZmF1bHQtZmlsZScuKS4KCldoZW4geW91IHdhbnQgdG8g bG9hZCBpbiB0aGUgYm9va21hcmtzIGZyb20gYSBmaWxlLCB1c2UKYGJvb2ttYXJrLWxvYWQnLCBc XFtib29rbWFyay1sb2FkXS4gIFRoYXQgZnVuY3Rpb24gd2lsbCBwcm9tcHQgeW91CmZvciBhIGZp bGUsIGRlZmF1bHRpbmcgdG8gdGhlIGZpbGUgZGVmaW5lZCBieSB2YXJpYWJsZQpgYm9va21hcmst ZGVmYXVsdC1maWxlJy4iCiAgKGludGVyYWN0aXZlCiAgIChsaXN0IGN1cnJlbnQtcHJlZml4LWFy ZyBuaWwgKGVxdWFsICcoMTYpIGN1cnJlbnQtcHJlZml4LWFyZykpKQogIChib29rbWFyay1tYXli ZS1sb2FkLWRlZmF1bHQtZmlsZSkKICAodW5sZXNzIGZpbGUKICAgIChzZXRxIGZpbGUKICAgICAg ICAgIChsZXQgKChkZWZhdWx0IChvciAoY2FyIGJvb2ttYXJrLWJvb2ttYXJrcy10aW1lc3RhbXAp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9va21hcmstZGVmYXVsdC1maWxlKSkpCiAg ICAgICAgICAgIChpZiBwYXJnCiAgICAgICAgICAgICAgICA7OyBUaGlzIHNob3VsZCBiZSBwYXJ0 IG9mIHRoZSBgaW50ZXJhY3RpdmUnIHNwZWMuCiAgICAgICAgICAgICAgICAocmVhZC1maWxlLW5h bWUgKGZvcm1hdCAiRmlsZSB0byBzYXZlIGJvb2ttYXJrcyBpbjogKCVzKSAiCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0KQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChmaWxlLW5hbWUtZGlyZWN0b3J5IGRlZmF1bHQpIGRlZmF1bHQpCiAgICAg ICAgICAgICAgZGVmYXVsdCkpKSkKICAoYm9va21hcmstd3JpdGUtZmlsZSBmaWxlKQogIDs7IFNp Z25hbCB0aGF0IHdlIGhhdmUgc3luY2VkIHRoZSBib29rbWFyayBmaWxlIGJ5IHNldHRpbmcgdGhp cyB0byAwLgogIDs7IElmIHRoZXJlIHdhcyBhbiBlcnJvciBhdCBhbnkgcG9pbnQgYmVmb3JlLCBp dCB3aWxsIG5vdCBnZXQgc2V0LAogIDs7IHdoaWNoIGlzIHdoYXQgd2Ugd2FudC4KICAoc2V0cSBi b29rbWFyay1hbGlzdC1tb2RpZmljYXRpb24tY291bnQgMCkKICAoaWYgbWFrZS1kZWZhdWx0CiAg ICAgIChsZXQgKChkZWZhdWx0IChleHBhbmQtZmlsZS1uYW1lIGZpbGUpKSkKICAgICAgICAoc2V0 cSBib29rbWFyay1ib29rbWFya3MtdGltZXN0YW1wCiAgICAgICAgICAgICAgKGNvbnMgZGVmYXVs dCAobnRoIDUgKGZpbGUtYXR0cmlidXRlcyBkZWZhdWx0KSkpKSkKICAgIChsZXQgKChkZWZhdWx0 IChjYXIgYm9va21hcmstYm9va21hcmtzLXRpbWVzdGFtcCkpKQogICAgICAoaWYgKHN0cmluZz0g ZGVmYXVsdCAoZXhwYW5kLWZpbGUtbmFtZSBmaWxlKSkKICAgICAgICAgIChzZXRxIGJvb2ttYXJr LWJvb2ttYXJrcy10aW1lc3RhbXAKICAgICAgICAgICAgICAgIChjb25zIGRlZmF1bHQgKG50aCA1 IChmaWxlLWF0dHJpYnV0ZXMgZGVmYXVsdCkpKSkpKSkpCgoMCihkZWZ1biBib29rbWFyay13cml0 ZS1maWxlIChmaWxlKQogICJXcml0ZSBgYm9va21hcmstYWxpc3QnIHRvIEZJTEUuIgogIChsZXQg KChyZXBvcnRlciAobWFrZS1wcm9ncmVzcy1yZXBvcnRlcgoJCSAgIChmb3JtYXQgIlNhdmluZyBi b29rbWFya3MgdG8gZmlsZSAlcy4uLiIgZmlsZSkpKSkKICAgICh3aXRoLWN1cnJlbnQtYnVmZmVy IChnZXQtYnVmZmVyLWNyZWF0ZSAiICpCb29rbWFya3MqIikKICAgICAgKGdvdG8tY2hhciAocG9p bnQtbWluKSkKICAgICAgKGRlbGV0ZS1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkpCiAg ICAgIChsZXQgKChjb2Rpbmctc3lzdGVtLWZvci13cml0ZQoJICAgICAob3IgY29kaW5nLXN5c3Rl bS1mb3Itd3JpdGUKCQkgYm9va21hcmstZmlsZS1jb2Rpbmctc3lzdGVtICd1dGYtOC1lbWFjcykp CgkgICAgKHByaW50LWxlbmd0aCBuaWwpCgkgICAgKHByaW50LWxldmVsIG5pbCkKCSAgICA7OyBT ZWUgYnVnICMxMjUwMyBmb3Igd2h5IHdlIGJpbmQgYHByaW50LWNpcmNsZScuICBVc2VycwoJICAg IDs7IGNhbiBkZWZpbmUgdGhlaXIgb3duIGJvb2ttYXJrIHR5cGVzLCB3aGljaCBjYW4gcmVzdWx0 IGluCgkgICAgOzsgYXJiaXRyYXJ5IExpc3Agb2JqZWN0cyBiZWluZyBzdG9yZWQgaW4gYm9va21h cmsgcmVjb3JkcywKCSAgICA7OyBhbmQgc29tZSB1c2VycyBjcmVhdGUgb2JqZWN0cyBjb250YWlu aW5nIGNpcmN1bGFyaXRpZXMuCgkgICAgKHByaW50LWNpcmNsZSB0KSkKCShpbnNlcnQgIigiKQoJ OzsgUmF0aGVyIHRoYW4gYSBzaW5nbGUgY2FsbCB0byBgcHAnIHdlIG1ha2Ugb25lIHBlciBib29r bWFyay4KCTs7IEFwcGFyZW50bHkgYHBwJyBoYXMgYSBwb29yIGFsZ29yaXRobWljIGNvbXBsZXhp dHksIHNvIHRoaXMKCTs7IHNjYWxlcyBhIGxvdCBiZXR0ZXIuICBidWcjNDQ4NS4KCShkb2xpc3Qg KGkgYm9va21hcmstYWxpc3QpIChwcCBpIChjdXJyZW50LWJ1ZmZlcikpKQoJKGluc2VydCAiKVxu IikKCTs7IE1ha2Ugc3VyZSB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGNhbiBzYWZlbHkgZW5jb2Rl IHRoZQoJOzsgYm9va21hcmtzLiAgSWYgaXQgY2Fubm90LCBzdWdnZXN0IHV0Zi04LWVtYWNzIGFz IGRlZmF1bHQuCgkod2l0aC1jb2RpbmctcHJpb3JpdHkgJyh1dGYtOC1lbWFjcykKCSAgKHNldHEg Y29kaW5nLXN5c3RlbS1mb3Itd3JpdGUKCQkoc2VsZWN0LXNhZmUtY29kaW5nLXN5c3RlbSAocG9p bnQtbWluKSAocG9pbnQtbWF4KQoJCQkJCSAgIChsaXN0IHQgY29kaW5nLXN5c3RlbS1mb3Itd3Jp dGUpKSkpCgkoZ290by1jaGFyIChwb2ludC1taW4pKQoJKGJvb2ttYXJrLWluc2VydC1maWxlLWZv cm1hdC12ZXJzaW9uLXN0YW1wIGNvZGluZy1zeXN0ZW0tZm9yLXdyaXRlKQoJKGxldCAoKHZlcnNp b24tY29udHJvbAoJICAgICAgIChjb25kCgkJKChudWxsIGJvb2ttYXJrLXZlcnNpb24tY29udHJv bCkgbmlsKQoJCSgoZXEgJ25ldmVyIGJvb2ttYXJrLXZlcnNpb24tY29udHJvbCkgJ25ldmVyKQoJ CSgoZXEgJ25vc3BlY2lhbCBib29rbWFyay12ZXJzaW9uLWNvbnRyb2wpIHZlcnNpb24tY29udHJv bCkKCQkodCB0KSkpKQoJICAoY29uZGl0aW9uLWNhc2UgbmlsCiAgICAgICAgICAgICAgOzsgVGhl cmUgd2FzIGEgc3RyZXRjaCBvZiB0aW1lIChhYm91dCAxNSB5ZWFycykgd2hlbiB3ZQogICAgICAg ICAgICAgIDs7IHVzZWQgYHdyaXRlLXJlZ2lvbicgYmVsb3cgaW5zdGVhZCBvZiBgd3JpdGUtZmls ZScsCiAgICAgICAgICAgICAgOzsgYmVmb3JlIGdvaW5nIGJhY2sgdG8gYHdyaXRlLWZpbGUnIGFn YWluLiAgU28gaWYgeW91J3JlCiAgICAgICAgICAgICAgOzsgY29uc2lkZXJpbmcgY2hhbmdpbmcg aXQgdG8gYHdyaXRlLXJlZ2lvbicsIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA7OyBodHRwczov L2RlYmJ1Z3MuZ251Lm9yZy9jZ2kvYnVncmVwb3J0LmNnaT9idWc9MTI1MDcuCiAgICAgICAgICAg ICAgOzsgVGhhdCBidWcgdGVsbHMgdGhlIHN0b3J5IG9mIGhvdyB3ZSBmaXJzdCBzdGFydGVkIHVz aW5nCiAgICAgICAgICAgICAgOzsgYHdyaXRlLXJlZ2lvbicgaW4gMjAwNS4uLgogICAgICAgICAg ICAgIDs7CiAgICAgICAgICAgICAgOzsgICBjb21taXQgYTUwNjA1NGFmN2NkODZhNjNmZGE5OTYw NTZjMDkzMTA5NjZmMzJlZgogICAgICAgICAgICAgIDs7ICAgQXV0aG9yOiAgICAgS2FybCBGb2dl bCA8a2ZvZ2VsQHJlZC1iZWFuLmNvbT4KICAgICAgICAgICAgICA7OyAgIEF1dGhvckRhdGU6IFNh dCBOb3YgMTIgMjA6MzA6MjIgMjAwNSArMDAwMAogICAgICAgICAgICAgIDs7CiAgICAgICAgICAg ICAgOzsgICAgICAgKGJvb2ttYXJrLXdyaXRlLWZpbGUpOiBEb24ndCB2aXNpdCB0aGUKICAgICAg ICAgICAgICA7OyAgICAgICBkZXN0aW5hdGlvbiBmaWxlLCBqdXN0IHdyaXRlIHRoZSBkYXRhIHRv IGl0CiAgICAgICAgICAgICAgOzsgICAgICAgdXNpbmcgd3JpdGUtcmVnaW9uLiAgVGhpcyBpcyBz aW1pbGFyIHRvCiAgICAgICAgICAgICAgOzsgICAgICAgMjAwNS0wNS0yOVQwODozNjoyNlohcm1z QGdudS5vcmcgb2Ygc2F2ZXBsYWNlLmVsLAogICAgICAgICAgICAgIDs7ICAgICAgIGJ1dCB3aXRo IGFuIGFkZGl0aW9uYWwgY2hhbmdlIHRvIGF2b2lkIHZpc2l0aW5nCiAgICAgICAgICAgICAgOzsg ICAgICAgdGhlICBmaWxlIGluIHRoZSBmaXJzdCBwbGFjZS4KICAgICAgICAgICAgICA7OwogICAg ICAgICAgICAgIDs7IC4uLmFuZCBvZiBob3cgZnVydGhlciBpbnF1aXJ5IGxlZCB1cyB0byBpbnZl c3RpZ2F0ZSAoaW4KICAgICAgICAgICAgICA7OyAyMDEyIGFuZCB0aGVuIGFnYWluIGluIDIwMjAp IGFuZCBldmVudHVhbGx5IGRlY2lkZSB0aGF0CiAgICAgICAgICAgICAgOzsgbWF0Y2hpbmcgdGhl IHNhdmVwbGFjZS5lbCBjaGFuZ2UgZG9lc24ndCBtYWtlIHNlbnNlIGZvcgogICAgICAgICAgICAg IDs7IGJvb2ttYXJrLmVsLiAgVGhlcmVmb3JlIHdlIHJldmVydGVkIHRvIGB3cml0ZS1maWxlJywK ICAgICAgICAgICAgICA7OyB3aGljaCBtZWFucyBudW1iZXJlZCBiYWNrdXBzIG1heSBub3cgYmUg Y3JlYXRlZCwKICAgICAgICAgICAgICA7OyBkZXBlbmRpbmcgb24gYGJvb2ttYXJrLXZlcnNpb24t Y29udHJvbCcgYXMgcGVyIGFib3ZlLgoJICAgICAgKHdyaXRlLWZpbGUgZmlsZSkKCSAgICAoZmls ZS1lcnJvciAobWVzc2FnZSAiQ2FuJ3Qgd3JpdGUgJXMiIGZpbGUpKSkKCSAgKHNldHEgYm9va21h cmstZmlsZS1jb2Rpbmctc3lzdGVtIGNvZGluZy1zeXN0ZW0tZm9yLXdyaXRlKQoJICAoa2lsbC1i dWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKCSAgKHByb2dyZXNzLXJlcG9ydGVyLWRvbmUgcmVwb3J0 ZXIpKSkpKSkKCgooZGVmdW4gYm9va21hcmstaW1wb3J0LW5ldy1saXN0IChuZXctbGlzdCkKICAi QWRkIE5FVy1MSVNUIG9mIGJvb2ttYXJrcyB0byBgYm9va21hcmstYWxpc3QnLgpSZW5hbWUgbmV3 IGJvb2ttYXJrcyBhcyBuZWVkZWQgdXNpbmcgc3VmZml4IFwiPE4+XCIgKE49MSwyLDMuLi4pLCB3 aGVuCnRoZXkgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBib29rbWFyayBuYW1lcy4iCiAgKGxldCAo KG5hbWVzIChib29rbWFyay1hbGwtbmFtZXMpKSkKICAgIChkb2xpc3QgKGZ1bGwtcmVjb3JkIG5l dy1saXN0KQogICAgICAoYm9va21hcmstbWF5YmUtcmVuYW1lIGZ1bGwtcmVjb3JkIG5hbWVzKQog ICAgICAoc2V0cSBib29rbWFyay1hbGlzdCAobmNvbmMgYm9va21hcmstYWxpc3QgKGxpc3QgZnVs bC1yZWNvcmQpKSkKICAgICAgKHB1c2ggKGJvb2ttYXJrLW5hbWUtZnJvbS1mdWxsLXJlY29yZCBm dWxsLXJlY29yZCkgbmFtZXMpKSkpCgoKKGRlZnVuIGJvb2ttYXJrLW1heWJlLXJlbmFtZSAoZnVs bC1yZWNvcmQgbmFtZXMpCiAgIlJlbmFtZSBib29rbWFyayBGVUxMLVJFQ09SRCBpZiBpdHMgY3Vy cmVudCBuYW1lIGlzIGFscmVhZHkgdXNlZC4KVGhpcyBpcyBhIGhlbHBlciBmb3IgYGJvb2ttYXJr LWltcG9ydC1uZXctbGlzdCcuIgogIChsZXQgKChmb3VuZC1uYW1lIChib29rbWFyay1uYW1lLWZy b20tZnVsbC1yZWNvcmQgZnVsbC1yZWNvcmQpKSkKICAgIChpZiAobWVtYmVyIGZvdW5kLW5hbWUg bmFtZXMpCiAgICAgICAgOzsgV2UndmUgZ290IGEgY29uZmxpY3QsIHNvIGdlbmVyYXRlIGEgbmV3 IG5hbWUKICAgICAgICAobGV0ICgoY291bnQgMikKICAgICAgICAgICAgICAobmV3LW5hbWUgZm91 bmQtbmFtZSkpCiAgICAgICAgICAod2hpbGUgKG1lbWJlciBuZXctbmFtZSBuYW1lcykKICAgICAg ICAgICAgKHNldHEgbmV3LW5hbWUgKGNvbmNhdCBmb3VuZC1uYW1lIChmb3JtYXQgIjwlZD4iIGNv dW50KSkpCiAgICAgICAgICAgIChzZXRxIGNvdW50ICgxKyBjb3VudCkpKQogICAgICAgICAgKGJv b2ttYXJrLXNldC1uYW1lIGZ1bGwtcmVjb3JkIG5ldy1uYW1lKSkpKSkKCgo7OzsjIyNhdXRvbG9h ZAooZGVmdW4gYm9va21hcmstbG9hZCAoZmlsZSAmb3B0aW9uYWwgb3ZlcndyaXRlIG5vLW1zZyBk ZWZhdWx0KQogICJMb2FkIGJvb2ttYXJrcyBmcm9tIEZJTEUgKHdoaWNoIG11c3QgYmUgaW4gYm9v a21hcmsgZm9ybWF0KS4KQXBwZW5kcyBsb2FkZWQgYm9va21hcmtzIHRvIHRoZSBmcm9udCBvZiB0 aGUgbGlzdCBvZiBib29rbWFya3MuCklmIGFyZ3VtZW50IE9WRVJXUklURSBpcyBub24tbmlsLCBl eGlzdGluZyBib29rbWFya3MgYXJlIGRlc3Ryb3llZC4KT3B0aW9uYWwgdGhpcmQgYXJnIE5PLU1T RyBtZWFucyBkb24ndCBkaXNwbGF5IGFueSBtZXNzYWdlcyB3aGlsZSBsb2FkaW5nLgpJZiBERUZB VUxUIGlzIG5vbi1uaWwgbWFrZSBGSUxFIHRoZSBuZXcgYm9va21hcmsgZmlsZSB0byB3YXRjaC4K SW50ZXJhY3RpdmVseSwgYSBwcmVmaXggYXJnIG1ha2VzIE9WRVJXUklURSBhbmQgREVGQVVMVCBu b24tbmlsLgoKSWYgeW91IGxvYWQgYSBmaWxlIHRoYXQgZG9lc24ndCBjb250YWluIGEgcHJvcGVy IGJvb2ttYXJrIGFsaXN0LCB5b3UKd2lsbCBjb3JydXB0IEVtYWNzJ3MgYm9va21hcmsgbGlzdC4g IEdlbmVyYWxseSwgeW91IHNob3VsZCBvbmx5IGxvYWQKaW4gZmlsZXMgdGhhdCB3ZXJlIGNyZWF0 ZWQgd2l0aCB0aGUgYm9va21hcmsgZnVuY3Rpb25zIGluIHRoZSBmaXJzdApwbGFjZS4gIFlvdXIg b3duIHBlcnNvbmFsIGJvb2ttYXJrIGZpbGUsIHNwZWNpZmllZCBieSB0aGUgdmFyaWFibGUKYGJv b2ttYXJrLWRlZmF1bHQtZmlsZScsIGlzIG1haW50YWluZWQgYXV0b21hdGljYWxseSBieSBFbWFj czsgeW91CnNob3VsZG4ndCBuZWVkIHRvIGxvYWQgaXQgZXhwbGljaXRseS4KCklmIHlvdSBsb2Fk IGEgZmlsZSBjb250YWluaW5nIGJvb2ttYXJrcyB3aXRoIHRoZSBzYW1lIG5hbWVzIGFzCmJvb2tt YXJrcyBhbHJlYWR5IHByZXNlbnQgaW4geW91ciBFbWFjcywgdGhlIG5ldyBib29rbWFya3Mgd2ls bCBnZXQKdW5pcXVlIG51bWVyaWMgc3VmZml4ZXMgXCI8Mj5cIiwgXCI8Mz5cIiwgZXRjLiIKICAo aW50ZXJhY3RpdmUKICAgKGxldCAoKGRlZmF1bHQgKGFiYnJldmlhdGUtZmlsZS1uYW1lCgkJICAg KG9yIChjYXIgYm9va21hcmstYm9va21hcmtzLXRpbWVzdGFtcCkKCQkgICAgICAgKGV4cGFuZC1m aWxlLW5hbWUgYm9va21hcmstZGVmYXVsdC1maWxlKSkpKQoJIChwcmVmaXggY3VycmVudC1wcmVm aXgtYXJnKSkKICAgICAobGlzdCAocmVhZC1maWxlLW5hbWUgKGZvcm1hdCAiTG9hZCBib29rbWFy a3MgZnJvbTogKCVzKSAiIGRlZmF1bHQpCgkJCSAgIChmaWxlLW5hbWUtZGlyZWN0b3J5IGRlZmF1 bHQpIGRlZmF1bHQgJ2NvbmZpcm0pCgkgICBwcmVmaXggbmlsIHByZWZpeCkpKQogIChsZXQqICgo ZmlsZSAoZXhwYW5kLWZpbGUtbmFtZSBmaWxlKSkKCSAoYWZpbGUgKGFiYnJldmlhdGUtZmlsZS1u YW1lIGZpbGUpKSkKICAgICh1bmxlc3MgKGZpbGUtcmVhZGFibGUtcCBmaWxlKQogICAgICAodXNl ci1lcnJvciAiQ2Fubm90IHJlYWQgYm9va21hcmsgZmlsZSAlcyIgYWZpbGUpKQogICAgKGxldCAo KHJlcG9ydGVyCgkgICAodW5sZXNzIG5vLW1zZwoJICAgICAobWFrZS1wcm9ncmVzcy1yZXBvcnRl cgoJICAgICAgKGZvcm1hdCAiTG9hZGluZyBib29rbWFya3MgZnJvbSAlcy4uLiIgZmlsZSkpKSkp CiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChsZXQgKGVuYWJsZS1sb2NhbC12YXJpYWJsZXMp CgkJCSAgICAgKGZpbmQtZmlsZS1ub3NlbGVjdCBmaWxlKSkKCShnb3RvLWNoYXIgKHBvaW50LW1p bikpCgkobGV0ICgoYmxpc3QgKGJvb2ttYXJrLWFsaXN0LWZyb20tYnVmZmVyKSkpCgkgICh1bmxl c3MgKGxpc3RwIGJsaXN0KQoJICAgIChlcnJvciAiSW52YWxpZCBib29rbWFyayBsaXN0IGluICVz IiBmaWxlKSkKCSAgOzsgUlc6IFVwb24gbG9hZGluZyB0aGUgYm9va21hcmtzLCB3ZSBjb3VsZCBh ZGQgdG8gZWFjaCBib29rbWFyawoJICA7OyBpbiBgYm9va21hcmstYWxpc3QnIGFuIGV4dHJhIGtl eSBgYm9va21hcmstZmlsZScsIHNvIHRoYXQKCSAgOzsgdXBvbiByZWxvYWRpbmcgdGhlIGJvb2tt YXJrcyB3aXRoIE9WRVJXUklURSBub24tbmlsLAoJICA7OyB3ZSBvdmVyd3JpdGUgb25seSB0aG9z ZSBib29rbWFya3MgZm9yIHdoaWNoIHRoZSBrZXkgYGJvb2ttYXJrLWZpbGUnCgkgIDs7IG1hdGNo ZXMgRklMRS4gIGBib29rbWFyay1zYXZlJyBjYW4gaWdub3JlIHRoaXMga2V5LgoJICA7OyBXb3Vs ZCB0aGlzIGJlIGEgdXNlZnVsIG9wdGlvbj8KCSAgKGlmIG92ZXJ3cml0ZQoJICAgICAgKHNldHEg Ym9va21hcmstYWxpc3QgYmxpc3QKCQkgICAgYm9va21hcmstYWxpc3QtbW9kaWZpY2F0aW9uLWNv dW50IDApCgkgICAgKGJvb2ttYXJrLWltcG9ydC1uZXctbGlzdCBibGlzdCkKCSAgICAoc2V0cSBi b29rbWFyay1hbGlzdC1tb2RpZmljYXRpb24tY291bnQKCQkgICgxKyBib29rbWFyay1hbGlzdC1t b2RpZmljYXRpb24tY291bnQpKSkKCSAgKGlmIChvciBkZWZhdWx0CgkJICAoc3RyaW5nPSBmaWxl IChvciAoY2FyIGJvb2ttYXJrLWJvb2ttYXJrcy10aW1lc3RhbXApCgkJCQkgICAgKGV4cGFuZC1m aWxlLW5hbWUgYm9va21hcmstZGVmYXVsdC1maWxlKSkpKQoJICAgICAgKHNldHEgYm9va21hcmst Ym9va21hcmtzLXRpbWVzdGFtcAoJCSAgICAoY29ucyBmaWxlIChudGggNSAoZmlsZS1hdHRyaWJ1 dGVzIGZpbGUpKSkpKQoJICAoYm9va21hcmstYm1lbnUtc3VycmVwdGl0aW91c2x5LXJlYnVpbGQt bGlzdCkKCSAgKHNldHEgYm9va21hcmstZmlsZS1jb2Rpbmctc3lzdGVtIGJ1ZmZlci1maWxlLWNv ZGluZy1zeXN0ZW0pKQoJKGtpbGwtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpKQogICAgICAodW5s ZXNzIG5vLW1zZwoJKHByb2dyZXNzLXJlcG9ydGVyLWRvbmUgcmVwb3J0ZXIpKSkpKQoKDAo7Ozsg Q29kZSBzdXBwb3J0aW5nIHRoZSBkaXJlZC1saWtlIGJvb2ttYXJrIGxpc3QuCjs7IFByZWZpeCBp cyAiYm9va21hcmstYm1lbnUiIGZvciAiYnVmZmVyLW1lbnUiOgoKKGRlZnZhciBib29rbWFyay1i bWVudS1oaWRkZW4tYm9va21hcmtzICgpKQoKKGRlZnZhci1rZXltYXAgYm9va21hcmstYm1lbnUt bW9kZS1tYXAKICA6ZG9jICJLZXltYXAgZm9yIGBib29rbWFyay1ibWVudS1tb2RlJy4iCiAgOnBh cmVudCB0YWJ1bGF0ZWQtbGlzdC1tb2RlLW1hcAogICJ2IiAjJ2Jvb2ttYXJrLWJtZW51LXNlbGVj dAogICJ3IiAjJ2Jvb2ttYXJrLWJtZW51LWxvY2F0ZQogICI1IiAjJ2Jvb2ttYXJrLWJtZW51LW90 aGVyLWZyYW1lCiAgIjIiICMnYm9va21hcmstYm1lbnUtMi13aW5kb3cKICAiMSIgIydib29rbWFy ay1ibWVudS0xLXdpbmRvdwogICJqIiAjJ2Jvb2ttYXJrLWJtZW51LXRoaXMtd2luZG93CiAgIkMt YyBDLWMiICMnYm9va21hcmstYm1lbnUtdGhpcy13aW5kb3cKICAiZiIgIydib29rbWFyay1ibWVu dS10aGlzLXdpbmRvdwogICJDLW0iICMnYm9va21hcmstYm1lbnUtdGhpcy13aW5kb3cKICAibyIg Iydib29rbWFyay1ibWVudS1vdGhlci13aW5kb3cKICAiQy1vIiAjJ2Jvb2ttYXJrLWJtZW51LXN3 aXRjaC1vdGhlci13aW5kb3cKICAicyIgIydib29rbWFyay1ibWVudS1zYXZlCiAgIkMteCBDLXMi ICMnYm9va21hcmstYm1lbnUtc2F2ZQogICJrIiAjJ2Jvb2ttYXJrLWJtZW51LWRlbGV0ZQogICJD LWQiICMnYm9va21hcmstYm1lbnUtZGVsZXRlLWJhY2t3YXJkcwogICJ4IiAjJ2Jvb2ttYXJrLWJt ZW51LWV4ZWN1dGUtZGVsZXRpb25zCiAgImQiICMnYm9va21hcmstYm1lbnUtZGVsZXRlCiAgIkQi ICMnYm9va21hcmstYm1lbnUtZGVsZXRlLWFsbAogICJTLVNQQyIgIydwcmV2aW91cy1saW5lCiAg IlNQQyIgIyduZXh0LWxpbmUKICAiREVMIiAjJ2Jvb2ttYXJrLWJtZW51LWJhY2t1cC11bm1hcmsK ICAidSIgIydib29rbWFyay1ibWVudS11bm1hcmsKICAiVSIgIydib29rbWFyay1ibWVudS11bm1h cmstYWxsCiAgIm0iICMnYm9va21hcmstYm1lbnUtbWFyawogICJNIiAjJ2Jvb2ttYXJrLWJtZW51 LW1hcmstYWxsCiAgImwiICMnYm9va21hcmstYm1lbnUtbG9hZAogICJyIiAjJ2Jvb2ttYXJrLWJt ZW51LXJlbmFtZQogICJSIiAjJ2Jvb2ttYXJrLWJtZW51LXJlbG9jYXRlCiAgInQiICMnYm9va21h cmstYm1lbnUtdG9nZ2xlLWZpbGVuYW1lcwogICJhIiAjJ2Jvb2ttYXJrLWJtZW51LXNob3ctYW5u b3RhdGlvbgogICJBIiAjJ2Jvb2ttYXJrLWJtZW51LXNob3ctYWxsLWFubm90YXRpb25zCiAgImUi ICMnYm9va21hcmstYm1lbnUtZWRpdC1hbm5vdGF0aW9uCiAgIi8iICMnYm9va21hcmstYm1lbnUt c2VhcmNoCiAgIjxtb3VzZS0yPiIgIydib29rbWFyay1ibWVudS1vdGhlci13aW5kb3ctd2l0aC1t b3VzZSkKCihlYXN5LW1lbnUtZGVmaW5lIGJvb2ttYXJrLW1lbnUgYm9va21hcmstYm1lbnUtbW9k ZS1tYXAKICAiTWVudSBmb3IgYGJvb2ttYXJrLWJtZW51Jy4iCiAgJygiQm9va21hcmsiCiAgICBb IlNlbGVjdCBCb29rbWFyayBpbiBUaGlzIFdpbmRvdyIgYm9va21hcmstYm1lbnUtdGhpcy13aW5k b3cgIHRdCiAgICBbIlNlbGVjdCBCb29rbWFyayBpbiBGdWxsLUZyYW1lIFdpbmRvdyIgYm9va21h cmstYm1lbnUtMS13aW5kb3cgIHRdCiAgICBbIlNlbGVjdCBCb29rbWFyayBpbiBPdGhlciBXaW5k b3ciIGJvb2ttYXJrLWJtZW51LW90aGVyLXdpbmRvdyAgdF0KICAgIFsiU2VsZWN0IEJvb2ttYXJr IGluIE90aGVyIEZyYW1lIiBib29rbWFyay1ibWVudS1vdGhlci1mcmFtZSAgdF0KICAgIFsiU2Vs ZWN0IE1hcmtlZCBCb29rbWFya3MiIGJvb2ttYXJrLWJtZW51LXNlbGVjdCB0XQogICAgIi0tLSIK ICAgIFsiTWFyayBCb29rbWFyayIgYm9va21hcmstYm1lbnUtbWFyayB0XQogICAgWyJNYXJrIGFs bCBCb29rbWFya3MiIGJvb2ttYXJrLWJtZW51LW1hcmstYWxsIHRdCiAgICBbIlVubWFyayBCb29r bWFyayIgYm9va21hcmstYm1lbnUtdW5tYXJrICB0XQogICAgWyJVbm1hcmsgQmFja3dhcmRzIiBi b29rbWFyay1ibWVudS1iYWNrdXAtdW5tYXJrICB0XQogICAgWyJVbm1hcmsgYWxsIEJvb2ttYXJr cyIgYm9va21hcmstYm1lbnUtdW5tYXJrLWFsbCAgdF0KICAgIFsiVG9nZ2xlIERpc3BsYXkgb2Yg RmlsZW5hbWVzIiBib29rbWFyay1ibWVudS10b2dnbGUtZmlsZW5hbWVzICB0XQogICAgWyJEaXNw bGF5IExvY2F0aW9uIG9mIEJvb2ttYXJrIiBib29rbWFyay1ibWVudS1sb2NhdGUgIHRdCiAgICAi LS0tIgogICAgKCJFZGl0IEJvb2ttYXJrcyIKICAgICBbIlJlbmFtZSBCb29rbWFyayIgYm9va21h cmstYm1lbnUtcmVuYW1lICB0XQogICAgIFsiUmVsb2NhdGUgQm9va21hcmsncyBGaWxlIiBib29r bWFyay1ibWVudS1yZWxvY2F0ZSAgdF0KICAgICBbIk1hcmsgQm9va21hcmsgZm9yIERlbGV0aW9u IiBib29rbWFyay1ibWVudS1kZWxldGUgIHRdCiAgICAgWyJNYXJrIGFsbCBCb29rbWFya3MgZm9y IERlbGV0aW9uIiBib29rbWFyay1ibWVudS1kZWxldGUtYWxsICB0XQogICAgIFsiRGVsZXRlIE1h cmtlZCBCb29rbWFya3MiIGJvb2ttYXJrLWJtZW51LWV4ZWN1dGUtZGVsZXRpb25zICB0XSkKICAg ICgiQW5ub3RhdGlvbnMiCiAgICAgWyJTaG93IEFubm90YXRpb24gZm9yIEN1cnJlbnQgQm9va21h cmsiIGJvb2ttYXJrLWJtZW51LXNob3ctYW5ub3RhdGlvbiAgdF0KICAgICBbIlNob3cgQW5ub3Rh dGlvbnMgZm9yIEFsbCBCb29rbWFya3MiIGJvb2ttYXJrLWJtZW51LXNob3ctYWxsLWFubm90YXRp b25zICB0XQogICAgIFsiRWRpdCBBbm5vdGF0aW9uIGZvciBDdXJyZW50IEJvb2ttYXJrLiIgIGJv b2ttYXJrLWJtZW51LWVkaXQtYW5ub3RhdGlvbiAgdF0pCiAgICAiLS0tIgogICAgWyJTYXZlIEJv b2ttYXJrcyIgYm9va21hcmstYm1lbnUtc2F2ZSAgdF0KICAgIFsiTG9hZCBCb29rbWFya3MiIGJv b2ttYXJrLWJtZW51LWxvYWQgIHRdKSkKCjs7IEJvb2ttYXJrIEJ1ZmZlciBNZW51IG1vZGUgaXMg c3VpdGFibGUgb25seSBmb3Igc3BlY2lhbGx5IGZvcm1hdHRlZAo7OyBkYXRhLgoocHV0ICdib29r bWFyay1ibWVudS1tb2RlICdtb2RlLWNsYXNzICdzcGVjaWFsKQoKCjs7IHRvZG86IG5lZWQgdG8g ZGlzcGxheSB3aGV0aGVyIG9yIG5vdCBib29rbWFyayBleGlzdHMgYXMgYSBidWZmZXIgaW4KOzsg ZmxhZyBjb2x1bW4uCgo7OyBGb3JtYXQ6Cjs7IEZMQUdTICBCT09LTUFSSyBbIExPQ0FUSU9OIF0K CgooZGVmdW4gYm9va21hcmstYm1lbnUtc3VycmVwdGl0aW91c2x5LXJlYnVpbGQtbGlzdCAoKQog ICJSZWJ1aWxkIHRoZSBCb29rbWFyayBMaXN0IGlmIGl0IGV4aXN0cy4KRG9uJ3QgYWZmZWN0IHRo ZSBidWZmZXIgcmluZyBvcmRlci4iCiAgKGlmIChnZXQtYnVmZmVyIGJvb2ttYXJrLWJtZW51LWJ1 ZmZlcikKICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgKHNhdmUtd2luZG93LWV4Y3Vyc2lv bgogICAgICAgICAgKGJvb2ttYXJrLWJtZW51LWxpc3QpKSkpKQoKKGRlZnVuIGJvb2ttYXJrLWJt ZW51LS1yZXZlcnQgKCkKICAiUmUtcG9wdWxhdGUgYHRhYnVsYXRlZC1saXN0LWVudHJpZXMnLiIK ICAobGV0IChlbnRyaWVzKQogICAgKGRvbGlzdCAoZnVsbC1yZWNvcmQgKGJvb2ttYXJrLW1heWJl LXNvcnQtYWxpc3QpKQogICAgICAobGV0KiAoKG5hbWUgICAgICAgKGJvb2ttYXJrLW5hbWUtZnJv bS1mdWxsLXJlY29yZCBmdWxsLXJlY29yZCkpCiAgICAgICAgICAgICAodHlwZSAgICAgICAoYm9v a21hcmstdHlwZS1mcm9tLWZ1bGwtcmVjb3JkIGZ1bGwtcmVjb3JkKSkKICAgICAgICAgICAgIChh bm5vdGF0aW9uIChib29rbWFyay1nZXQtYW5ub3RhdGlvbiBmdWxsLXJlY29yZCkpCiAgICAgICAg ICAgICAobG9jYXRpb24gICAoYm9va21hcmstbG9jYXRpb24gZnVsbC1yZWNvcmQpKSkKICAgICAg ICAocHVzaCAobGlzdAogICAgICAgICAgICAgICBmdWxsLXJlY29yZAogICAgICAgICAgICAgICBg WywoaWYgKGFuZCBhbm5vdGF0aW9uIChub3QgKHN0cmluZy1lcXVhbCBhbm5vdGF0aW9uICIiKSkp CiAgICAgICAgICAgICAgICAgICAgICAiKiIgIiIpCiAgICAgICAgICAgICAgICAgLChpZiAoZGlz cGxheS1tb3VzZS1wKQogICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgbmFtZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtbG9jay1mYWNlICdib29rbWFyay1t ZW51LWJvb2ttYXJrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW91c2UtZmFj ZSAnaGlnaGxpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9sbG93LWxp bmsgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlbHAtZWNobyAibW91c2Ut MjogZ28gdG8gdGhpcyBib29rbWFyayBpbiBvdGhlciB3aW5kb3ciKQogICAgICAgICAgICAgICAg ICAgIG5hbWUpCiAgICAgICAgICAgICAgICAgLChvciB0eXBlICIiKQogICAgICAgICAgICAgICAg ICxAKGlmIGJvb2ttYXJrLWJtZW51LXRvZ2dsZS1maWxlbmFtZXMKICAgICAgICAgICAgICAgICAg ICAgICAobGlzdCBsb2NhdGlvbikpXSkKICAgICAgICAgICAgICBlbnRyaWVzKSkpCiAgICA7OyBU aGUgdmFsdWUgb2YgYGJvb2ttYXJrLXNvcnQtZmxhZycgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNl IHRoZQogICAgOzsgbGFzdCB0aW1lIHRoZSBidWZmZXIgY29udGVudHMgd2VyZSBnZW5lcmF0ZWQs IHNvIHJlLWNoZWNrIGl0LgogICAgKGNvbmQgKChlcSBib29rbWFyay1zb3J0LWZsYWcgdCkKICAg ICAgICAgICAoc2V0cSB0YWJ1bGF0ZWQtbGlzdC1zb3J0LWtleSAnKCJCb29rbWFyayBOYW1lIiAu IG5pbCkKICAgICAgICAgICAgICAgICB0YWJ1bGF0ZWQtbGlzdC1lbnRyaWVzIGVudHJpZXMpKQog ICAgICAgICAgKChvciAobnVsbCBib29rbWFyay1zb3J0LWZsYWcpCiAgICAgICAgICAgICAgIChl cSBib29rbWFyay1zb3J0LWZsYWcgJ2xhc3QtbW9kaWZpZWQpKQogICAgICAgICAgIChzZXRxIHRh YnVsYXRlZC1saXN0LXNvcnQta2V5IG5pbCkKICAgICAgICAgICA7OyBBbmQgc2luY2Ugd2UncmUg bm90IHNvcnRpbmcgYnkgYm9va21hcmsgbmFtZSwgc2hvdyBib29rbWFya3MKICAgICAgICAgICA7 OyBhY2NvcmRpbmcgdG8gb3JkZXIgb2YgY3JlYXRpb24sIHdpdGggdGhlIG1vc3QgcmVjZW50bHkK ICAgICAgICAgICA7OyBjcmVhdGVkIGJvb2ttYXJrcyBhdCB0aGUgdG9wIGFuZCB0aGUgbGVhc3Qg cmVjZW50bHkgY3JlYXRlZAogICAgICAgICAgIDs7IGF0IHRoZSBib3R0b20uCiAgICAgICAgICAg OzsKICAgICAgICAgICA7OyBOb3RlIHRoYXQgY2xpY2tpbmcgdGhlIGNvbHVtbiBzb3J0IHRvZ2ds ZSBmb3IgdGhlIGJvb2ttYXJrCiAgICAgICAgICAgOzsgbmFtZSBjb2x1bW4gd2lsbCBpbnZva2Ug dGhlIGB0YWJ1bGF0ZWQtbGlzdC1tb2RlJyBzb3J0LCB3aGljaAogICAgICAgICAgIDs7IHVzZXMg YGJvb2ttYXJrLWJtZW51LS1uYW1lLXByZWRpY2F0ZScgdG8gc29ydCBsZXhpY2FsbHkgYnkKICAg ICAgICAgICA7OyBib29rbWFyayBuYW1lIGluc3RlYWQgb2YgYnkgKHJldmVyc2UpIGNyZWF0aW9u IG9yZGVyLgogICAgICAgICAgIDs7IENsaWNraW5nIHRoZSB0b2dnbGUgYWdhaW4gd2lsbCByZXZl cnNlIHRoZSBsZXhpY2FsIHNvcnQsIGJ1dAogICAgICAgICAgIDs7IHRoZSBzb3J0IHdpbGwgc3Rp bGwgYmUgbGV4aWNhbCBub3QgY3JlYXRpb24tb3JkZXIuICBIb3dldmVyLAogICAgICAgICAgIDs7 IGlmIHRoZSB1c2VyIHJldmVydHMgdGhlIGJ1ZmZlciwgdGhlbiB0aGUgYWJvdmUgY2hlY2sgb2YK ICAgICAgICAgICA7OyBgYm9va21hcmstc29ydC1mbGFnJyB3aWxsIGhhcHBlbiBhZ2FpbiBhbmQg dGhlIGJ1ZmZlciB3aWxsCiAgICAgICAgICAgOzsgZ28gYmFjayB0byBhIGNyZWF0aW9uLW9yZGVy IHNvcnQuICBUaGlzIGlzIGFsbCBleHBlY3RlZAogICAgICAgICAgIDs7IGJlaGF2aW9yLCBhcyBk b2N1bWVudGVkIGluIGBib29rbWFyay1ibWVudS1tb2RlJy4KICAgICAgICAgICAoc2V0cSB0YWJ1 bGF0ZWQtbGlzdC1lbnRyaWVzIChyZXZlcnNlIGVudHJpZXMpKSkpCiAgICA7OyBHZW5lcmF0ZSB0 aGUgaGVhZGVyIG9ubHkgYWZ0ZXIgYHRhYnVsYXRlZC1saXN0LXNvcnQta2V5JyBpcwogICAgOzsg c2V0dGxlZCwgYmVjYXVzZSBpZiB0aGF0J3Mgbm9uLW5pbCB0aGVuIHRoZSBzb3J0LWRpcmVjdGlv bgogICAgOzsgaW5kaWNhdG9yIHdpbGwgYmUgc2hvd24gaW4gdGhlIG5hbWVkIGNvbHVtbiwgYnV0 IGlmIGl0J3MKICAgIDs7IG5pbCB0aGVuIHRoZSBpbmRpY2F0b3Igd2lsbCBub3QgYmUgc2hvd24u CiAgICAodGFidWxhdGVkLWxpc3QtaW5pdC1oZWFkZXIpKQogICh0YWJ1bGF0ZWQtbGlzdC1wcmlu dCB0KSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBib29rbWFyay1ibWVudS1nZXQtYnVmZmVyICgp CiAgIlJldHVybiB0aGUgQm9va21hcmsgTGlzdCwgYnVpbGRpbmcgaXQgaWYgaXQgZG9lc24ndCBl eGlzdHMuCkRvbid0IGFmZmVjdCB0aGUgYnVmZmVyIHJpbmcgb3JkZXIuIgogIChvciAoZ2V0LWJ1 ZmZlciBib29rbWFyay1ibWVudS1idWZmZXIpCiAgICAgIChzYXZlLWV4Y3Vyc2lvbgoJKHNhdmUt d2luZG93LWV4Y3Vyc2lvbgoJICAoYm9va21hcmstYm1lbnUtbGlzdCkKCSAgKGdldC1idWZmZXIg Ym9va21hcmstYm1lbnUtYnVmZmVyKSkpKSkKCihjdXN0b20tYWRkLWNob2ljZSAndGFiLWJhci1u ZXctdGFiLWNob2ljZQogICAgICAgICAgICAgICAgICAgJyhjb25zdCA6dGFnICJCb29rbWFyayBM aXN0IiBib29rbWFyay1ibWVudS1nZXQtYnVmZmVyKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBi b29rbWFyay1ibWVudS1saXN0ICgpCiAgIkRpc3BsYXkgYSBsaXN0IG9mIGV4aXN0aW5nIGJvb2tt YXJrcy4KVGhlIGxpc3QgaXMgZGlzcGxheWVkIGluIGEgYnVmZmVyIG5hbWVkIGAqQm9va21hcmsg TGlzdConLgpUaGUgbGVmdG1vc3QgY29sdW1uIGRpc3BsYXlzIGEgRCBpZiB0aGUgYm9va21hcmsg aXMgZmxhZ2dlZCBmb3IKZGVsZXRpb24sIG9yID4gaWYgaXQgaXMgZmxhZ2dlZCBmb3IgZGlzcGxh eWluZy4iCiAgKGludGVyYWN0aXZlKQogIChib29rbWFyay1tYXliZS1sb2FkLWRlZmF1bHQtZmls ZSkKICAobGV0ICgoYnVmIChnZXQtYnVmZmVyLWNyZWF0ZSBib29rbWFyay1ibWVudS1idWZmZXIp KSkKICAgIChpZiAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnaW50ZXJhY3RpdmUpCiAgICAgICAg KHN3aXRjaC10by1idWZmZXIgYnVmKQogICAgICAoc2V0LWJ1ZmZlciBidWYpKSkKICAoYm9va21h cmstYm1lbnUtbW9kZSkKICAoYm9va21hcmstYm1lbnUtLXJldmVydCkpCgo7OzsjIyNhdXRvbG9h ZAooZGVmYWxpYXMgJ2xpc3QtYm9va21hcmtzICdib29rbWFyay1ibWVudS1saXN0KQo7OzsjIyNh dXRvbG9hZAooZGVmYWxpYXMgJ2VkaXQtYm9va21hcmtzICdib29rbWFyay1ibWVudS1saXN0KQoK KGRlZmluZS1vYnNvbGV0ZS1mdW5jdGlvbi1hbGlhcyAnYm9va21hcmstYm1lbnUtc2V0LWhlYWRl cgogICMndGFidWxhdGVkLWxpc3QtaW5pdC1oZWFkZXIgIjI4LjEiKQoKKGRlZmluZS1kZXJpdmVk LW1vZGUgYm9va21hcmstYm1lbnUtbW9kZSB0YWJ1bGF0ZWQtbGlzdC1tb2RlICJCb29rbWFyayBN ZW51IgogICJNYWpvciBtb2RlIGZvciBlZGl0aW5nIGEgbGlzdCBvZiBib29rbWFya3MuCkVhY2gg bGluZSBkZXNjcmliZXMgb25lIG9mIHRoZSBib29rbWFya3MgaW4gRW1hY3MuCkxldHRlcnMgZG8g bm90IGluc2VydCB0aGVtc2VsdmVzOyBpbnN0ZWFkLCB0aGV5IGFyZSBjb21tYW5kcy4KQm9va21h cmsgbmFtZXMgcHJlY2VkZWQgYnkgYSBcIipcIiBoYXZlIGFubm90YXRpb25zLgoKSWYgYGJvb2tt YXJrLXNvcnQtZmxhZycgaXMgbm9uLW5pbCwgdGhlbiBzb3J0IHRoZSBsaXN0IGJ5CmJvb2ttYXJr IG5hbWUgKGNhc2UtaW5zZW5zaXRpdmVseSwgaW4gY29sbGF0aW9uIG9yZGVyKTsgdGhlCmRpcmVj dGlvbiBvZiB0aGF0IHNvcnQgY2FuIGJlIHJldmVyc2VkIGJ5IHVzaW5nIHRoZSBjb2x1bW4gc29y dAp0b2dnbGUgZm9yIHRoZSBib29rbWFyayBuYW1lIGNvbHVtbi4KCklmIGBib29rbWFyay1zb3J0 LWZsYWcnIGlzIG5pbCwgdGhlbiBzb3J0IHRoZSBsaXN0IGJ5IGJvb2ttYXJrCmNyZWF0aW9uIG9y ZGVyLCB3aXRoIG1vc3QgcmVjZW50bHkgY3JlYXRlZCBib29rbWFya3Mgb24gdG9wLgpIb3dldmVy LCB0aGUgY29sdW1uIHNvcnQgdG9nZ2xlIHdpbGwgc3RpbGwgYWN0aXZhdGUgKGFuZAp0aGVyZWFm dGVyIHRvZ2dsZSB0aGUgZGlyZWN0aW9uIG9mKSBsZXhpY2FsIHNvcnRpbmcgYnkgYm9va21hcmsg bmFtZS4KQXQgYW55IHRpbWUgeW91IG1heSB1c2UgXFxbcmV2ZXJ0LWJ1ZmZlcl0gdG8gZ28gYmFj ayB0byBzb3J0aW5nIGJ5IGNyZWF0aW9uIG9yZGVyLgoKXFw8Ym9va21hcmstYm1lbnUtbW9kZS1t YXA+ClxcW2Jvb2ttYXJrLWJtZW51LW1hcmtdIC0tIG1hcmsgYm9va21hcmsgdG8gYmUgZGlzcGxh eWVkLgpcXFtib29rbWFyay1ibWVudS1tYXJrLWFsbF0gLS0gbWFyayBhbGwgbGlzdGVkIGJvb2tt YXJrcyB0byBiZSBkaXNwbGF5ZWQuClxcW2Jvb2ttYXJrLWJtZW51LXNlbGVjdF0gLS0gc2VsZWN0 IGJvb2ttYXJrIG9mIGxpbmUgcG9pbnQgaXMgb24uCiAgQWxzbyBzaG93IGJvb2ttYXJrcyBtYXJr ZWQgdXNpbmcgbSBpbiBvdGhlciB3aW5kb3dzLgpcXFtib29rbWFyay1ibWVudS10b2dnbGUtZmls ZW5hbWVzXSAtLSB0b2dnbGUgZGlzcGxheWluZyBvZiBmaWxlbmFtZXMgKHRoZXkgbWF5IG9ic2N1 cmUgbG9uZyBib29rbWFyayBuYW1lcykuClxcW2Jvb2ttYXJrLWJtZW51LWxvY2F0ZV0gLS0gZGlz cGxheSAoaW4gbWluaWJ1ZmZlcikgbG9jYXRpb24gb2YgdGhpcyBib29rbWFyay4KXFxbYm9va21h cmstYm1lbnUtMS13aW5kb3ddIC0tIHNlbGVjdCB0aGlzIGJvb2ttYXJrIGluIGZ1bGwtZnJhbWUg d2luZG93LgpcXFtib29rbWFyay1ibWVudS0yLXdpbmRvd10gLS0gc2VsZWN0IHRoaXMgYm9va21h cmsgaW4gb25lIHdpbmRvdywKICB0b2dldGhlciB3aXRoIGJvb2ttYXJrIHNlbGVjdGVkIGJlZm9y ZSB0aGlzIG9uZSBpbiBhbm90aGVyIHdpbmRvdy4KXFxbYm9va21hcmstYm1lbnUtdGhpcy13aW5k b3ddIC0tIHNlbGVjdCB0aGlzIGJvb2ttYXJrIGluIHBsYWNlIG9mIHRoZSBib29rbWFyayBtZW51 IGJ1ZmZlci4KXFxbYm9va21hcmstYm1lbnUtb3RoZXItd2luZG93XSAtLSBzZWxlY3QgdGhpcyBi b29rbWFyayBpbiBhbm90aGVyIHdpbmRvdywKICBzbyB0aGUgYm9va21hcmsgbWVudSBib29rbWFy ayByZW1haW5zIHZpc2libGUgaW4gaXRzIHdpbmRvdy4KXFxbYm9va21hcmstYm1lbnUtb3RoZXIt ZnJhbWVdIC0tIHNlbGVjdCB0aGlzIGJvb2ttYXJrIGluIGFub3RoZXIgZnJhbWUuClxcW2Jvb2tt YXJrLWJtZW51LXN3aXRjaC1vdGhlci13aW5kb3ddIC0tIHN3aXRjaCB0aGUgb3RoZXIgd2luZG93 IHRvIHRoaXMgYm9va21hcmsuClxcW2Jvb2ttYXJrLWJtZW51LXJlbmFtZV0gLS0gcmVuYW1lIHRo aXMgYm9va21hcmsgKHByb21wdHMgZm9yIG5ldyBuYW1lKS4KXFxbYm9va21hcmstYm1lbnUtcmVs b2NhdGVdIC0tIHJlbG9jYXRlIHRoaXMgYm9va21hcmsncyBmaWxlIChwcm9tcHRzIGZvciBuZXcg ZmlsZSkuClxcW2Jvb2ttYXJrLWJtZW51LWRlbGV0ZV0gLS0gbWFyayB0aGlzIGJvb2ttYXJrIHRv IGJlIGRlbGV0ZWQsIGFuZCBtb3ZlIGRvd24uClxcW2Jvb2ttYXJrLWJtZW51LWRlbGV0ZS1iYWNr d2FyZHNdIC0tIG1hcmsgdGhpcyBib29rbWFyayB0byBiZSBkZWxldGVkLCBhbmQgbW92ZSB1cC4K XFxbYm9va21hcmstYm1lbnUtZGVsZXRlLWFsbF0gLS0gbWFyayBhbGwgbGlzdGVkIGJvb2ttYXJr cyBhcyB0byBiZSBkZWxldGVkLgpcXFtib29rbWFyay1ibWVudS1leGVjdXRlLWRlbGV0aW9uc10g LS0gZGVsZXRlIGJvb2ttYXJrcyBtYXJrZWQgd2l0aCBgXFxbYm9va21hcmstYm1lbnUtZGVsZXRl XScgb3IgYFxcW2Jvb2ttYXJrLWJtZW51LWRlbGV0ZS1hbGxdJy4KXFxbYm9va21hcmstYm1lbnUt c2F2ZV0gLS0gc2F2ZSB0aGUgY3VycmVudCBib29rbWFyayBsaXN0IGluIHRoZSBkZWZhdWx0IGZp bGUuCiAgV2l0aCBhIHByZWZpeCBhcmcsIHByb21wdHMgZm9yIGEgZmlsZSB0byBzYXZlIGluLgpc XFtib29rbWFyay1ibWVudS1sb2FkXSAtLSBsb2FkIGluIGEgZmlsZSBvZiBib29rbWFya3MgKHBy b21wdHMgZm9yIGZpbGUuKQpcXFtib29rbWFyay1ibWVudS11bm1hcmtdIC0tIHJlbW92ZSBhbGwg a2luZHMgb2YgbWFya3MgZnJvbSBjdXJyZW50IGxpbmUuCiAgV2l0aCBwcmVmaXggYXJndW1lbnQs IGFsc28gbW92ZSB1cCBvbmUgbGluZS4KXFxbYm9va21hcmstYm1lbnUtYmFja3VwLXVubWFya10g LS0gYmFjayB1cCBhIGxpbmUgYW5kIHJlbW92ZSBtYXJrcy4KXFxbYm9va21hcmstYm1lbnUtdW5t YXJrLWFsbF0gLS0gcmVtb3ZlIGFsbCBraW5kcyBvZiBtYXJrcyBmcm9tIGFsbCBsaXN0ZWQgYm9v a21hcmtzLgpcXFtib29rbWFyay1ibWVudS1zaG93LWFubm90YXRpb25dIC0tIHNob3cgdGhlIGFu bm90YXRpb24sIGlmIGl0IGV4aXN0cywgZm9yIHRoZSBjdXJyZW50IGJvb2ttYXJrCiAgaW4gYW5v dGhlciBidWZmZXIuClxcW2Jvb2ttYXJrLWJtZW51LXNob3ctYWxsLWFubm90YXRpb25zXSAtLSBz aG93IHRoZSBhbm5vdGF0aW9ucyBvZiBhbGwgYm9va21hcmtzIGluIGFub3RoZXIgYnVmZmVyLgpc XFtib29rbWFyay1ibWVudS1lZGl0LWFubm90YXRpb25dIC0tIGVkaXQgdGhlIGFubm90YXRpb24g Zm9yIHRoZSBjdXJyZW50IGJvb2ttYXJrLgpcXFtib29rbWFyay1ibWVudS1zZWFyY2hdIC0tIGlu Y3JlbWVudGFsbHkgc2VhcmNoIGZvciBib29rbWFya3MuClxcW3JldmVydC1idWZmZXJdIC0tIHJl ZnJlc2ggdGhlIGJ1ZmZlciwgYW5kIHRodXMgcmVmcmVzaCB0aGUgc29ydCBvcmRlciAodXNlZnVs CiAgaWYgYGJvb2ttYXJrLXNvcnQtZmxhZycgaXMgbmlsKS4iCiAgKHNldHEgdHJ1bmNhdGUtbGlu ZXMgdCkKICAoc2V0cSBidWZmZXItcmVhZC1vbmx5IHQpCiAgOzsgRklYTUU6IFRoZSBoZWFkZXIg Y291bGQgYWxzbyBkaXNwbGF5IHRoZSBjdXJyZW50IGRlZmF1bHQgYm9va21hcmsgZmlsZQogIDs7 IGFjY29yZGluZyB0byBgYm9va21hcmstYm9va21hcmtzLXRpbWVzdGFtcCcuCiAgKHNldHEgdGFi dWxhdGVkLWxpc3QtZm9ybWF0CiAgICAgICAgYFsoIiIgMSkgOzsgU3BhY2UgdG8gYWRkICIqIiBm b3IgYm9va21hcmsgd2l0aCBhbm5vdGF0aW9uCiAgICAgICAgICAoIkJvb2ttYXJrIE5hbWUiCiAg ICAgICAgICAgLGJvb2ttYXJrLWJtZW51LWZpbGUtY29sdW1uIGJvb2ttYXJrLWJtZW51LS1uYW1l LXByZWRpY2F0ZSkKICAgICAgICAgICgiVHlwZSIgOCBib29rbWFyay1ibWVudS0tdHlwZS1wcmVk aWNhdGUpCiAgICAgICAgICAsQChpZiBib29rbWFyay1ibWVudS10b2dnbGUtZmlsZW5hbWVzCiAg ICAgICAgICAgICAgICAnKCgiRmlsZSIgMCBib29rbWFyay1ibWVudS0tZmlsZS1wcmVkaWNhdGUp KSldKQogIChzZXRxIHRhYnVsYXRlZC1saXN0LXBhZGRpbmcgYm9va21hcmstYm1lbnUtbWFya3Mt d2lkdGgpCiAgKHdoZW4gKGFuZCBib29rbWFyay1zb3J0LWZsYWcKICAgICAgICAgICAgIChub3Qg KGVxIGJvb2ttYXJrLXNvcnQtZmxhZyAnbGFzdC1tb2RpZmllZCkpKQogICAgKHNldHEgdGFidWxh dGVkLWxpc3Qtc29ydC1rZXkgJygiQm9va21hcmsgTmFtZSIgLiBuaWwpKSkKICAoYWRkLWhvb2sg J3RhYnVsYXRlZC1saXN0LXJldmVydC1ob29rICMnYm9va21hcmstYm1lbnUtLXJldmVydCBuaWwg dCknCiAgKHNldHEgcmV2ZXJ0LWJ1ZmZlci1mdW5jdGlvbiAnYm9va21hcmstYm1lbnUtLXJldmVy dCkKICAodGFidWxhdGVkLWxpc3QtaW5pdC1oZWFkZXIpKQoKCihkZWZ1biBib29rbWFyay1ibWVu dS0tbmFtZS1wcmVkaWNhdGUgKGEgYikKICAiUHJlZGljYXRlIHRvIHNvcnQgXCIqQm9va21hcmsg TGlzdCpcIiBidWZmZXIgYnkgdGhlIG5hbWUgY29sdW1uLgpUaGlzIGlzIHVzZWQgZm9yIGB0YWJ1 bGF0ZWQtbGlzdC1mb3JtYXQnIGluIGBib29rbWFyay1ibWVudS1tb2RlJy4iCiAgKHN0cmluZy1j b2xsYXRlLWxlc3NwIChjYWFyIGEpIChjYWFyIGIpIG5pbCB0KSkKCihkZWZ1biBib29rbWFyay1i bWVudS0tdHlwZS1wcmVkaWNhdGUgKGEgYikKICAiUHJlZGljYXRlIHRvIHNvcnQgXCIqQm9va21h cmsgTGlzdCpcIiBidWZmZXIgYnkgdGhlIHR5cGUgY29sdW1uLgpUaGlzIGlzIHVzZWQgZm9yIGB0 YWJ1bGF0ZWQtbGlzdC1mb3JtYXQnIGluIGBib29rbWFyay1ibWVudS1tb2RlJy4iCiAgKHN0cmlu Zy1jb2xsYXRlLWxlc3NwIChlbHQgKGNhZHIgYSkgMikgKGVsdCAoY2FkciBiKSAyKSBuaWwgdCkp CgooZGVmdW4gYm9va21hcmstYm1lbnUtLWZpbGUtcHJlZGljYXRlIChhIGIpCiAgIlByZWRpY2F0 ZSB0byBzb3J0IFwiKkJvb2ttYXJrIExpc3QqXCIgYnVmZmVyIGJ5IHRoZSBmaWxlIGNvbHVtbi4K VGhpcyBpcyB1c2VkIGZvciBgdGFidWxhdGVkLWxpc3QtZm9ybWF0JyBpbiBgYm9va21hcmstYm1l bnUtbW9kZScuIgogIChzdHJpbmctY29sbGF0ZS1sZXNzcCAoYm9va21hcmstbG9jYXRpb24gKGNh ciBhKSkKICAgICAgICAgICAgICAgICAgICAgICAgKGJvb2ttYXJrLWxvY2F0aW9uIChjYXIgYikp CiAgICAgICAgICAgICAgICAgICAgICAgIG5pbCB0KSkKCgooZGVmdW4gYm9va21hcmstYm1lbnUt dG9nZ2xlLWZpbGVuYW1lcyAoJm9wdGlvbmFsIHNob3cpCiAgIlRvZ2dsZSB3aGV0aGVyIGZpbGVu YW1lcyBhcmUgc2hvd24gaW4gdGhlIGJvb2ttYXJrIGxpc3QuCk9wdGlvbmFsIGFyZ3VtZW50IFNI T1cgbWVhbnMgc2hvdyB0aGVtIHVuY29uZGl0aW9uYWxseS4iCiAgKGludGVyYWN0aXZlIG5pbCBi b29rbWFyay1ibWVudS1tb2RlKQogIChjb25kCiAgIChzaG93CiAgICAoc2V0cSBib29rbWFyay1i bWVudS10b2dnbGUtZmlsZW5hbWVzIHQpKQogICAoYm9va21hcmstYm1lbnUtdG9nZ2xlLWZpbGVu YW1lcwogICAgKHNldHEgYm9va21hcmstYm1lbnUtdG9nZ2xlLWZpbGVuYW1lcyBuaWwpKQogICAo dAogICAgKHNldHEgYm9va21hcmstYm1lbnUtdG9nZ2xlLWZpbGVuYW1lcyB0KSkpCiAgKGJvb2tt YXJrLWJtZW51LXN1cnJlcHRpdGlvdXNseS1yZWJ1aWxkLWxpc3QpKQoKCihkZWZ1biBib29rbWFy ay1ibWVudS1zaG93LWZpbGVuYW1lcyAoJm9wdGlvbmFsIF8pCiAgIkluIGFuIGludGVyYWN0aXZl IGJvb2ttYXJrIGxpc3QsIHNob3cgZmlsZW5hbWVzIGFsb25nIHdpdGggYm9va21hcmtzLiIKICAo c2V0cSBib29rbWFyay1ibWVudS10b2dnbGUtZmlsZW5hbWVzIHQpCiAgKGJvb2ttYXJrLWJtZW51 LXN1cnJlcHRpdGlvdXNseS1yZWJ1aWxkLWxpc3QpKQoKCihkZWZ1biBib29rbWFyay1ibWVudS1o aWRlLWZpbGVuYW1lcyAoJm9wdGlvbmFsIF8pCiAgIkluIGFuIGludGVyYWN0aXZlIGJvb2ttYXJr IGxpc3QsIGhpZGUgdGhlIGZpbGVuYW1lcyBvZiB0aGUgYm9va21hcmtzLiIKICAoc2V0cSBib29r bWFyay1ibWVudS10b2dnbGUtZmlsZW5hbWVzIG5pbCkKICAoYm9va21hcmstYm1lbnUtc3VycmVw dGl0aW91c2x5LXJlYnVpbGQtbGlzdCkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LWVuc3VyZS1w b3NpdGlvbiAoKQogICJJZiBwb2ludCBpcyBub3Qgb24gYSBib29rbWFyayBsaW5lLCBtb3ZlIGl0 IHRvIG9uZS4KSWYgYWZ0ZXIgdGhlIGxhc3QgZnVsbCBsaW5lLCBtb3ZlIHRvIHRoZSBsYXN0IGZ1 bGwgbGluZS4gIFRoZQpyZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkLiIKICAoY29uZCAoKGFuZCAo Ym9scCkgKGVvYnApKQogICAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMCkpKSkKCgooZGVmdW4g Ym9va21hcmstYm1lbnUtYm9va21hcmsgKCkKICAiUmV0dXJuIHRoZSBib29rbWFyayBmb3IgdGhp cyBsaW5lIGluIGFuIGludGVyYWN0aXZlIGJvb2ttYXJrIGxpc3QgYnVmZmVyLiIKICAoYm9va21h cmstYm1lbnUtZW5zdXJlLXBvc2l0aW9uKQogIChsZXQqICgoaWQgKHRhYnVsYXRlZC1saXN0LWdl dC1pZCkpCiAgICAgICAgIChlbnRyeSAoYW5kIGlkIChhc3NvYyBpZCB0YWJ1bGF0ZWQtbGlzdC1l bnRyaWVzKSkpKQogICAgKGlmIGVudHJ5CiAgICAgICAgKGNhYXIgZW50cnkpCiAgICAgICIiKSkp CgoKKGRlZnVuIGJvb2ttYXJrLXNob3ctYW5ub3RhdGlvbiAoYm9va21hcmstbmFtZS1vci1yZWNv cmQpCiAgIkRpc3BsYXkgdGhlIGFubm90YXRpb24gZm9yIEJPT0tNQVJLLU5BTUUtT1ItUkVDT1JE IGluIGEgYnVmZmVyLgpJZiB0aGUgYW5ub3RhdGlvbiBkb2VzIG5vdCBleGlzdCwgZG8gbm90aGlu Zy4iCiAgKGxldCAoKGFubm90YXRpb24gKGJvb2ttYXJrLWdldC1hbm5vdGF0aW9uIGJvb2ttYXJr LW5hbWUtb3ItcmVjb3JkKSkpCiAgICAod2hlbiAoYW5kIGFubm90YXRpb24gKG5vdCAoc3RyaW5n LWVxdWFsIGFubm90YXRpb24gIiIpKSkKICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgKGxl dCAoKG9sZC1idWYgKGN1cnJlbnQtYnVmZmVyKSkpCiAgICAgICAgICAocG9wLXRvLWJ1ZmZlciAo Z2V0LWJ1ZmZlci1jcmVhdGUgIipCb29rbWFyayBBbm5vdGF0aW9uKiIpIHQpCiAgICAgICAgICAo bGV0IChidWZmZXItcmVhZC1vbmx5KQogICAgICAgICAgICAoZXJhc2UtYnVmZmVyKQogICAgICAg ICAgICAoaW5zZXJ0IGFubm90YXRpb24pCiAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1p bikpCiAgICAgICAgICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbmlsKSkKICAgICAgICAgIChz ZXRxIGJ1ZmZlci1yZWFkLW9ubHkgdCkKICAgICAgICAgIChzd2l0Y2gtdG8tYnVmZmVyLW90aGVy LXdpbmRvdyBvbGQtYnVmKSkpKSkpCgoKKGRlZnVuIGJvb2ttYXJrLXNob3ctYWxsLWFubm90YXRp b25zICgpCiAgIkRpc3BsYXkgdGhlIGFubm90YXRpb25zIGZvciBhbGwgYm9va21hcmtzIGluIGEg YnVmZmVyLiIKICAoc2F2ZS1zZWxlY3RlZC13aW5kb3cKICAgIChwb3AtdG8tYnVmZmVyIChnZXQt YnVmZmVyLWNyZWF0ZSAiKkJvb2ttYXJrIEFubm90YXRpb24qIikgdCkKICAgIChsZXQgKGJ1ZmZl ci1yZWFkLW9ubHkpCiAgICAgIChlcmFzZS1idWZmZXIpCiAgICAgIChkb2xpc3QgKGZ1bGwtcmVj b3JkIChib29rbWFyay1tYXliZS1zb3J0LWFsaXN0KSkKICAgICAgICAobGV0KiAoKG5hbWUgKGJv b2ttYXJrLW5hbWUtZnJvbS1mdWxsLXJlY29yZCBmdWxsLXJlY29yZCkpCiAgICAgICAgICAgICAg IChhbm4gIChib29rbWFyay1nZXQtYW5ub3RhdGlvbiBmdWxsLXJlY29yZCkpKQogICAgICAgICAg KGluc2VydCAoY29uY2F0IG5hbWUgIjpcbiIpKQogICAgICAgICAgKGlmIChhbmQgYW5uIChub3Qg KHN0cmluZy1lcXVhbCBhbm4gIiIpKSkKICAgICAgICAgICAgICA7OyBpbnNlcnQgdGhlIGFubm90 YXRpb24sIGluZGVudGVkIGJ5IDQgc3BhY2VzLgogICAgICAgICAgICAgIChwcm9nbgogICAgICAg ICAgICAgICAgKHNhdmUtZXhjdXJzaW9uIChpbnNlcnQgYW5uKSAodW5sZXNzIChib2xwKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnNlcnQgIlxuIikp KQogICAgICAgICAgICAgICAgKHdoaWxlICg8IChwb2ludCkgKHBvaW50LW1heCkpCiAgICAgICAg ICAgICAgICAgIChiZWdpbm5pbmctb2YtbGluZSkgICAgIDsgcGFyYW5vaWEKICAgICAgICAgICAg ICAgICAgKGluc2VydCAiICAgICIpCiAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUpCiAg ICAgICAgICAgICAgICAgIChlbmQtb2YtbGluZSkpKSkpKQogICAgICAoZ290by1jaGFyIChwb2lu dC1taW4pKQogICAgICAoc2V0LWJ1ZmZlci1tb2RpZmllZC1wIG5pbCkpCiAgICAoc2V0cSBidWZm ZXItcmVhZC1vbmx5IHQpKSkKCgooZGVmdW4gYm9va21hcmstYm1lbnUtbWFyayAoKQogICJNYXJr IGJvb2ttYXJrIG9uIHRoaXMgbGluZSB0byBiZSBkaXNwbGF5ZWQgYnkgXFw8Ym9va21hcmstYm1l bnUtbW9kZS1tYXA+XFxbYm9va21hcmstYm1lbnUtc2VsZWN0XS4iCiAgKGludGVyYWN0aXZlIG5p bCBib29rbWFyay1ibWVudS1tb2RlKQogIChib29rbWFyay1ibWVudS1lbnN1cmUtcG9zaXRpb24p CiAgKHRhYnVsYXRlZC1saXN0LXB1dC10YWcgIj4iIHQpKQoKCihkZWZ1biBib29rbWFyay1ibWVu dS1tYXJrLWFsbCAoKQogICJNYXJrIGFsbCBsaXN0ZWQgYm9va21hcmtzIHRvIGJlIGRpc3BsYXll ZCBieSBcXDxib29rbWFyay1ibWVudS1tb2RlLW1hcD5cXFtib29rbWFyay1ibWVudS1zZWxlY3Rd LiIKICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKHNhdmUtZXhjdXJz aW9uCiAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgKGJvb2ttYXJrLWJtZW51LWVuc3Vy ZS1wb3NpdGlvbikKICAgICh3aGlsZSAobm90IChlb2JwKSkKICAgICAgKHRhYnVsYXRlZC1saXN0 LXB1dC10YWcgIj4iIHQpKSkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LXNlbGVjdCAoKQogICJT ZWxlY3QgdGhpcyBsaW5lJ3MgYm9va21hcms7IGFsc28gZGlzcGxheSBib29rbWFya3MgbWFya2Vk IHdpdGggYD4nLgpZb3UgY2FuIG1hcmsgYm9va21hcmtzIHdpdGggdGhlIFxcPGJvb2ttYXJrLWJt ZW51LW1vZGUtbWFwPlxcW2Jvb2ttYXJrLWJtZW51LW1hcmtdIG9yIFxcPGJvb2ttYXJrLWJtZW51 LW1vZGUtbWFwPlxcW2Jvb2ttYXJrLWJtZW51LW1hcmstYWxsXSBjb21tYW5kcy4iCiAgKGludGVy YWN0aXZlIG5pbCBib29rbWFyay1ibWVudS1tb2RlKQogIChsZXQgKChibXJrIChib29rbWFyay1i bWVudS1ib29rbWFyaykpCiAgICAgICAgKG1lbnUgKGN1cnJlbnQtYnVmZmVyKSkKICAgICAgICAo b3RoZXJzICgpKQogICAgICAgIHRlbSkKICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAo d2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJePiIgbmlsIHQpCiAgICAgIChzZXRxIHRlbSAoYm9v a21hcmstYm1lbnUtYm9va21hcmspKQogICAgICAobGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkp CiAgICAgICAgKGRlbGV0ZS1jaGFyIC0xKQogICAgICAgIChpbnNlcnQgP1xzKSkKICAgICAgKG9y IChzdHJpbmctZXF1YWwgdGVtIGJtcmspCiAgICAgICAgICAobWVtYmVyIHRlbSBvdGhlcnMpCiAg ICAgICAgICAoc2V0cSBvdGhlcnMgKGNvbnMgdGVtIG90aGVycykpKSkKICAgIChzZXRxIG90aGVy cyAobnJldmVyc2Ugb3RoZXJzKQogICAgICAgICAgdGVtICgvICgxLSAoZnJhbWUtaGVpZ2h0KSkg KDErIChsZW5ndGggb3RoZXJzKSkpKQogICAgKGRlbGV0ZS1vdGhlci13aW5kb3dzKQogICAgKGJv b2ttYXJrLWp1bXAgYm1yaykKICAgIChidXJ5LWJ1ZmZlciBtZW51KQogICAgKGlmIG90aGVycwog ICAgICAgICh3aGlsZSBvdGhlcnMKICAgICAgICAgIChzcGxpdC13aW5kb3cgbmlsIHRlbSkKICAg ICAgICAgIChvdGhlci13aW5kb3cgMSkKICAgICAgICAgIChib29rbWFyay1qdW1wIChjYXIgb3Ro ZXJzKSkKICAgICAgICAgIChzZXRxIG90aGVycyAoY2RyIG90aGVycykpKQogICAgICAob3RoZXIt d2luZG93IDEpKSkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LWFueS1tYXJrcyAoKQogICJSZXR1 cm4gbm9uLW5pbCBpZiBhbnkgYm9va21hcmtzIGFyZSBtYXJrZWQgaW4gdGhlIG1hcmtzIGNvbHVt bi4iCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgKGJv b2ttYXJrLWJtZW51LWVuc3VyZS1wb3NpdGlvbikKICAgIChjYXRjaCAnZm91bmQtbWFyawogICAg ICAod2hpbGUgKG5vdCAoZW9icCkpCiAgICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgICAg IChpZiAobG9va2luZy1hdCAiXlxcUy0iKQogICAgICAgICAgICAodGhyb3cgJ2ZvdW5kLW1hcmsg dCkKICAgICAgICAgIChmb3J3YXJkLWxpbmUgMSkpKQogICAgICBuaWwpKSkKCgooZGVmdW4gYm9v a21hcmstYm1lbnUtc2F2ZSAoKQogICJTYXZlIHRoZSBjdXJyZW50IGxpc3QgaW50byBhIGJvb2tt YXJrIGZpbGUuCldpdGggYSBwcmVmaXggYXJnLCBwcm9tcHQgZm9yIGEgZmlsZSB0byBzYXZlIHRo ZW0gaW4uCgpTZWUgYWxzbyB0aGUgcmVsYXRlZCBiZWhhdmlvcnMgb2YgYGJvb2ttYXJrLWxvYWQn IGFuZApgYm9va21hcmstYm1lbnUtbG9hZCcuIgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21hcmst Ym1lbnUtbW9kZSkKICAoc2F2ZS1leGN1cnNpb24KICAgIChzYXZlLXdpbmRvdy1leGN1cnNpb24K ICAgICAgKGNhbGwtaW50ZXJhY3RpdmVseSAnYm9va21hcmstc2F2ZSkKICAgICAgKHNldC1idWZm ZXItbW9kaWZpZWQtcCBuaWwpKSkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LWxvYWQgKCkKICAi TG9hZCBib29rbWFya3MgZnJvbSBhIGZpbGUgYW5kIHJlYnVpbGQgdGhlIGJvb2ttYXJrIG1lbnUt YnVmZmVyLgpQcm9tcHQgZm9yIGEgZmlsZSwgd2l0aCB0aGUgZGVmYXVsdCBjaG9pY2UgYmVpbmcg dGhlIHZhbHVlIG9mCmBib29rbWFyay1kZWZhdWx0LWZpbGUnLgoKV2l0aCBhIHByZWZpeCBhcmd1 bWVudCwgcmVwbGFjZSB0aGUgY3VycmVudCBhbWJpZW50IGJvb2ttYXJrcwooaS5lLiwgdGhlIG9u ZXMgaW4gYGJvb2ttYXJrLWFsaXN0Jykgd2l0aCB0aGUgb25lcyBmcm9tIHRoZSBzZWxlY3RlZApm aWxlIGFuZCBtYWtlIHRoYXQgZmlsZSBiZSB0aGUgbmV3IHZhbHVlIG9mIGBib29rbWFyay1kZWZh dWx0LWZpbGUnLgpJbiBvdGhlciB3b3JkcywgYSBwcmVmaXggYXJndW1lbnQgbWVhbnMgXCJzd2l0 Y2ggb3ZlciB0byB0aGUgYm9va21hcmsKdW5pdmVyc2UgZGVmaW5lZCBpbiB0aGUgbG9hZGVkIGZp bGVcIi4gIFdpdGhvdXQgYSBwcmVmaXggYXJndW1lbnQsCmp1c3QgYWRkIHRoZSBsb2FkZWQgYm9v a21hcmtzIGludG8gdGhlIGN1cnJlbnQgYW1iaWVudCBzZXQuCgpTZWUgdGhlIGRvY3VtZW50YXRp b24gZm9yIGBib29rbWFyay1sb2FkJyBmb3IgbW9yZSBkZXRhaWxzOyBzZWUgYWxzbwp0aGUgcmVs YXRlZCBiZWhhdmlvcnMgb2YgYGJvb2ttYXJrLXNhdmUnIGFuZCBgYm9va21hcmstYm1lbnUtc2F2 ZScuIgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21hcmstYm1lbnUtbW9kZSkKICAoYm9va21hcmst Ym1lbnUtZW5zdXJlLXBvc2l0aW9uKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKHNhdmUtd2luZG93 LWV4Y3Vyc2lvbgogICAgICA7OyBUaGlzIHdpbGwgY2FsbCBgYm9va21hcmstYm1lbnUtbGlzdCcK ICAgICAgKGNhbGwtaW50ZXJhY3RpdmVseSAnYm9va21hcmstbG9hZCkpKSkKCgooZGVmdW4gYm9v a21hcmstYm1lbnUtMS13aW5kb3cgKCkKICAiU2VsZWN0IHRoaXMgbGluZSdzIGJvb2ttYXJrLCBh bG9uZSwgaW4gZnVsbCBmcmFtZS4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFyay1ibWVudS1t b2RlKQogIChib29rbWFyay1qdW1wIChib29rbWFyay1ibWVudS1ib29rbWFyaykpCiAgKGJ1cnkt YnVmZmVyIChvdGhlci1idWZmZXIpKQogIChkZWxldGUtb3RoZXItd2luZG93cykpCgoKKGRlZnVu IGJvb2ttYXJrLWJtZW51LTItd2luZG93ICgpCiAgIlNlbGVjdCB0aGlzIGxpbmUncyBib29rbWFy aywgd2l0aCBwcmV2aW91cyBidWZmZXIgaW4gc2Vjb25kIHdpbmRvdy4iCiAgKGludGVyYWN0aXZl IG5pbCBib29rbWFyay1ibWVudS1tb2RlKQogIChsZXQgKChibXJrIChib29rbWFyay1ibWVudS1i b29rbWFyaykpCiAgICAgICAgKG1lbnUgKGN1cnJlbnQtYnVmZmVyKSkKICAgICAgICAocG9wLXVw LXdpbmRvd3MgdCkpCiAgICAoZGVsZXRlLW90aGVyLXdpbmRvd3MpCiAgICAoc3dpdGNoLXRvLWJ1 ZmZlciAob3RoZXItYnVmZmVyKSBuaWwgdCkKICAgIChib29rbWFyay0tanVtcC12aWEgYm1yayAn cG9wLXRvLWJ1ZmZlcikKICAgIChidXJ5LWJ1ZmZlciBtZW51KSkpCgoKKGRlZnVuIGJvb2ttYXJr LWJtZW51LXRoaXMtd2luZG93ICgpCiAgIlNlbGVjdCB0aGlzIGxpbmUncyBib29rbWFyayBpbiB0 aGlzIHdpbmRvdy4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFyay1ibWVudS1tb2RlKQogIChi b29rbWFyay1qdW1wIChib29rbWFyay1ibWVudS1ib29rbWFyaykpKQoKCihkZWZ1biBib29rbWFy ay1ibWVudS1vdGhlci13aW5kb3cgKCkKICAiU2VsZWN0IHRoaXMgbGluZSdzIGJvb2ttYXJrIGlu IG90aGVyIHdpbmRvdywgbGVhdmluZyBib29rbWFyayBtZW51IHZpc2libGUuIgogIChpbnRlcmFj dGl2ZSBuaWwgYm9va21hcmstYm1lbnUtbW9kZSkKICAobGV0ICgoYm9va21hcmsgKGJvb2ttYXJr LWJtZW51LWJvb2ttYXJrKSkpCiAgICAoYm9va21hcmstLWp1bXAtdmlhIGJvb2ttYXJrICdzd2l0 Y2gtdG8tYnVmZmVyLW90aGVyLXdpbmRvdykpKQoKCihkZWZ1biBib29rbWFyay1ibWVudS1vdGhl ci1mcmFtZSAoKQogICJTZWxlY3QgdGhpcyBsaW5lJ3MgYm9va21hcmsgaW4gb3RoZXIgZnJhbWUu IgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21hcmstYm1lbnUtbW9kZSkKICAobGV0ICAoKGJvb2tt YXJrIChib29rbWFyay1ibWVudS1ib29rbWFyaykpCiAgICAgICAgIChwb3AtdXAtZnJhbWVzIHQp KQogICAgKGJvb2ttYXJrLWp1bXAtb3RoZXItd2luZG93IGJvb2ttYXJrKSkpCgooZGVmdW4gYm9v a21hcmstYm1lbnUtc3dpdGNoLW90aGVyLXdpbmRvdyAoKQogICJNYWtlIHRoZSBvdGhlciB3aW5k b3cgc2VsZWN0IHRoaXMgbGluZSdzIGJvb2ttYXJrLgpUaGUgY3VycmVudCB3aW5kb3cgcmVtYWlu cyBzZWxlY3RlZC4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFyay1ibWVudS1tb2RlKQogIChs ZXQgKChib29rbWFyayAoYm9va21hcmstYm1lbnUtYm9va21hcmspKQoJKGZ1biAobGFtYmRhIChi KSAoZGlzcGxheS1idWZmZXIgYiB0KSkpKQogICAgKGJvb2ttYXJrLS1qdW1wLXZpYSBib29rbWFy ayBmdW4pKSkKCihkZWZ1biBib29rbWFyay1ibWVudS1vdGhlci13aW5kb3ctd2l0aC1tb3VzZSAo ZXZlbnQpCiAgIkp1bXAgdG8gYm9va21hcmsgYXQgbW91c2UgRVZFTlQgcG9zaXRpb24gaW4gb3Ro ZXIgd2luZG93LgpNb3ZlIHBvaW50IGluIG1lbnUgYnVmZmVyIHRvIHRoZSBwb3NpdGlvbiBvZiBF VkVOVCBhbmQgbGVhdmUKYm9va21hcmsgbWVudSB2aXNpYmxlLiIKICAoaW50ZXJhY3RpdmUgImUi IGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKHdpdGgtY3VycmVudC1idWZmZXIgKHdpbmRvdy1idWZm ZXIgKHBvc24td2luZG93IChldmVudC1lbmQgZXZlbnQpKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgog ICAgICAoZ290by1jaGFyIChwb3NuLXBvaW50IChldmVudC1lbmQgZXZlbnQpKSkKICAgICAgKGJv b2ttYXJrLWJtZW51LW90aGVyLXdpbmRvdykpKSkKCgooZGVmdW4gYm9va21hcmstYm1lbnUtc2hv dy1hbm5vdGF0aW9uICgpCiAgIlNob3cgdGhlIGFubm90YXRpb24gZm9yIHRoZSBjdXJyZW50IGJv b2ttYXJrIGluIGFub3RoZXIgd2luZG93LiIKICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJt ZW51LW1vZGUpCiAgKGxldCAoKGJvb2ttYXJrIChib29rbWFyay1ibWVudS1ib29rbWFyaykpKQog ICAgKGJvb2ttYXJrLXNob3ctYW5ub3RhdGlvbiBib29rbWFyaykpKQoKCihkZWZ1biBib29rbWFy ay1ibWVudS1zaG93LWFsbC1hbm5vdGF0aW9ucyAoKQogICJTaG93IHRoZSBhbm5vdGF0aW9uIGZv ciBhbGwgYm9va21hcmtzIGluIGFub3RoZXIgd2luZG93LiIKICAoaW50ZXJhY3RpdmUgbmlsIGJv b2ttYXJrLWJtZW51LW1vZGUpCiAgKGJvb2ttYXJrLXNob3ctYWxsLWFubm90YXRpb25zKSkKCgoo ZGVmdW4gYm9va21hcmstYm1lbnUtZWRpdC1hbm5vdGF0aW9uICgpCiAgIkVkaXQgdGhlIGFubm90 YXRpb24gZm9yIHRoZSBjdXJyZW50IGJvb2ttYXJrIGluIGFub3RoZXIgd2luZG93LiIKICAoaW50 ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGxldCAoKGJvb2ttYXJrIChib29r bWFyay1ibWVudS1ib29rbWFyaykpKQogICAgKGJvb2ttYXJrLWVkaXQtYW5ub3RhdGlvbiBib29r bWFyayB0KSkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LXVubWFyayAoJm9wdGlvbmFsIGJhY2t1 cCkKICAiQ2FuY2VsIGFsbCByZXF1ZXN0ZWQgb3BlcmF0aW9ucyBvbiBib29rbWFyayBvbiB0aGlz IGxpbmUgYW5kIG1vdmUgZG93bi4KT3B0aW9uYWwgQkFDS1VQIG1lYW5zIG1vdmUgdXAuIgogIChp bnRlcmFjdGl2ZSAiUCIgYm9va21hcmstYm1lbnUtbW9kZSkKICA7OyBhbnkgZmxhZ3MgdG8gcmVz ZXQgYWNjb3JkaW5nIHRvIGNpcmN1bXN0YW5jZXM/ICBIb3cgYWJvdXQgYQogIDs7IGZsYWcgaW5k aWNhdGluZyB3aGV0aGVyIHRoaXMgYm9va21hcmsgaXMgYmVpbmcgdmlzaXRlZD8KICA7OyB3ZWxs LCB3ZSBkb24ndCBoYXZlIHRoaXMgbm93LCBzbyBtYXliZSBsYXRlci4KICAoYm9va21hcmstYm1l bnUtZW5zdXJlLXBvc2l0aW9uKQogICh0YWJ1bGF0ZWQtbGlzdC1wdXQtdGFnICIgIikKICAoZm9y d2FyZC1saW5lIChpZiBiYWNrdXAgLTEgMSkpKQoKCihkZWZ1biBib29rbWFyay1ibWVudS1iYWNr dXAtdW5tYXJrICgpCiAgIk1vdmUgdXAgYW5kIGNhbmNlbCBhbGwgcmVxdWVzdGVkIG9wZXJhdGlv bnMgb24gYm9va21hcmsgb24gbGluZSBhYm92ZS4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFy ay1ibWVudS1tb2RlKQogIChmb3J3YXJkLWxpbmUgLTEpCiAgKGJvb2ttYXJrLWJtZW51LWVuc3Vy ZS1wb3NpdGlvbikKICAoYm9va21hcmstYm1lbnUtdW5tYXJrKQogIChmb3J3YXJkLWxpbmUgLTEp CiAgKGJvb2ttYXJrLWJtZW51LWVuc3VyZS1wb3NpdGlvbikpCgoKKGRlZnVuIGJvb2ttYXJrLWJt ZW51LXVubWFyay1hbGwgKCkKICAiQ2FuY2VsIGFsbCByZXF1ZXN0ZWQgb3BlcmF0aW9ucyBvbiBh bGwgbGlzdGVkIGJvb2ttYXJrcy4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFyay1ibWVudS1t b2RlKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgIChi b29rbWFyay1ibWVudS1lbnN1cmUtcG9zaXRpb24pCiAgICAod2hpbGUgKG5vdCAoZW9icCkpCiAg ICAgICh0YWJ1bGF0ZWQtbGlzdC1wdXQtdGFnICIgIiB0KSkpKQoKCihkZWZ1biBib29rbWFyay1i bWVudS1kZWxldGUgKCkKICAiTWFyayBib29rbWFyayBvbiB0aGlzIGxpbmUgdG8gYmUgZGVsZXRl ZC4KVG8gY2Fycnkgb3V0IHRoZSBkZWxldGlvbnMgdGhhdCB5b3UndmUgbWFya2VkLCB1c2UgXFw8 Ym9va21hcmstYm1lbnUtbW9kZS1tYXA+XFxbYm9va21hcmstYm1lbnUtZXhlY3V0ZS1kZWxldGlv bnNdLiIKICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGJvb2ttYXJr LWJtZW51LWVuc3VyZS1wb3NpdGlvbikKICAodGFidWxhdGVkLWxpc3QtcHV0LXRhZyAiRCIgdCkp CgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LWRlbGV0ZS1iYWNrd2FyZHMgKCkKICAiTWFyayBib29r bWFyayBvbiB0aGlzIGxpbmUgdG8gYmUgZGVsZXRlZCwgdGhlbiBtb3ZlIHVwIG9uZSBsaW5lLgpU byBjYXJyeSBvdXQgdGhlIGRlbGV0aW9ucyB0aGF0IHlvdSd2ZSBtYXJrZWQsIHVzZSBcXDxib29r bWFyay1ibWVudS1tb2RlLW1hcD5cXFtib29rbWFyay1ibWVudS1leGVjdXRlLWRlbGV0aW9uc10u IgogIChpbnRlcmFjdGl2ZSBuaWwgYm9va21hcmstYm1lbnUtbW9kZSkKICAoYm9va21hcmstYm1l bnUtZGVsZXRlKQogIChmb3J3YXJkLWxpbmUgLTIpKQoKCihkZWZ1biBib29rbWFyay1ibWVudS1k ZWxldGUtYWxsICgpCiAgIk1hcmsgYWxsIGxpc3RlZCBib29rbWFya3MgYXMgdG8gYmUgZGVsZXRl ZC4KVG8gcmVtb3ZlIGFsbCBkZWxldGlvbiBtYXJrcywgdXNlIFxcPGJvb2ttYXJrLWJtZW51LW1v ZGUtbWFwPlxcW2Jvb2ttYXJrLWJtZW51LXVubWFyay1hbGxdLgpUbyBjYXJyeSBvdXQgdGhlIGRl bGV0aW9ucyB0aGF0IHlvdSd2ZSBtYXJrZWQsIHVzZSBcXDxib29rbWFyay1ibWVudS1tb2RlLW1h cD5cXFtib29rbWFyay1ibWVudS1leGVjdXRlLWRlbGV0aW9uc10uIgogIChpbnRlcmFjdGl2ZSBu aWwgYm9va21hcmstYm1lbnUtbW9kZSkKICAoc2F2ZS1leGN1cnNpb24KICAgIChnb3RvLWNoYXIg KHBvaW50LW1pbikpCiAgICAoYm9va21hcmstYm1lbnUtZW5zdXJlLXBvc2l0aW9uKQogICAgKHdo aWxlIChub3QgKGVvYnApKQogICAgICAodGFidWxhdGVkLWxpc3QtcHV0LXRhZyAiRCIgdCkpKSkK CgooZGVmdW4gYm9va21hcmstYm1lbnUtZXhlY3V0ZS1kZWxldGlvbnMgKCkKICAiRGVsZXRlIGJv b2ttYXJrcyBmbGFnZ2VkIGBEJy4KSWYgYGJvb2ttYXJrLW1lbnUtY29uZmlybS1kZWxldGlvbicg aXMgbm9uLW5pbCwgcHJvbXB0IGZvcgpjb25maXJtYXRpb24gZmlyc3QuIgogIChpbnRlcmFjdGl2 ZSBuaWwgYm9va21hcmstYm1lbnUtbW9kZSkKICAoaWYgKGFuZCBib29rbWFyay1tZW51LWNvbmZp cm0tZGVsZXRpb24KICAgICAgICAgICAobm90ICh5ZXMtb3Itbm8tcCAiRGVsZXRlIHNlbGVjdGVk IGJvb2ttYXJrcz8gIikpKQogICAgICAobWVzc2FnZSAiQm9va21hcmtzIG5vdCBkZWxldGVkLiIp CiAgICAobGV0ICgocmVwb3J0ZXIgKG1ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXIgIkRlbGV0aW5nIGJv b2ttYXJrcy4uLiIpKQogICAgICAgICAgKG8tcG9pbnQgIChwb2ludCkpCiAgICAgICAgICAoby1z dHIgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAoYmVnaW5uaW5nLW9m LWxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAodW5sZXNzICg9IChmb2xsb3dpbmctY2hhcikg P0QpCiAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nCiAgICAgICAgICAg ICAgICAgICAgICAgICAocG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ24gKGVu ZC1vZi1saW5lKSAocG9pbnQpKSkpKSkKICAgICAgICAgIChvLWNvbCAgICAgKGN1cnJlbnQtY29s dW1uKSkpCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAgICh3aGlsZSAocmUtc2Vh cmNoLWZvcndhcmQgIl5EIiAocG9pbnQtbWF4KSB0KQogICAgICAgIChib29rbWFyay1kZWxldGUg KGJvb2ttYXJrLWJtZW51LWJvb2ttYXJrKSB0KSkgOyBwYXNzIEJBVENIIGFyZwogICAgICAoYm9v a21hcmstYm1lbnUtbGlzdCkKICAgICAgKGlmIG8tc3RyCiAgICAgICAgICAocHJvZ24KICAgICAg ICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgICAgICAgICAgKHNlYXJjaC1mb3J3YXJk IG8tc3RyKQogICAgICAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCiAgICAgICAgICAgIChmb3J3 YXJkLWNoYXIgby1jb2wpKQogICAgICAgIChnb3RvLWNoYXIgby1wb2ludCkpCiAgICAgIChiZWdp bm5pbmctb2YtbGluZSkKICAgICAgKHByb2dyZXNzLXJlcG9ydGVyLWRvbmUgcmVwb3J0ZXIpKSkp CgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51LXJlbmFtZSAoKQogICJSZW5hbWUgYm9va21hcmsgb24g Y3VycmVudCBsaW5lLiAgUHJvbXB0cyBmb3IgYSBuZXcgbmFtZS4iCiAgKGludGVyYWN0aXZlIG5p bCBib29rbWFyay1ibWVudS1tb2RlKQogIChsZXQgKChibXJrIChib29rbWFyay1ibWVudS1ib29r bWFyaykpCiAgICAgICAgKHRoaXNwb2ludCAocG9pbnQpKSkKICAgIChib29rbWFyay1yZW5hbWUg Ym1yaykKICAgIChnb3RvLWNoYXIgdGhpc3BvaW50KSkpCgoKKGRlZnVuIGJvb2ttYXJrLWJtZW51 LWxvY2F0ZSAoKQogICJEaXNwbGF5IGxvY2F0aW9uIG9mIHRoaXMgYm9va21hcmsuICBEaXNwbGF5 cyBpbiB0aGUgbWluaWJ1ZmZlci4iCiAgKGludGVyYWN0aXZlIG5pbCBib29rbWFyay1ibWVudS1t b2RlKQogIChsZXQgKChibXJrIChib29rbWFyay1ibWVudS1ib29rbWFyaykpKQogICAgKG1lc3Nh Z2UgIiVzIiAoYm9va21hcmstbG9jYXRpb24gYm1yaykpKSkKCihkZWZ1biBib29rbWFyay1ibWVu dS1yZWxvY2F0ZSAoKQogICJDaGFuZ2UgdGhlIGFic29sdXRlIGZpbGUgbmFtZSBvZiB0aGUgYm9v a21hcmsgb24gdGhlIGN1cnJlbnQgbGluZS4KUHJvbXB0IHdpdGggY29tcGxldGlvbiBmb3IgdGhl IG5ldyBwYXRoLiIKICAoaW50ZXJhY3RpdmUgbmlsIGJvb2ttYXJrLWJtZW51LW1vZGUpCiAgKGxl dCAoKGJtcmsgKGJvb2ttYXJrLWJtZW51LWJvb2ttYXJrKSkKICAgICAgICAodGhpc3BvaW50IChw b2ludCkpKQogICAgKGJvb2ttYXJrLXJlbG9jYXRlIGJtcmspCiAgICAoZ290by1jaGFyIHRoaXNw b2ludCkpKQoKOzs7IEJvb2ttYXJrLWJtZW51IHNlYXJjaAoKKGRlZnVuIGJvb2ttYXJrLWJtZW51 LWZpbHRlci1hbGlzdC1ieS1yZWdleHAgKHJlZ2V4cCkKICAiRmlsdGVyIGBib29rbWFyay1hbGlz dCcgd2l0aCBib29rbWFya3MgbWF0Y2hpbmcgUkVHRVhQIGFuZCByZWJ1aWxkIGxpc3QuIgogIChs ZXQgKChib29rbWFyay1hbGlzdAogICAgICAgICAoY2wtbG9vcCBmb3IgaSBpbiBib29rbWFyay1h bGlzdAogICAgICAgICAgICAgICAgICB3aGVuIChzdHJpbmctbWF0Y2ggcmVnZXhwIChjYXIgaSkp IGNvbGxlY3QgaSBpbnRvIG5ldwogICAgICAgICAgICAgICAgICBmaW5hbGx5IHJldHVybiBuZXcp KSkKICAgIChib29rbWFyay1ibWVudS1saXN0KSkpCgoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGJv b2ttYXJrLWJtZW51LXNlYXJjaCAoKQogICJJbmNyZW1lbnRhbCBzZWFyY2ggb2YgYm9va21hcmtz LCBoaWRpbmcgdGhlIG5vbi1tYXRjaGVzIGFzIHdlIGdvLiIKICAoaW50ZXJhY3RpdmUgbmlsIGJv b2ttYXJrLWJtZW51LW1vZGUpCiAgKGxldCAoKGJtayAoYm9va21hcmstYm1lbnUtYm9va21hcmsp KQogICAgICAgICh0aW1lciBuaWwpKQogICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgKG1pbmli dWZmZXItd2l0aC1zZXR1cC1ob29rCiAgICAgICAgICAgIChsYW1iZGEgKCkKICAgICAgICAgICAg ICAoc2V0cSB0aW1lciAocnVuLXdpdGgtaWRsZS10aW1lcgogICAgICAgICAgICAgICAgICAgICAg ICAgICBib29rbWFyay1zZWFyY2gtZGVsYXkgJ3JlcGVhdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAobGFtYmRhIChidWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGgtY3Vy cmVudC1idWZmZXIgYnVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYm9va21hcmst Ym1lbnUtZmlsdGVyLWFsaXN0LWJ5LXJlZ2V4cAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChtaW5pYnVmZmVyLWNvbnRlbnRzKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAo Y3VycmVudC1idWZmZXIpKSkpCiAgICAgICAgICAocmVhZC1zdHJpbmcgIlBhdHRlcm46ICIpCiAg ICAgICAgICAod2hlbiB0aW1lciAoY2FuY2VsLXRpbWVyIHRpbWVyKSAoc2V0cSB0aW1lciBuaWwp KSkKICAgICAgKHdoZW4gdGltZXIgOzsgU2lnbmFsZWQgYW4gZXJyb3Igb3IgYSBgcXVpdCcuCiAg ICAgICAgKGNhbmNlbC10aW1lciB0aW1lcikKICAgICAgICAoYm9va21hcmstYm1lbnUtbGlzdCkK ICAgICAgICAoYm9va21hcmstYm1lbnUtZ290by1ib29rbWFyayBibWspKSkpKQoKKGRlZnVuIGJv b2ttYXJrLWJtZW51LWdvdG8tYm9va21hcmsgKG5hbWUpCiAgIk1vdmUgcG9pbnQgdG8gYm9va21h cmsgd2l0aCBuYW1lIE5BTUUuIgogIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgKHdoaWxlIChu b3QgKG9yIChlcXVhbCBuYW1lIChib29rbWFyay1ibWVudS1ib29rbWFyaykpCiAgICAgICAgICAg ICAgICAgIChlb2JwKSkpCiAgICAoZm9yd2FyZC1saW5lIDEpKQogIChmb3J3YXJkLWxpbmUgMCkp CgoKDAo7OzsgTWVudSBiYXIgc3R1ZmYuICBQcmVmaXggaXMgImJvb2ttYXJrLW1lbnUiLgoKKGRl ZnVuIGJvb2ttYXJrLW1lbnUtcG9wdXAtcGFuZWQtbWVudSAoZXZlbnQgbmFtZSBlbnRyaWVzKQog ICJQb3AgdXAgbXVsdGktcGFuZWQgbWVudSBhdCBFVkVOVCwgcmV0dXJuIHN0cmluZyBjaG9zZW4g ZnJvbSBFTlRSSUVTLgpUaGF0IGlzLCBFTlRSSUVTIGlzIGEgbGlzdCBvZiBzdHJpbmdzIHdoaWNo IGFwcGVhciBhcyB0aGUgY2hvaWNlcwppbiB0aGUgbWVudS4KVGhlIG51bWJlciBvZiBwYW5lcyBk ZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgZW50cmllcy4KVGhlIHZpc2libGUgZW50cmllcyBhcmUg dHJ1bmNhdGVkIHRvIGBib29rbWFyay1tZW51LWxlbmd0aCcsIGJ1dCB0aGUKc3RyaW5ncyByZXR1 cm5lZCBhcmUgbm90LiIKICAobGV0ICgoZi1oZWlnaHQgKC8gKGZyYW1lLWhlaWdodCkgMikpCgko cGFuZS1saXN0IG5pbCkKCShpdGVyIDApKQogICAgKHdoaWxlIGVudHJpZXMKICAgICAgKGxldCAo bHN0CgkgICAgKGNvdW50IDApKQoJKHdoaWxlIChhbmQgKDwgY291bnQgZi1oZWlnaHQpIGVudHJp ZXMpCgkgIChsZXQgKChzdHIgKGNhciBlbnRyaWVzKSkpCgkgICAgKHB1c2ggKGNvbnMKCQkgICAo aWYgKD4gKGxlbmd0aCBzdHIpIGJvb2ttYXJrLW1lbnUtbGVuZ3RoKQoJCSAgICAgICAoc3Vic3Ry aW5nIHN0ciAwIGJvb2ttYXJrLW1lbnUtbGVuZ3RoKQoJCSAgICAgc3RyKQoJCSAgIHN0cikKCQkg IGxzdCkKCSAgICAoc2V0cSBlbnRyaWVzIChjZHIgZW50cmllcykpCgkgICAgKHNldHEgY291bnQg KDErIGNvdW50KSkpKQoJKHNldHEgaXRlciAoMSsgaXRlcikpCgkocHVzaCAoY29ucwoJICAgICAg IChmb3JtYXQgIi0qLSAlcyAoJWQpIC0qLSIgbmFtZSBpdGVyKQoJICAgICAgIChucmV2ZXJzZSBs c3QpKQoJICAgICAgcGFuZS1saXN0KSkpCgogICAgOzsgUG9wdXAgdGhlIG1lbnUgYW5kIHJldHVy biB0aGUgc3RyaW5nLgogICAgKHgtcG9wdXAtbWVudSBldmVudCAoY29ucyAoY29uY2F0ICItKi0g IiBuYW1lICIgLSotIikKCQkJICAgICAgKG5yZXZlcnNlIHBhbmUtbGlzdCkpKSkpCgoKOzsgVGhh bmtzIHRvIFJvbGFuZCBNY0dyYXRoIGZvciBmaXhpbmcgbWVudWJhci5lbCBzbyB0aGF0IHRoZQo7 OyBmb2xsb3dpbmcgd29ya3MsIGFuZCBmb3IgZXhwbGFpbmluZyB3aGF0IHRvIGRvIHRvIG1ha2Ug aXQgd29yay4KCjs7IFdlIE1VU1QgYXV0b2xvYWQgRUFDSCBmb3JtIHVzZWQgdG8gc2V0IHVwIHRo aXMgdmFyaWFibGUncyB2YWx1ZSwgc28KOzsgdGhhdCB0aGUgd2hvbGUgam9iIGlzIGRvbmUgaW4g bG9hZGRlZnMuZWwuCgo7OyBFbWFjcyBtZW51YmFyIHN0dWZmLgoKOzs7IyMjYXV0b2xvYWQKKGRl ZnZhciBtZW51LWJhci1ib29rbWFyay1tYXAKICAobGV0ICgobWFwIChtYWtlLXNwYXJzZS1rZXlt YXAgIkJvb2ttYXJrIGZ1bmN0aW9ucyIpKSkKICAgIChiaW5kaW5ncy0tZGVmaW5lLWtleSBtYXAg W2xvYWRdCiAgICAgICcobWVudS1pdGVtICJMb2FkIGEgQm9va21hcmsgRmlsZS4uLiIgYm9va21h cmstbG9hZAoJCSAgOmhlbHAgIkxvYWQgYm9va21hcmtzIGZyb20gYSBib29rbWFyayBmaWxlKSIp KQogICAgKGJpbmRpbmdzLS1kZWZpbmUta2V5IG1hcCBbd3JpdGVdCiAgICAgICcobWVudS1pdGVt ICJTYXZlIEJvb2ttYXJrcyBBcy4uLiIgYm9va21hcmstd3JpdGUKCQkgIDpoZWxwICJXcml0ZSBi b29rbWFya3MgdG8gYSBmaWxlIChyZWFkaW5nIHRoZSBmaWxlIG5hbWUgd2l0aCB0aGUgbWluaWJ1 ZmZlcikiKSkKICAgIChiaW5kaW5ncy0tZGVmaW5lLWtleSBtYXAgW3NhdmVdCiAgICAgICcobWVu dS1pdGVtICJTYXZlIEJvb2ttYXJrcyIgYm9va21hcmstc2F2ZQoJCSAgOmhlbHAgIlNhdmUgY3Vy cmVudGx5IGRlZmluZWQgYm9va21hcmtzIikpCiAgICAoYmluZGluZ3MtLWRlZmluZS1rZXkgbWFw IFtlZGl0XQogICAgICAnKG1lbnUtaXRlbSAiRWRpdCBCb29rbWFyayBMaXN0IiBib29rbWFyay1i bWVudS1saXN0CgkJICA6aGVscCAiRGlzcGxheSBhIGxpc3Qgb2YgZXhpc3RpbmcgYm9va21hcmtz IikpCiAgICAoYmluZGluZ3MtLWRlZmluZS1rZXkgbWFwIFtkZWxldGVdCiAgICAgICcobWVudS1p dGVtICJEZWxldGUgQm9va21hcmsuLi4iIGJvb2ttYXJrLWRlbGV0ZQoJCSAgOmhlbHAgIkRlbGV0 ZSBhIGJvb2ttYXJrIGZyb20gdGhlIGJvb2ttYXJrIGxpc3QiKSkKICAgIChiaW5kaW5ncy0tZGVm aW5lLWtleSBtYXAgW2RlbGV0ZS1hbGxdCiAgICAgICcobWVudS1pdGVtICJEZWxldGUgYWxsIEJv b2ttYXJrcy4uLiIgYm9va21hcmstZGVsZXRlLWFsbAoJCSAgOmhlbHAgIkRlbGV0ZSBhbGwgYm9v a21hcmtzIGZyb20gdGhlIGJvb2ttYXJrIGxpc3QiKSkKICAgIChiaW5kaW5ncy0tZGVmaW5lLWtl eSBtYXAgW3JlbmFtZV0KICAgICAgJyhtZW51LWl0ZW0gIlJlbmFtZSBCb29rbWFyay4uLiIgYm9v a21hcmstcmVuYW1lCgkJICA6aGVscCAiQ2hhbmdlIHRoZSBuYW1lIG9mIGEgYm9va21hcmsiKSkK ICAgIChiaW5kaW5ncy0tZGVmaW5lLWtleSBtYXAgW2xvY2F0ZV0KICAgICAgJyhtZW51LWl0ZW0g Ikluc2VydCBMb2NhdGlvbi4uLiIgYm9va21hcmstbG9jYXRlCgkJICA6aGVscCAiSW5zZXJ0IHRo ZSBuYW1lIG9mIHRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhIGJvb2ttYXJrIikpCiAgICAoYmlu ZGluZ3MtLWRlZmluZS1rZXkgbWFwIFtpbnNlcnRdCiAgICAgICcobWVudS1pdGVtICJJbnNlcnQg Q29udGVudHMuLi4iIGJvb2ttYXJrLWluc2VydAoJCSAgOmhlbHAgIkluc2VydCB0aGUgdGV4dCBv ZiB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IGEgYm9va21hcmsiKSkKICAgIChiaW5kaW5ncy0tZGVm aW5lLWtleSBtYXAgW3NldF0KICAgICAgJyhtZW51LWl0ZW0gIlNldCBCb29rbWFyay4uLiIgYm9v a21hcmstc2V0CgkJICA6aGVscCAiU2V0IGEgYm9va21hcmsgbmFtZWQgaW5zaWRlIGEgZmlsZS4i KSkKICAgIChiaW5kaW5ncy0tZGVmaW5lLWtleSBtYXAgW2p1bXBdCiAgICAgICcobWVudS1pdGVt ICJKdW1wIHRvIEJvb2ttYXJrLi4uIiBib29rbWFyay1qdW1wCgkJICA6aGVscCAiSnVtcCB0byBh IGJvb2ttYXJrIChhIHBvaW50IGluIHNvbWUgZmlsZSkiKSkKICAgIG1hcCkpCgo7OzsjIyNhdXRv bG9hZAooZGVmYWxpYXMgJ21lbnUtYmFyLWJvb2ttYXJrLW1hcCBtZW51LWJhci1ib29rbWFyay1t YXApCgo7OyBtYWtlIGJvb2ttYXJrcyBhcHBlYXIgdG93YXJkIHRoZSByaWdodCBzaWRlIG9mIHRo ZSBtZW51LgooaWYgKGJvdW5kcCAnbWVudS1iYXItZmluYWwtaXRlbXMpCiAgICAoaWYgbWVudS1i YXItZmluYWwtaXRlbXMKICAgICAgICAocHVzaCAnYm9va21hcmsgbWVudS1iYXItZmluYWwtaXRl bXMpKQogIChzZXRxIG1lbnUtYmFyLWZpbmFsLWl0ZW1zICcoYm9va21hcmspKSkKCjs7OzsgZW5k IGJvb2ttYXJrIG1lbnUgc3R1ZmYgOzs7OwoKDAo7OyBMb2FkIEhvb2sKKGRlZnZhciBib29rbWFy ay1sb2FkLWhvb2sgbmlsCiAgIkhvb2sgcnVuIGF0IHRoZSBlbmQgb2YgbG9hZGluZyBsaWJyYXJ5 IGBib29rbWFyay5lbCcuIikKKG1ha2Utb2Jzb2xldGUtdmFyaWFibGUgJ2Jvb2ttYXJrLWxvYWQt aG9vawogICAgICAgICAgICAgICAgICAgICAgICAidXNlIGB3aXRoLWV2YWwtYWZ0ZXItbG9hZCcg aW5zdGVhZC4iICIyOC4xIikKCjs7IEV4aXQgSG9vaywgY2FsbGVkIGZyb20ga2lsbC1lbWFjcy1o b29rCihkZWZ2YXIgYm9va21hcmstZXhpdC1ob29rIG5pbAogICJIb29rIHJ1biB3aGVuIEVtYWNz IGV4aXRzLiIpCgooZGVmdW4gYm9va21hcmstZXhpdC1ob29rLWludGVybmFsICgpCiAgIlNhdmUg Ym9va21hcmsgc3RhdGUsIGlmIG5lY2Vzc2FyeSwgYXQgRW1hY3MgZXhpdCB0aW1lLgpUaGlzIGFs c28gcnVucyBgYm9va21hcmstZXhpdC1ob29rJy4iCiAgKHJ1bi1ob29rcyAnYm9va21hcmstZXhp dC1ob29rKQogIChhbmQgKGJvb2ttYXJrLXRpbWUtdG8tc2F2ZS1wIHQpCiAgICAgICAoYm9va21h cmstc2F2ZSkpKQoKKHVubGVzcyBub25pbnRlcmFjdGl2ZQogIChhZGQtaG9vayAna2lsbC1lbWFj cy1ob29rICdib29rbWFyay1leGl0LWhvb2staW50ZXJuYWwpKQoKKGRlZnVuIGJvb2ttYXJrLXVu bG9hZC1mdW5jdGlvbiAoKQogICJVbmxvYWQgdGhlIEJvb2ttYXJrIGxpYnJhcnkuIgogICh3aGVu IGJvb2ttYXJrLXNhdmUtZmxhZyAoYm9va21hcmstc2F2ZSkpCiAgOzsgY29udGludWUgc3RhbmRh cmQgdW5sb2FkaW5nCiAgbmlsKQoKCihydW4taG9va3MgJ2Jvb2ttYXJrLWxvYWQtaG9vaykKCgwK Ozs7IE9ic29sZXRlOgoKKGRlZmluZS1vYnNvbGV0ZS1mdW5jdGlvbi1hbGlhcyAnYm9va21hcmst c2VuZC1lZGl0ZWQtYW5ub3RhdGlvbgogICMnYm9va21hcmstZWRpdC1hbm5vdGF0aW9uLWNvbmZp cm0gIjI5LjEiKQoKKHByb3ZpZGUgJ2Jvb2ttYXJrKQoKOzs7IGJvb2ttYXJrLmVsIGVuZHMgaGVy ZQo= --_005_SJ0PR10MB5488B76B824B691EC228B84BF3669SJ0PR10MB5488namp_ Content-Type: application/octet-stream; name="pdf-tools-handler-fix.el" Content-Description: pdf-tools-handler-fix.el Content-Disposition: attachment; filename="pdf-tools-handler-fix.el"; size=11034; creation-date="Fri, 12 Aug 2022 14:57:45 GMT"; modification-date="Sat, 13 Aug 2022 20:59:20 GMT" Content-Transfer-Encoding: base64 OzsgVGhlIG9yaWdpbmFsIFBERiBUb29scyBib29rbWFyayBoYW5kbGVyLCBwbHVzIHNvbWUgYWx0 ZXJuYXRpdmUgZGVmaW5pdGlvbnMsIHdoaWNoIHdvcmsKOzsgd2l0aCBib3RoIHZhbmlsbGEgRW1h Y3MgYW5kIEJvb2ttYXJrKywgaW4gdHdvIGdyb3Vwcy4gIFRoZSBmaXJzdCBncm91cCB3b3JrIHdp dGhvdXQKOzsgcGF0Y2hpbmcgYGJvb2ttYXJrLmVsJy4gIFRoZSBzZWNvbmQgZ3JvdXAgcmVxdWly ZSB0aGUgcGF0Y2guCjs7Cjs7IFRoZSBvcmlnaW5hbCBhbmQgdGhlIGZpcnN0IGdyb3VwIGNyZWF0 ZSBhIGNsb3N1cmUgYW5kIHB1dCBpdCBvbiB0aGUgYWZ0ZXItanVtcCBob29rLgo7OyBUaGV5IGRl cGVuZCBvbiBsZXhpY2FsIGJpbmRpbmcgKGZvciB0aGUgY2xvc3VyZSkuICBUaGUgc2Vjb25kIGdy b3VwIHdvcmsgd2l0aCBvcgo7OyB3aXRob3V0IGxleGljYWwgYmluZGluZy4KCgoKOzsgMS4gT1JJ R0lOQUwgZGVmaW5pdGlvbi4gIEhhbmRsZSB3aGF0IGNhbiBiZSBoYW5kbGVkIGJlZm9yZSBkaXNw bGF5aW5nIHRoZSBkZXN0aW5hdGlvbiwKOzsgICAgYW5kIHB1dCB3aGF0IG5lZWRzIHRvIGJlIGRv bmUgYWZ0ZXIgZGlzcGxheWluZyBvbnRvIGBib29rbWFyay1hZnRlci1qdW1wLWhvb2snLgo7Owoo ZGVmdW4gcGRmLXZpZXctYm9va21hcmstanVtcC1oYW5kbGVyIChibWspCiAgIi4uLiIKICAobGV0 ICgocGFnZSAoYm9va21hcmstcHJvcC1nZXQgYm1rICdwYWdlKSkKICAgICAgICAoc2xpY2UgKGJv b2ttYXJrLXByb3AtZ2V0IGJtayAnc2xpY2UpKQogICAgICAgIChzaXplIChib29rbWFyay1wcm9w LWdldCBibWsgJ3NpemUpKQogICAgICAgIChvcmlnaW4gKGJvb2ttYXJrLXByb3AtZ2V0IGJtayAn b3JpZ2luKSkKICAgICAgICAoZmlsZSAoYm9va21hcmstcHJvcC1nZXQgYm1rICdmaWxlbmFtZSkp CiAgICAgICAgKHNob3ctZm4tc3ltIChtYWtlLXN5bWJvbCAicGRmLXZpZXctYm9va21hcmstYWZ0 ZXItanVtcC1ob29rIikpKQoKICAgIDs7IENyZWF0ZSBhIGNsb3N1cmUgdGhhdCBlbmNhcHN1bGF0 ZXMgYW5kIHVzZXMgUEFHRSwgU0xJQ0UsIFNJWkUsIGFuZCBPUklHSU4uCiAgICAoZnNldCBzaG93 LWZuLXN5bQogICAgICAgICAgKGxhbWJkYSAoKQogICAgICAgICAgICAocmVtb3ZlLWhvb2sgJ2Jv b2ttYXJrLWFmdGVyLWp1bXAtaG9vayBzaG93LWZuLXN5bSkKICAgICAgICAgICAgKHVubGVzcyAo ZGVyaXZlZC1tb2RlLXAgJ3BkZi12aWV3LW1vZGUpIChwZGYtdmlldy1tb2RlKSkKICAgICAgICAg ICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93CiAgICAgICAgICAgICAgICAob3IgKGdldC1idWZmZXIt d2luZG93IChjdXJyZW50LWJ1ZmZlcikgMCkKICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQt d2luZG93KSkKICAgICAgICAgICAgICAod2hlbiBzaXplIChzZXRxLWxvY2FsIHBkZi12aWV3LWRp c3BsYXktc2l6ZSBzaXplKSkKICAgICAgICAgICAgICAod2hlbiBzbGljZSAoYXBwbHkgJ3BkZi12 aWV3LXNldC1zbGljZSBzbGljZSkpCiAgICAgICAgICAgICAgKHdoZW4gKG51bWJlcnAgcGFnZSkg KHBkZi12aWV3LWdvdG8tcGFnZSBwYWdlKSkKICAgICAgICAgICAgICAod2hlbiBvcmlnaW4KICAg ICAgICAgICAgICAgIChsZXQgKChzaXplIChwZGYtdmlldy1pbWFnZS1zaXplIHQpKSkKICAgICAg ICAgICAgICAgICAgKGltYWdlLXNldC13aW5kb3ctaHNjcm9sbAogICAgICAgICAgICAgICAgICAg KHJvdW5kICgvICgqIChjYXIgb3JpZ2luKSAoY2FyIHNpemUpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChmcmFtZS1jaGFyLXdpZHRoKSkpKQogICAgICAgICAgICAgICAgICAoaW1hZ2Ut c2V0LXdpbmRvdy12c2Nyb2xsCiAgICAgICAgICAgICAgICAgICAocm91bmQgKC8gKCogKGNkciBv cmlnaW4pIChjZHIgc2l6ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHBkZi12 aWV3LWhhdmUtaW1hZ2UtbW9kZS1waXhlbC12c2Nyb2xsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZS1jaGFyLWhl aWdodCkpKSkpKSkpKSkKCiAgICA7OyBQdXQgdGhlIGNsb3N1cmUgb24gdGhlIGFmdGVyLWp1bXAg aG9vaywgdmlzaXQgRklMRSBpbiB0aGUgY3VycmVudCBidWZmZXIuCiAgICAoYWRkLWhvb2sgJ2Jv b2ttYXJrLWFmdGVyLWp1bXAtaG9vayBzaG93LWZuLXN5bSkKICAgIChzZXQtYnVmZmVyIChvciAo ZmluZC1idWZmZXItdmlzaXRpbmcgZmlsZSkKICAgICAgICAgICAgICAgICAgICAoZmluZC1maWxl LW5vc2VsZWN0IGZpbGUpKSkpKQoKDAo7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo7OyBBbHRl cm5hdGl2ZSBkZWZpbml0aW9ucyB0aGF0IHdvcmsgd2l0aCBjdXJyZW50IGBib29rbWFyay5lbCcg YW5kIEJvb2ttYXJrKy4KOzsKOzsgVGhlc2UgZG9uJ3QgcmVxdWlyZSB0aGUgcGF0Y2guICBUaGV5 IGFsc28gZG9uJ3Qgc2ltcGxpZnkgdGhlIGhhbmRsZXIgLSBpdCBzdGlsbCB1c2VzCjs7IGEgY2xv c3VyZSBvbiB0aGUgYWZ0ZXItanVtcCBob29rLgo7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK Cjs7IDIuIFVzZSBhIGRpc3BsYXkgZnVuY3Rpb24gaW5zdGVhZCBvZiBqdXN0IGBzZXQtYnVmZmVy Jy4gIE90aGVyd2lzZSBzYW1lIGFzIG9yaWdpbmFsLgo7OwooZGVmdW4gcGRmLXZpZXctYm9va21h cmstanVtcC1oYW5kbGVyIChibWspCiAgIi4uLiIKICAobGV0ICgocGFnZSAoYm9va21hcmstcHJv cC1nZXQgYm1rICdwYWdlKSkKICAgICAgICAoc2xpY2UgKGJvb2ttYXJrLXByb3AtZ2V0IGJtayAn c2xpY2UpKQogICAgICAgIChzaXplIChib29rbWFyay1wcm9wLWdldCBibWsgJ3NpemUpKQogICAg ICAgIChvcmlnaW4gKGJvb2ttYXJrLXByb3AtZ2V0IGJtayAnb3JpZ2luKSkKICAgICAgICAoZmls ZSAoYm9va21hcmstcHJvcC1nZXQgYm1rICdmaWxlbmFtZSkpCiAgICAgICAgKHNob3ctZm4tc3lt IChtYWtlLXN5bWJvbCAicGRmLXZpZXctYm9va21hcmstYWZ0ZXItanVtcC1ob29rIikpKQoKICAg IDs7IENyZWF0ZSBhIGNsb3N1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgYW5kIHVzZXMgUEFHRSwgU0xJ Q0UsIFNJWkUsIGFuZCBPUklHSU4uCiAgICAoZnNldCBzaG93LWZuLXN5bQogICAgICAgICAgKGxh bWJkYSAoKQogICAgICAgICAgICAocmVtb3ZlLWhvb2sgJ2Jvb2ttYXJrLWFmdGVyLWp1bXAtaG9v ayBzaG93LWZuLXN5bSkKICAgICAgICAgICAgKHVubGVzcyAoZGVyaXZlZC1tb2RlLXAgJ3BkZi12 aWV3LW1vZGUpIChwZGYtdmlldy1tb2RlKSkKICAgICAgICAgICAgKHdpdGgtc2VsZWN0ZWQtd2lu ZG93CiAgICAgICAgICAgICAgICAob3IgKGdldC1idWZmZXItd2luZG93IChjdXJyZW50LWJ1ZmZl cikgMCkKICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQtd2luZG93KSkKICAgICAgICAgICAg ICAod2hlbiBzaXplIChzZXRxLWxvY2FsIHBkZi12aWV3LWRpc3BsYXktc2l6ZSBzaXplKSkKICAg ICAgICAgICAgICAod2hlbiBzbGljZSAoYXBwbHkgJ3BkZi12aWV3LXNldC1zbGljZSBzbGljZSkp CiAgICAgICAgICAgICAgKHdoZW4gKG51bWJlcnAgcGFnZSkgKHBkZi12aWV3LWdvdG8tcGFnZSBw YWdlKSkKICAgICAgICAgICAgICAod2hlbiBvcmlnaW4KICAgICAgICAgICAgICAgIChsZXQgKChz aXplIChwZGYtdmlldy1pbWFnZS1zaXplIHQpKSkKICAgICAgICAgICAgICAgICAgKGltYWdlLXNl dC13aW5kb3ctaHNjcm9sbAogICAgICAgICAgICAgICAgICAgKHJvdW5kICgvICgqIChjYXIgb3Jp Z2luKSAoY2FyIHNpemUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZS1jaGFy LXdpZHRoKSkpKQogICAgICAgICAgICAgICAgICAoaW1hZ2Utc2V0LXdpbmRvdy12c2Nyb2xsCiAg ICAgICAgICAgICAgICAgICAocm91bmQgKC8gKCogKGNkciBvcmlnaW4pIChjZHIgc2l6ZSkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHBkZi12aWV3LWhhdmUtaW1hZ2UtbW9kZS1w aXhlbC12c2Nyb2xsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChmcmFtZS1jaGFyLWhlaWdodCkpKSkpKSkpKSkKCiAgICA7 OyBQdXQgdGhlIGNsb3N1cmUgb24gdGhlIGFmdGVyLWp1bXAgaG9vaywgdmlzaXQgRklMRSBpbiB0 aGUgY3VycmVudCBidWZmZXIuCiAgICAoYWRkLWhvb2sgJ2Jvb2ttYXJrLWFmdGVyLWp1bXAtaG9v ayBzaG93LWZuLXN5bSkKCiAgICA7OyBEaXNwbGF5IGEgYnVmZmVyIHZpc2l0aW5nIEZJTEUuCiAg ICAocG9wLXRvLWJ1ZmZlci1zYW1lLXdpbmRvdyAob3IgKGZpbmQtYnVmZmVyLXZpc2l0aW5nIGZp bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbmQtZmlsZS1ub3NlbGVj dCBmaWxlKSkpKSkKCgo7OyAzLiBJbnZva2UgdGhlIGRlZmF1bHQgaGFuZGxlciwgc28gdGhlIGRl c3RpbmF0aW9uIGdldHMgZGlzcGxheWVkIGJ5IGBib29rbWFyay1qdW1wJy4KOzsgICAgT3RoZXJ3 aXNlIHNhbWUgYXMgb3JpZ2luYWwuCjs7CihkZWZ1biBwZGYtdmlldy1ib29rbWFyay1qdW1wLWhh bmRsZXIgKGJtaykKICAiLi4uIgogIChsZXQgKChwYWdlIChib29rbWFyay1wcm9wLWdldCBibWsg J3BhZ2UpKQogICAgICAgIChzbGljZSAoYm9va21hcmstcHJvcC1nZXQgYm1rICdzbGljZSkpCiAg ICAgICAgKHNpemUgKGJvb2ttYXJrLXByb3AtZ2V0IGJtayAnc2l6ZSkpCiAgICAgICAgKG9yaWdp biAoYm9va21hcmstcHJvcC1nZXQgYm1rICdvcmlnaW4pKQogICAgICAgIChmaWxlIChib29rbWFy ay1wcm9wLWdldCBibWsgJ2ZpbGVuYW1lKSkKICAgICAgICAoc2hvdy1mbi1zeW0gKG1ha2Utc3lt Ym9sICJwZGYtdmlldy1ib29rbWFyay1hZnRlci1qdW1wLWhvb2siKSkpCiAgICAoZnNldCBzaG93 LWZuLXN5bQogICAgICAgICAgKGxhbWJkYSAoKQoKICAgICAgICAgICAgOzsgSW52b2tlIHRoZSBk ZWZhdWx0IGhhbmRsZXIuCiAgICAgICAgICAgIChib29rbWFyay1kZWZhdWx0LWhhbmRsZXIgKGJv b2ttYXJrLWdldC1ib29rbWFyayBibWspKQoKICAgICAgICAgICAgKHJlbW92ZS1ob29rICdib29r bWFyay1hZnRlci1qdW1wLWhvb2sgc2hvdy1mbi1zeW0pCiAgICAgICAgICAgICh1bmxlc3MgKGRl cml2ZWQtbW9kZS1wICdwZGYtdmlldy1tb2RlKSAocGRmLXZpZXctbW9kZSkpCiAgICAgICAgICAg ICh3aXRoLXNlbGVjdGVkLXdpbmRvdwogICAgICAgICAgICAgICAgKG9yIChnZXQtYnVmZmVyLXdp bmRvdyAoY3VycmVudC1idWZmZXIpIDApIChzZWxlY3RlZC13aW5kb3cpKQogICAgICAgICAgICAg ICh3aGVuIHNpemUgKHNldHEtbG9jYWwgcGRmLXZpZXctZGlzcGxheS1zaXplIHNpemUpKQogICAg ICAgICAgICAgICh3aGVuIHNsaWNlIChhcHBseSAncGRmLXZpZXctc2V0LXNsaWNlIHNsaWNlKSkK ICAgICAgICAgICAgICAod2hlbiAobnVtYmVycCBwYWdlKSAocGRmLXZpZXctZ290by1wYWdlIHBh Z2UpKQogICAgICAgICAgICAgICh3aGVuIG9yaWdpbgogICAgICAgICAgICAgICAgKGxldCAoKHNp emUgKHBkZi12aWV3LWltYWdlLXNpemUgdCkpKQogICAgICAgICAgICAgICAgICAoaW1hZ2Utc2V0 LXdpbmRvdy1oc2Nyb2xsCiAgICAgICAgICAgICAgICAgICAocm91bmQgKC8gKCogKGNhciBvcmln aW4pIChjYXIgc2l6ZSkpIChmcmFtZS1jaGFyLXdpZHRoKSkpKQogICAgICAgICAgICAgICAgICAo aW1hZ2Utc2V0LXdpbmRvdy12c2Nyb2xsCiAgICAgICAgICAgICAgICAgICAocm91bmQgKC8gKCog KGNkciBvcmlnaW4pIChjZHIgc2l6ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlm IHBkZi12aWV3LWhhdmUtaW1hZ2UtbW9kZS1waXhlbC12c2Nyb2xsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZS1j aGFyLWhlaWdodCkpKSkpKSkpKSkKICAgIChhZGQtaG9vayAnYm9va21hcmstYWZ0ZXItanVtcC1o b29rIHNob3ctZm4tc3ltKQogICAgKHNldC1idWZmZXIgKG9yIChmaW5kLWJ1ZmZlci12aXNpdGlu ZyBmaWxlKQogICAgICAgICAgICAgICAgICAgIChmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZSkpKSkp Cgo7OyA0LiBBZHZpc2UgdGhlIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGludm9rZXMgdGhlIGRl ZmF1bHQgaGFuZGxlci4KOzsKKGRlZnVuIG15LWJtay1wZGYtaGFuZGxlci1hZHZpY2UgKGJvb2tt YXJrKQogIChib29rbWFyay1kZWZhdWx0LWhhbmRsZXIgKGJvb2ttYXJrLWdldC1ib29rbWFyayBi b29rbWFyaykpKQoKKGFkdmljZS1hZGQgJ3BkZi12aWV3LWJvb2ttYXJrLWp1bXAtaGFuZGxlciA6 YWZ0ZXIgJ215LWJtay1wZGYtaGFuZGxlci1hZHZpY2UpCgoMCjs7LS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCjs7IEFsdGVybmF0aXZlIGRlZmluaXRpb25zIHRoYXQgd29yayB3aXRoIHBhdGNoZWQg YGJvb2ttYXJrLmVsJyBhbmQgQm9va21hcmsrLgo7Owo7OyBTaW1wbGVyIGhhbmRsZXIgY29kZSAt IG5vIG5lZWQgdG8gdXNlIHRoZSBhZnRlci1qdW1wIGhvb2sgdG8gZmluaXNoIGhhbmRsaW5nLgo7 Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCjs7IDUuIEludm9rZSBkZWZhdWx0IGhhbmRsZXIs IHRvIGRpc3BsYXkgZGVzdGluYXRpb24gdXNpbmcgdGhlIGRlZmF1bHQgZGlzcGxheSBmdW5jdGlv bi4KOzsKKGRlZnVuIHBkZi12aWV3LWJvb2ttYXJrLWp1bXAtaGFuZGxlciAoYm1rKQogICIuLi4i CiAgKGxldCAoKHBhZ2UgICAgKGJvb2ttYXJrLXByb3AtZ2V0IGJtayAncGFnZSkpCiAgICAgICAg KHNsaWNlICAgKGJvb2ttYXJrLXByb3AtZ2V0IGJtayAnc2xpY2UpKQogICAgICAgIChzaXplICAg IChib29rbWFyay1wcm9wLWdldCBibWsgJ3NpemUpKQogICAgICAgIChvcmlnaW4gIChib29rbWFy ay1wcm9wLWdldCBibWsgJ29yaWdpbikpCiAgICAgICAgKGZpbGUgICAgKGJvb2ttYXJrLXByb3At Z2V0IGJtayAnZmlsZW5hbWUpKSkKICAgIChzZXQtYnVmZmVyIChvciAoZmluZC1idWZmZXItdmlz aXRpbmcgZmlsZSkgIChmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZSkpKQoKICAgIDs7IEludm9rZSB0 aGUgZGVmYXVsdCBoYW5kbGVyLCB0byBkaXNwbGF5IHRoZSBkZXN0aW5hdGlvbi4KICAgIChib29r bWFyay1kZWZhdWx0LWhhbmRsZXIgKGJvb2ttYXJrLWdldC1ib29rbWFyayBibWspKQoKICAgIDs7 IERvIHdoYXQgd2FzIGZvcm1lcmx5IHJlbGVnYXRlZCB0byB0aGUgYWZ0ZXItanVtcCBob29rLgog ICAgKHVubGVzcyAoZGVyaXZlZC1tb2RlLXAgJ3BkZi12aWV3LW1vZGUpIChwZGYtdmlldy1tb2Rl KSkKICAgICh3aXRoLXNlbGVjdGVkLXdpbmRvdyAob3IgKGdldC1idWZmZXItd2luZG93IChjdXJy ZW50LWJ1ZmZlcikgMCkgIChzZWxlY3RlZC13aW5kb3cpKQogICAgICAod2hlbiBzaXplIChzZXRx LWxvY2FsIHBkZi12aWV3LWRpc3BsYXktc2l6ZSBzaXplKSkKICAgICAgKHdoZW4gc2xpY2UgKGFw cGx5ICdwZGYtdmlldy1zZXQtc2xpY2Ugc2xpY2UpKQogICAgICAod2hlbiAobnVtYmVycCBwYWdl KSAocGRmLXZpZXctZ290by1wYWdlIHBhZ2UpKQogICAgICAod2hlbiBvcmlnaW4KICAgICAgICAo bGV0ICgoc2l6ZSAocGRmLXZpZXctaW1hZ2Utc2l6ZSB0KSkpCiAgICAgICAgICAoaW1hZ2Utc2V0 LXdpbmRvdy1oc2Nyb2xsCiAgICAgICAgICAgKHJvdW5kICgvICgqIChjYXIgb3JpZ2luKSAoY2Fy IHNpemUpKSAoZnJhbWUtY2hhci13aWR0aCkpKSkKICAgICAgICAgIChpbWFnZS1zZXQtd2luZG93 LXZzY3JvbGwKICAgICAgICAgICAocm91bmQgKC8gKCogKGNkciBvcmlnaW4pIChjZHIgc2l6ZSkp IChpZiBwZGYtdmlldy1oYXZlLWltYWdlLW1vZGUtcGl4ZWwtdnNjcm9sbAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lLWNoYXItaGVpZ2h0KSkp KSkpKSkpKQoKCjs7IDYuIENhbGwgdGhlIGRlZmF1bHQgZGlzcGxheSBmdW5jdGlvbiBkaXJlY3Rs eS4KOzsKKGRlZnVuIHBkZi12aWV3LWJvb2ttYXJrLWp1bXAtaGFuZGxlciAoYm1rKQogICIuLi4i CiAgKGxldCAoKHBhZ2UgICAgKGJvb2ttYXJrLXByb3AtZ2V0IGJtayAncGFnZSkpCiAgICAgICAg KHNsaWNlICAgKGJvb2ttYXJrLXByb3AtZ2V0IGJtayAnc2xpY2UpKQogICAgICAgIChzaXplICAg IChib29rbWFyay1wcm9wLWdldCBibWsgJ3NpemUpKQogICAgICAgIChvcmlnaW4gIChib29rbWFy ay1wcm9wLWdldCBibWsgJ29yaWdpbikpCiAgICAgICAgKGZpbGUgICAgKGJvb2ttYXJrLXByb3At Z2V0IGJtayAnZmlsZW5hbWUpKSkKICAgIChzZXQtYnVmZmVyIChvciAoZmluZC1idWZmZXItdmlz aXRpbmcgZmlsZSkgIChmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZSkpKQoKICAgIDs7IERpc3BsYXkg YnVmZmVyIHVzaW5nIGRlZmF1bHQgZGlzcGxheSBmdW5jdGlvbiwgaW4gYGJvb2ttYXJrLWp1bXAt ZGlzcGxheS1mdW5jdGlvbicuCiAgICAoc2F2ZS1jdXJyZW50LWJ1ZmZlciAoZnVuY2FsbCBib29r bWFyay1qdW1wLWRpc3BsYXktZnVuY3Rpb24gKGN1cnJlbnQtYnVmZmVyKSkpCgogICAgOzsgRG8g d2hhdCB3YXMgZm9ybWVybHkgcmVsZWdhdGVkIHRvIHRoZSBhZnRlci1qdW1wIGhvb2suCiAgICAo dW5sZXNzIChkZXJpdmVkLW1vZGUtcCAncGRmLXZpZXctbW9kZSkgKHBkZi12aWV3LW1vZGUpKQog ICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IChvciAoZ2V0LWJ1ZmZlci13aW5kb3cgKGN1cnJlbnQt YnVmZmVyKSAwKSAgKHNlbGVjdGVkLXdpbmRvdykpCiAgICAgICh3aGVuIHNpemUgKHNldHEtbG9j YWwgcGRmLXZpZXctZGlzcGxheS1zaXplIHNpemUpKQogICAgICAod2hlbiBzbGljZSAoYXBwbHkg J3BkZi12aWV3LXNldC1zbGljZSBzbGljZSkpCiAgICAgICh3aGVuIChudW1iZXJwIHBhZ2UpIChw ZGYtdmlldy1nb3RvLXBhZ2UgcGFnZSkpCiAgICAgICh3aGVuIG9yaWdpbgogICAgICAgIChsZXQg KChzaXplIChwZGYtdmlldy1pbWFnZS1zaXplIHQpKSkKICAgICAgICAgIChpbWFnZS1zZXQtd2lu ZG93LWhzY3JvbGwKICAgICAgICAgICAocm91bmQgKC8gKCogKGNhciBvcmlnaW4pIChjYXIgc2l6 ZSkpIChmcmFtZS1jaGFyLXdpZHRoKSkpKQogICAgICAgICAgKGltYWdlLXNldC13aW5kb3ctdnNj cm9sbAogICAgICAgICAgIChyb3VuZCAoLyAoKiAoY2RyIG9yaWdpbikgKGNkciBzaXplKSkgKGlm IHBkZi12aWV3LWhhdmUtaW1hZ2UtbW9kZS1waXhlbC12c2Nyb2xsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJhbWUtY2hhci1oZWlnaHQpKSkpKSkp KSkpCgoKOzsgNy4gQ2FsbCBhIGRpZmZlcmVudCBkaXNwbGF5IGZ1bmN0aW9uIGRpcmVjdGx5Lgo7 OwooZGVmdW4gcGRmLXZpZXctYm9va21hcmstanVtcC1oYW5kbGVyIChibWspCiAgIi4uLiIKICAo bGV0ICgocGFnZSAgICAoYm9va21hcmstcHJvcC1nZXQgYm1rICdwYWdlKSkKICAgICAgICAoc2xp Y2UgICAoYm9va21hcmstcHJvcC1nZXQgYm1rICdzbGljZSkpCiAgICAgICAgKHNpemUgICAgKGJv b2ttYXJrLXByb3AtZ2V0IGJtayAnc2l6ZSkpCiAgICAgICAgKG9yaWdpbiAgKGJvb2ttYXJrLXBy b3AtZ2V0IGJtayAnb3JpZ2luKSkKICAgICAgICAoZmlsZSAgICAoYm9va21hcmstcHJvcC1nZXQg Ym1rICdmaWxlbmFtZSkpKQogICAgKHNldC1idWZmZXIgKG9yIChmaW5kLWJ1ZmZlci12aXNpdGlu ZyBmaWxlKSAgKGZpbmQtZmlsZS1ub3NlbGVjdCBmaWxlKSkpCgogICAgOzsgRGlzcGxheSBidWZm ZXIgdXNpbmcgYW5vdGhlciBkaXNwbGF5IGZ1bmN0aW9uIChkaXNwbGF5IGluIGFub3RoZXIgdGFi KS4KICAgIChzYXZlLWN1cnJlbnQtYnVmZmVyIChzd2l0Y2gtdG8tYnVmZmVyLW90aGVyLXRhYiAo Y3VycmVudC1idWZmZXIpKSkKCiAgICA7OyBEbyB3aGF0IHdhcyBmb3JtZXJseSByZWxlZ2F0ZWQg dG8gdGhlIGFmdGVyLWp1bXAgaG9vay4KICAgICh1bmxlc3MgKGRlcml2ZWQtbW9kZS1wICdwZGYt dmlldy1tb2RlKSAocGRmLXZpZXctbW9kZSkpCiAgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgKG9y IChnZXQtYnVmZmVyLXdpbmRvdyAoY3VycmVudC1idWZmZXIpIDApICAoc2VsZWN0ZWQtd2luZG93 KSkKICAgICAgKHdoZW4gc2l6ZSAoc2V0cS1sb2NhbCBwZGYtdmlldy1kaXNwbGF5LXNpemUgc2l6 ZSkpCiAgICAgICh3aGVuIHNsaWNlIChhcHBseSAncGRmLXZpZXctc2V0LXNsaWNlIHNsaWNlKSkK ICAgICAgKHdoZW4gKG51bWJlcnAgcGFnZSkgKHBkZi12aWV3LWdvdG8tcGFnZSBwYWdlKSkKICAg ICAgKHdoZW4gb3JpZ2luCiAgICAgICAgKGxldCAoKHNpemUgKHBkZi12aWV3LWltYWdlLXNpemUg dCkpKQogICAgICAgICAgKGltYWdlLXNldC13aW5kb3ctaHNjcm9sbAogICAgICAgICAgIChyb3Vu ZCAoLyAoKiAoY2FyIG9yaWdpbikgKGNhciBzaXplKSkgKGZyYW1lLWNoYXItd2lkdGgpKSkpCiAg ICAgICAgICAoaW1hZ2Utc2V0LXdpbmRvdy12c2Nyb2xsCiAgICAgICAgICAgKHJvdW5kICgvICgq IChjZHIgb3JpZ2luKSAoY2RyIHNpemUpKSAoaWYgcGRmLXZpZXctaGF2ZS1pbWFnZS1tb2RlLXBp eGVsLXZzY3JvbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChmcmFtZS1jaGFyLWhlaWdodCkpKSkpKSkpKSkK --_005_SJ0PR10MB5488B76B824B691EC228B84BF3669SJ0PR10MB5488namp_--