From nobody Fri May 17 06:54:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+86677+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+86677+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1644908889; cv=none; d=zohomail.com; s=zohoarc; b=XWg11omL6zvOLaYsXmS9kKzrMWjESoxv9ITyuU0+XaTZgSRcCQsq8JRRshtJuIFG3aRHKpFkvslgTRoMQwo++inMlmXrfnjCIrG0uQ7A6I8siXktiX5H8XaTV9CWKmqdbbwNAcuh01PngSOfHctCoc68nBxOZk7PGNMvCv7dUk4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1644908889; h=Content-Type:Cc:Date:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Sender:Subject:To; bh=Q1c/8wFNFKxyfwvF8p+b34YrOOizP6BKOOMzWhvau/k=; b=hKAZrl1ql15YAupG159RsBN+/IenY3nL1ATSDL3c+suM+nz9n83a0woqQ4gj+Tv3/qAS2Vv9woK33iz5bzeKTdXOmQ6EjAXuoe08wJ724Wt4lS12kA4LMVsZMKItyZM86fyopVpxvF/L4IJwy3whwsKZ8AA4BMxSkFaeCC5XoyA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+86677+1787277+3901457@groups.io Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1644908889413255.23090370454133; Mon, 14 Feb 2022 23:08:09 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id Z7rJYY1788612xnbSjBAEPEQ; Mon, 14 Feb 2022 23:08:08 -0800 X-Received: from loongson.cn (loongson.cn [114.242.206.163]) by mx.groups.io with SMTP id smtpd.web08.6548.1644906488490297792 for ; Mon, 14 Feb 2022 22:28:09 -0800 X-Received: by ajax-webmail-mail.loongson.cn (Coremail) ; Tue, 15 Feb 2022 14:28:05 +0800 (GMT+08:00) X-Originating-IP: [10.40.23.130] Date: Tue, 15 Feb 2022 14:28:05 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: "liuyang" To: devel@edk2.groups.io Cc: ray.ni@intel.com Subject: [edk2-devel] Please comment on the XhciDxe driver and UsbMassStorageDxe driver optimization suggestions X-Priority: 3 X-CM-CTRLDATA: HPhdymZvb3Rlcl9odG09MjIxMDA6MTAwMg== MIME-Version: 1.0 Message-ID: <26ee455a.77d4.17efc111565.Coremail.liuyang@loongson.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID: AQAAf9Cx7uD1RwtigJ4BAA--.1308W X-CM-SenderInfo: 5olx5ttqj6z05rqj20fqof0/1tbiAQASEV3QvO2OtwAAsn X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWkKw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,liuyang@loongson.cn X-Gm-Message-State: KnS2kBBvRWWPzl80dbv0Tz3ex1787277AA= Content-Type: multipart/alternative; boundary="----=_Part_102529_553069211.1644906485089" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1644908888; bh=Q1c/8wFNFKxyfwvF8p+b34YrOOizP6BKOOMzWhvau/k=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=NmcwNpCeTfQ0Q88pQQVUGw2GnZUYX220i3te5vj1BwBhFdfOh0e6e7f6erZG6fNMM1o +0iNnKiJEsyeUrOgYt6Mk7XnQjKFRmZLDi1BlFtXwbawDy40GP2WU2yF9hdDCISBu/vJ1 0hxGbgrW9ybEEPbCFF3Xdg2zbRoMO16BJLE= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1644908891577100001 ------=_Part_102529_553069211.1644906485089 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Hello, Recently, we found that when we plug and remove USB3.0 devices quickly unde= r UEFI Shell on LoongArch platform,=20 there will be a lag of about 3~15 minutes (the keyboard and mouse do not re= flect under Setup), which looks like the system has halted. Here we find two possible areas that can be improved.Please take a look and= comment. In xhcidxe driver, XhcBulkTransfer will be called and XhcTransfer is calle= d inside. Its function is to submit a new transaction to a target USB devic= e=20 If we unplug the USB device at this time, the xhci driver will call Recover= yStatus =3D XhcDequeueTrbFromEndpoint(Xhc, Urb); Whose function is Abort t= he transfer=20 by dequeueing of the TD. is the function required? Because the USB device = is no longer on the USB port at this time, and the process is relatively sl= ow,=20 can we change the code of this part into the following form without using t= his function: diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c b/MdeModulePkg/Bus/Pci/Xhc= iDxe/Xhci.c index 9b26e46a..d877b0f6 100644 --- a/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c +++ b/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c @@ -716,6 +716,7 @@ ON_EXIT: return Status; } =20 +#if 0 /**=20 Submits a new transaction to a target USB device. =20 @@ -784,7 +785,9 @@ XhcTransfer ( // =20 // The transfer timed out. Abort the transfer by dequeueing of the TD.=20 // =20 RecoveryStatus =3D XhcDequeueTrbFromEndpoint(Xhc, Urb); if (RecoveryStatus =3D=3D EFI_ALREADY_STARTED) { // // The URB is finished just before stopping endpoint. @@ -813,6 +816,7 @@ XhcTransfer ( XhcFreeUrb (Xhc, Urb); return Status; } +#endif =20 /**=20 Submits control transfer to a target USB device. @@ -855,6 +859,7 @@ XhcControlTransfer ( ) =20 { USB_XHCI_INSTANCE *Xhc; + URB *Urb; UINT8 Endpoint; UINT8 Index; UINT8 DescriptorType; @@ -865,6 +870,7 @@ XhcControlTransfer ( EFI_USB_HUB_DESCRIPTOR *HubDesc; EFI_TPL OldTpl; EFI_STATUS Status; + EFI_STATUS RecoveryStatus; UINTN MapSize; EFI_USB_PORT_STATUS PortStatus; UINT32 State; @@ -971,6 +977,8 @@ XhcControlTransfer ( // combination of Ep addr and its direction. // Endpoint =3D (UINT8) (0 | ((TransferDirection =3D=3D EfiUsbDataIn) ? 0x8= 0 : 0)); + +#if 0 Status =3D XhcTransfer ( Xhc, DeviceAddress, @@ -988,6 +996,49 @@ XhcControlTransfer ( if (EFI_ERROR (Status)) { goto ON_EXIT; } +#endif + +#if 1 + Urb =3D XhcCreateUrb ( + Xhc, + DeviceAddress, + Endpoint, + DeviceSpeed, + MaximumPacketLength, + XHC_CTRL_TRANSFER, + Request, + Data, + *DataLength, + NULL, + NULL + ); + + if (Urb =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "XhcControlTransfer: failed to create URB!\n")); + Status =3D EFI_OUT_OF_RESOURCES; + goto ON_EXIT; + } + + Status =3D XhcExecTransfer (Xhc, FALSE, Urb, Timeout); + + *TransferResult =3D Urb->Result; + *DataLength =3D Urb->Completed; + + if (*TransferResult =3D=3D EFI_USB_NOERROR) { + Status =3D EFI_SUCCESS; + } else if (*TransferResult =3D=3D EFI_USB_ERR_STALL) { + RecoveryStatus =3D XhcRecoverHaltedEndpoint(Xhc, Urb); + + if (EFI_ERROR (RecoveryStatus)) { + DEBUG ((EFI_D_VERBOSE, "XhcControlTransfer: XhcRecoverHaltedEndpoint= failed\n")); + } + Status =3D EFI_DEVICE_ERROR; + } + + Xhc->PciIo->Flush (Xhc->PciIo); + XhcFreeUrb (Xhc, Urb); + +#endif // // Hook Get_Descriptor request from UsbBus as we need evaluate context a= nd configure endpoint. @@ -1223,9 +1274,11 @@ XhcBulkTransfer ( ) { USB_XHCI_INSTANCE *Xhc; + URB *Urb; UINT8 SlotId; EFI_STATUS Status; EFI_TPL OldTpl; + EFI_STATUS RecoveryStatus; =20 // // Validate the parameters @@ -1270,6 +1323,7 @@ XhcBulkTransfer ( // Create a new URB, insert it into the asynchronous // schedule list, then poll the execution status. // +#if 0 Status =3D XhcTransfer ( Xhc, DeviceAddress, @@ -1283,6 +1337,46 @@ XhcBulkTransfer ( Timeout, TransferResult ); +#endif + + Urb =3D XhcCreateUrb ( + Xhc, + DeviceAddress, + EndPointAddress, + DeviceSpeed, + MaximumPacketLength, + XHC_BULK_TRANSFER, + NULL, + Data[0], + *DataLength, + NULL, + NULL + ); + + if (Urb =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "XhcBulkTransfer: failed to create URB!\n")); + Status =3D EFI_OUT_OF_RESOURCES; + goto ON_EXIT; + } + + Status =3D XhcExecTransfer (Xhc, FALSE, Urb, Timeout); + + *TransferResult =3D Urb->Result; + *DataLength =3D Urb->Completed; + + if (*TransferResult =3D=3D EFI_USB_NOERROR) { + Status =3D EFI_SUCCESS; + } else if (*TransferResult =3D=3D EFI_USB_ERR_STALL) { + RecoveryStatus =3D XhcRecoverHaltedEndpoint(Xhc, Urb); + + if (EFI_ERROR (RecoveryStatus)) { + DEBUG ((EFI_D_VERBOSE, "XhcControlTransfer: XhcRecoverHaltedEndpoint= failed\n")); + } + Status =3D EFI_DEVICE_ERROR; + }=20 + + Xhc->PciIo->Flush (Xhc->PciIo); + XhcFreeUrb (Xhc, Urb); =20 ON_EXIT: if (EFI_ERROR (Status)) { @@ -1498,9 +1592,11 @@ XhcSyncInterruptTransfer ( ) { USB_XHCI_INSTANCE *Xhc; + URB *Urb; UINT8 SlotId; EFI_STATUS Status; EFI_TPL OldTpl; + EFI_STATUS RecoveryStatus; =20 // // Validates parameters @@ -1540,6 +1636,7 @@ XhcSyncInterruptTransfer ( goto ON_EXIT; } =20 +#if 0 Status =3D XhcTransfer ( Xhc, DeviceAddress, @@ -1553,6 +1650,45 @@ XhcSyncInterruptTransfer ( Timeout, TransferResult ); +#endif + =20 + Urb =3D XhcCreateUrb ( + Xhc, + DeviceAddress, + EndPointAddress, + DeviceSpeed, + MaximumPacketLength, + XHC_INT_TRANSFER_SYNC, + NULL, + Data, + *DataLength, + NULL, + NULL + ); + + if (Urb =3D=3D NULL) { + DEBUG ((EFI_D_VERBOSE, "XhcSyncInterruptTransfer: failed to create URB= \n")); + Status =3D EFI_OUT_OF_RESOURCES; + goto ON_EXIT; + } + + Status =3D XhcExecTransfer (Xhc, FALSE, Urb, Timeout); + + *TransferResult =3D Urb->Result; + *DataLength =3D Urb->Completed; + + if (*TransferResult =3D=3D EFI_USB_NOERROR) { + Status =3D EFI_SUCCESS; + } else if (*TransferResult =3D=3D EFI_USB_ERR_STALL) { + RecoveryStatus =3D XhcRecoverHaltedEndpoint(Xhc, Urb); = =20 + if (EFI_ERROR (RecoveryStatus)) { + DEBUG ((EFI_D_VERBOSE, "XhcSyncInterruptTransfer: XhcRecoverHaltedEn= dpoint failed\n")); + } + Status =3D EFI_DEVICE_ERROR; + } + + Xhc->PciIo->Flush (Xhc->PciIo); + XhcFreeUrb (Xhc, Urb); =20 ON_EXIT: if (EFI_ERROR (Status)) { --=20 2.27.0 Another point worth noteing is that in the UsbMassStorageDxe driver,if the = USB device is pulled out during UsbBootExecCmdRetry, the UsbBootExecCmd wi= ll repeatedly return Timeout.So, is it more reasonable to change the code t= o the following format: diff --git a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.c b/MdeModu= lePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.c index eb8f8e81..30586406 100644 --- a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.c +++ b/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.c @@ -52,6 +52,7 @@ UsbBootRequestSense ( SenseCmd.Lun =3D (UINT8) (USB_BOOT_LUN (UsbMass->Lun)); SenseCmd.AllocLen =3D (UINT8) sizeof (USB_BOOT_REQUEST_SENSE_DATA); =20 + Status =3D Transport->ExecCommand ( UsbMass->Context, &SenseCmd, @@ -198,7 +199,7 @@ UsbBootExecCmd ( =20 if (Status =3D=3D EFI_TIMEOUT) { DEBUG ((EFI_D_ERROR, "UsbBootExecCmd: %r to Exec 0x%x Cmd\n", Status, = *(UINT8 *)Cmd)); - return EFI_TIMEOUT; + return EFI_DEVICE_ERROR; } =20 // @@ -213,7 +214,8 @@ UsbBootExecCmd ( // If command execution failed, then retrieve error info via sense reque= st. // DEBUG ((EFI_D_ERROR, "UsbBootExecCmd: %r to Exec 0x%x Cmd (Result =3D %x= )\n", Status, *(UINT8 *)Cmd, CmdResult)); - return UsbBootRequestSense (UsbMass); + //return UsbBootRequestSense (UsbMass); + return EFI_SUCCESS; } =20 =20 @@ -251,10 +253,12 @@ UsbBootExecCmdWithRetry ( { EFI_STATUS Status; UINTN Retry; - EFI_EVENT TimeoutEvt; + //EFI_EVENT TimeoutEvt; =20 - Retry =3D 0; + //Retry =3D 0; Status =3D EFI_SUCCESS; + +#if 0 Status =3D gBS->CreateEvent ( EVT_TIMER, TPL_CALLBACK, @@ -271,6 +275,7 @@ UsbBootExecCmdWithRetry ( goto EXIT; } =20 + // // Execute the cmd and retry if it fails. // @@ -307,6 +312,24 @@ EXIT: gBS->CloseEvent (TimeoutEvt); } =20 +#endif + + for (Retry =3D 0; Retry < USB_BOOT_COMMAND_RETRY; Retry++) { + Status =3D UsbBootExecCmd ( + UsbMass, + Cmd, + CmdLen, + DataDir, + Data, + DataLen, + Timeout + ); + + if (Status =3D=3D EFI_SUCCESS || Status =3D=3D EFI_NO_MEDIA || Status = =3D=3D EFI_MEDIA_CHANGED) { + break; + } + } + return Status; } =20 @@ -540,6 +563,7 @@ UsbBootReadCapacity ( // // Get sense data =20 // + DbgPrint (EFI_D_INFO,"Sorry,the BlockSize now is 0!!!!\n"); return UsbBootRequestSense (UsbMass); } else { Media->BlockSize =3D BlockSize; @@ -692,6 +716,7 @@ UsbBootDetectMedia ( EFI_BLOCK_IO_MEDIA *Media; UINT8 CmdSet; EFI_STATUS Status; + EFI_TPL OldTpl; =20 Media =3D &UsbMass->BlockIoMedia; =20 @@ -754,7 +779,10 @@ UsbBootDetectMedia ( // This function is called from: // Block I/O Protocol APIs, which run at TPL_CALLBACK. // DriverBindingStart(), which raises to TPL_CALLBACK. - ASSERT (EfiGetCurrentTpl () =3D=3D TPL_CALLBACK); + //ASSERT (EfiGetCurrentTpl () =3D=3D TPL_CALLBACK); + OldTpl =3D EfiGetCurrentTpl (); + gBS->RestoreTPL (TPL_CALLBACK); + =20 // // When it is called from DriverBindingStart(), below reinstall fails. @@ -767,6 +795,9 @@ UsbBootDetectMedia ( &UsbMass->BlockIo ); =20 + ASSERT (EfiGetCurrentTpl () =3D=3D TPL_CALLBACK); + gBS->RaiseTPL (OldTpl); + // // Reset MediaId after reinstalling Block I/O Protocol. // diff --git a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.h b/MdeModu= lePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.h index 64b2985e..c502a363 100644 --- a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.h +++ b/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.h @@ -72,7 +72,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER= EXPRESS OR IMPLIED. // // Retry mass command times, set by experience // -#define USB_BOOT_COMMAND_RETRY 5 +#define USB_BOOT_COMMAND_RETRY 1 =20 Thank you Look forward to your reply. -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#86677): https://edk2.groups.io/g/devel/message/86677 Mute This Topic: https://groups.io/mt/89156195/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- ------=_Part_102529_553069211.1644906485089 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PHAgc3R5bGU9ImZvbnQtZmFtaWx5OlNpbVN1bjsiPgoJPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5 OuWui+S9kywgYXJpYWwsIFZlcmRhbmEsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7d2hpdGUt c3BhY2U6bm9ybWFsOyI+PGJyPgo8L3NwYW4+IAo8L3A+CjxwIHN0eWxlPSJmb250LWZhbWlseTpT aW1TdW47Ij4KCTxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDtmb250LXNpemU6MTRweDt3 aGl0ZS1zcGFjZTpub3JtYWw7Ij5IZWxsbyw8L3NwYW4+IAo8L3A+CjxwIHN0eWxlPSJmb250LWZh bWlseTpTaW1TdW47Ij4KCTxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDtmb250LXNpemU6 MTRweDt3aGl0ZS1zcGFjZTpub3JtYWw7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7 Ij5SZWNlbnRseSwgd2UgZm91bmQgdGhhdCB3aGVuIHdlIHBsdWcgYW5kIHJlbW92ZSBVU0IzLjAg ZGV2aWNlcyBxdWlja2x5IHVuZGVyIFVFRkkgU2hlbGwgb24gTG9vbmdBcmNoIHBsYXRmb3JtLCZu YnNwOzwvc3Bhbj48L3NwYW4+IAo8L3A+CjxwIHN0eWxlPSJmb250LWZhbWlseTpTaW1TdW47Ij4K CTxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDtmb250LXNpemU6MTRweDt3aGl0ZS1zcGFj ZTpub3JtYWw7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij50aGVyZSB3aWxsIGJl IGEgbGFnIG9mIGFib3V0IDN+MTUgbWludXRlcyAodGhlIGtleWJvYXJkIGFuZCBtb3VzZSBkbyBu b3QgcmVmbGVjdCB1bmRlciBTZXR1cCksIHdoaWNoIGxvb2tzIGxpa2UgdGhlJm5ic3A7c3lzdGVt IGhhcyBoYWx0ZWQuPC9zcGFuPjwvc3Bhbj4gCjwvcD4KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OlNp bVN1bjsiPgoJPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OuWui+S9kywgYXJpYWwsIFZlcmRhbmEs IHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7d2hpdGUtc3BhY2U6bm9ybWFsOyI+PHNwYW4gc3R5 bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+PGJyPgo8L3NwYW4+PC9zcGFuPiAKPC9wPgo8cCBzdHls ZT0iZm9udC1mYW1pbHk6U2ltU3VuOyI+Cgk8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7 Zm9udC1zaXplOjE0cHg7d2hpdGUtc3BhY2U6bm9ybWFsOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFt aWx5OkFyaWFsOyI+SGVyZSB3ZSBmaW5kIHR3byBwb3NzaWJsZSBhcmVhcyB0aGF0IGNhbiBiZSBp bXByb3ZlZC5QbGVhc2UgdGFrZSBhIGxvb2sgYW5kIGNvbW1lbnQuPC9zcGFuPjwvc3Bhbj4gCjwv cD4KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OlNpbVN1bjsiPgoJPHNwYW4gc3R5bGU9ImZvbnQtZmFt aWx5OuWui+S9kywgYXJpYWwsIFZlcmRhbmEsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7d2hp dGUtc3BhY2U6bm9ybWFsOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+PGJyPgo8 L3NwYW4+PC9zcGFuPiAKPC9wPgo8cCBzdHlsZT0iZm9udC1mYW1pbHk6U2ltU3VuOyI+Cgk8c3Bh biBzdHlsZT0iZm9udC1mYW1pbHk65a6L5L2TLCBhcmlhbCwgVmVyZGFuYSwgc2Fucy1zZXJpZjtm b250LXNpemU6MTRweDt3aGl0ZS1zcGFjZTpub3JtYWw7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1p bHk6QXJpYWw7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij5JbiB4aGNpZHhlIGRy aXZlciw8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+Jm5ic3A7WGhjQnVs a1RyYW5zZmVyJm5ic3A7d2lsbCBiZSBjYWxsZWQgYW5kJm5ic3A7WGhjVHJhbnNmZXIgJm5ic3A7 aXMgY2FsbGVkIGluc2lkZS4mbmJzcDtJdHMgZnVuY3Rpb24gaXMgdG8gc3VibWl0IGEgbmV3IHRy YW5zYWN0aW9uIHRvIGEgdGFyZ2V0IFVTQiBkZXZpY2UmbmJzcDs8L3NwYW4+PC9zcGFuPjwvc3Bh bj4gCjwvcD4KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OlNpbVN1bjsiPgoJPHNwYW4gc3R5bGU9ImZv bnQtZmFtaWx5OkFyaWFsO2ZvbnQtc2l6ZToxNHB4O3doaXRlLXNwYWNlOm5vcm1hbDsiPjxzcGFu IHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlh bDsiPklmIHdlIHVucGx1ZyB0aGUgVVNCIGRldmljZSBhdCB0aGlzIHRpbWUsIHRoZSB4aGNpIGRy aXZlciB3aWxsIGNhbGwgUmVjb3ZlcnlTdGF0dXMmbmJzcDs9ICZuYnNwO1hoY0RlcXVldWVUcmJG cm9tRW5kcG9pbnQoWGhjLCBVcmIpOyZuYnNwO1dob3NlIGZ1bmN0aW9uIGlzIEFib3J0IHRoZSB0 cmFuc2ZlciZuYnNwOzwvc3Bhbj48L3NwYW4+PC9zcGFuPiAKPC9wPgo8cCBzdHlsZT0iZm9udC1m YW1pbHk6U2ltU3VuOyI+Cgk8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Zm9udC1zaXpl OjE0cHg7d2hpdGUtc3BhY2U6bm9ybWFsOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFs OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+YnkgZGVxdWV1ZWluZyBvZiB0aGUg VEQuJm5ic3A7PC9zcGFuPjwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFy aWFsO2ZvbnQtc2l6ZToxNHB4OyI+aXMgdGhlIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1p bHk6QXJpYWw7Zm9udC1zaXplOjE0cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7 Ij5mdW5jdGlvbiByZXF1aXJlZD8gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlh bDsiPiZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij5CZWNhdXNl IHRoZSBVU0IgZGV2aWNlIGlzIG5vIGxvbmdlciBvbiB0aGUgVVNCIHBvcnQgYXQgdGhpcyB0aW1l LCBhbmQgdGhlIHByb2Nlc3MgaXMgcmVsYXRpdmVseSBzbG93LCZuYnNwOzwvc3Bhbj48L3NwYW4+ CjwvcD4KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OlNpbVN1bjsiPgoJPHNwYW4gc3R5bGU9ImZvbnQt ZmFtaWx5OkFyaWFsO2ZvbnQtc2l6ZToxNHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFy aWFsOyI+Y2FuIHdlIGNoYW5nZSB0aGUgY29kZSBvZiB0aGlzIHBhcnQgaW50byB0aGUgZm9sbG93 aW5nIGZvcm0gd2l0aG91dCB1c2luZyB0aGlzIGZ1bmN0aW9uPC9zcGFuPjxzcGFuIHN0eWxlPSJm b250LWZhbWlseTpBcmlhbDsiPjo8L3NwYW4+PC9zcGFuPgo8L3A+CjxwIHN0eWxlPSJmb250LWZh bWlseTpTaW1TdW47Ij4KCTxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDtmb250LXNpemU6 MTRweDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDsiPjxicj4KPC9zcGFuPjwvc3Bh bj4KPC9wPgo8cCBzdHlsZT0iZm9udC1mYW1pbHk6U2ltU3VuOyI+Cgk8c3BhbiBzdHlsZT0iZm9u dC1mYW1pbHk6QXJpYWw7Zm9udC1zaXplOjE0cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6 QXJpYWw7Ij5kaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0J1cy9QY2kvWGhjaUR4ZS9YaGNpLmMg Yi9NZGVNb2R1bGVQa2cvQnVzL1BjaS9YaGNpRHhlL1hoY2kuYzxicj4KaW5kZXggOWIyNmU0NmEu LmQ4NzdiMGY2IDEwMDY0NDxicj4KLS0tIGEvTWRlTW9kdWxlUGtnL0J1cy9QY2kvWGhjaUR4ZS9Y aGNpLmM8YnI+CisrKyBiL01kZU1vZHVsZVBrZy9CdXMvUGNpL1hoY2lEeGUvWGhjaS5jPGJyPgpA QCAtNzE2LDYgKzcxNiw3IEBAIE9OX0VYSVQ6PGJyPgombmJzcDsgJm5ic3A7cmV0dXJuIFN0YXR1 czs8YnI+CiZuYnNwO308YnI+CiZuYnNwOzxicj4KKyNpZiAwPGJyPgombmJzcDsvKiombmJzcDs8 YnI+CiZuYnNwOyAmbmJzcDtTdWJtaXRzIGEgbmV3IHRyYW5zYWN0aW9uIHRvIGEgdGFyZ2V0IFVT QiBkZXZpY2UuPGJyPgombmJzcDs8YnI+CkBAIC03ODQsNyArNzg1LDkgQEAgWGhjVHJhbnNmZXIg KDxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsvLyAmbmJzcDs8YnI+CiZuYnNwOyAmbmJzcDsgJm5i c3A7Ly8gVGhlIHRyYW5zZmVyIHRpbWVkIG91dC4gQWJvcnQgdGhlIHRyYW5zZmVyIGJ5IGRlcXVl dWVpbmcgb2YgdGhlIFRELiZuYnNwOzxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsvLyAmbmJzcDs8 YnI+CiZuYnNwOyAmbmJzcDsgJm5ic3A7UmVjb3ZlcnlTdGF0dXMgPSBYaGNEZXF1ZXVlVHJiRnJv bUVuZHBvaW50KFhoYywgVXJiKTs8YnI+CiZuYnNwOyAmbmJzcDsgJm5ic3A7aWYgKFJlY292ZXJ5 U3RhdHVzID09IEVGSV9BTFJFQURZX1NUQVJURUQpIHs8YnI+CiZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOy8vPGJyPgombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsvLyBUaGUgVVJCIGlzIGZp bmlzaGVkIGp1c3QgYmVmb3JlIHN0b3BwaW5nIGVuZHBvaW50Ljxicj4KQEAgLTgxMyw2ICs4MTYs NyBAQCBYaGNUcmFuc2ZlciAoPGJyPgombmJzcDsgJm5ic3A7WGhjRnJlZVVyYiAoWGhjLCBVcmIp Ozxicj4KJm5ic3A7ICZuYnNwO3JldHVybiBTdGF0dXM7PGJyPgombmJzcDt9PGJyPgorI2VuZGlm PGJyPgombmJzcDs8YnI+CiZuYnNwOy8qKiZuYnNwOzxicj4KJm5ic3A7ICZuYnNwO1N1Ym1pdHMg Y29udHJvbCB0cmFuc2ZlciB0byBhIHRhcmdldCBVU0IgZGV2aWNlLjxicj4KQEAgLTg1NSw2ICs4 NTksNyBAQCBYaGNDb250cm9sVHJhbnNmZXIgKDxicj4KJm5ic3A7ICZuYnNwOykgJm5ic3A7Jm5i c3A7PGJyPgombmJzcDt7PGJyPgombmJzcDsgJm5ic3A7VVNCX1hIQ0lfSU5TVEFOQ0UgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgKlhoYzs8YnI+CisgJm5ic3A7VVJCICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAqVXJiOzxi cj4KJm5ic3A7ICZuYnNwO1VJTlQ4ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IEVuZHBvaW50Ozxicj4KJm5ic3A7ICZuYnNwO1VJ TlQ4ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7IEluZGV4Ozxicj4KJm5ic3A7ICZuYnNwO1VJTlQ4ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IERlc2NyaXB0b3JU eXBlOzxicj4KQEAgLTg2NSw2ICs4NzAsNyBAQCBYaGNDb250cm9sVHJhbnNmZXIgKDxicj4KJm5i c3A7ICZuYnNwO0VGSV9VU0JfSFVCX0RFU0NSSVBUT1IgJm5ic3A7Kkh1YkRlc2M7PGJyPgombmJz cDsgJm5ic3A7RUZJX1RQTCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7IE9sZFRwbDs8YnI+CiZuYnNwOyAmbmJzcDtFRklfU1RBVFVTICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO1N0YXR1czs8YnI+Cisg Jm5ic3A7RUZJX1NUQVRVUyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDtSZWNvdmVyeVN0YXR1czs8YnI+CiZuYnNwOyAmbmJzcDtVSU5UTiAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBNYXBT aXplOzxicj4KJm5ic3A7ICZuYnNwO0VGSV9VU0JfUE9SVF9TVEFUVVMgJm5ic3A7ICZuYnNwOyBQ b3J0U3RhdHVzOzxicj4KJm5ic3A7ICZuYnNwO1VJTlQzMiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO1N0YXRlOzxicj4KQEAgLTk3 MSw2ICs5NzcsOCBAQCBYaGNDb250cm9sVHJhbnNmZXIgKDxicj4KPC9zcGFuPjwvc3Bhbj4KPC9w Pgo8ZGl2PgoJPGJyPgo8L2Rpdj4KJm5ic3A7ICZuYnNwOy8vIGNvbWJpbmF0aW9uIG9mIEVwIGFk ZHIgYW5kIGl0cyBkaXJlY3Rpb24uPGJyPgombmJzcDsgJm5ic3A7Ly88YnI+CiZuYnNwOyAmbmJz cDtFbmRwb2ludCA9IChVSU5UOCkgKDAgfCAoKFRyYW5zZmVyRGlyZWN0aW9uID09IEVmaVVzYkRh dGFJbikgPyAweDgwIDogMCkpOzxicj4KKzxicj4KKyNpZiAwPGJyPgombmJzcDsgJm5ic3A7U3Rh dHVzID0gWGhjVHJhbnNmZXIgKDxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7IFhoYyw8YnI+CiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyBEZXZpY2VBZGRyZXNzLDxicj4KQEAgLTk4OCw2ICs5OTYsNDkgQEAg WGhjQ29udHJvbFRyYW5zZmVyICg8YnI+CiZuYnNwOyAmbmJzcDtpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7PGJyPgombmJzcDsgJm5ic3A7ICZuYnNwO2dvdG8gT05fRVhJVDs8YnI+CiZuYnNwOyAm bmJzcDt9PGJyPgorI2VuZGlmPGJyPgorPGJyPgorI2lmIDE8YnI+CisgJm5ic3A7VXJiID0gWGhj Q3JlYXRlVXJiICg8YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO1hoYyw8 YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO0RldmljZUFkZHJlc3MsPGJy PgorICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtFbmRwb2ludCw8YnI+CisgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO0RldmljZVNwZWVkLDxicj4KKyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7TWF4aW11bVBhY2tldExlbmd0aCw8YnI+CisgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO1hIQ19DVFJMX1RSQU5TRkVSLDxicj4KKyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7UmVxdWVzdCw8YnI+CisgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO0RhdGEsPGJyPgorICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsqRGF0YUxlbmd0aCw8YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO05VTEwsPGJyPgorICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtO VUxMPGJyPgorICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDspOzxicj4KKzxicj4K KyAmbmJzcDtpZiAoVXJiID09IE5VTEwpIHs8YnI+CisgJm5ic3A7ICZuYnNwO0RFQlVHICgoREVC VUdfRVJST1IsICJYaGNDb250cm9sVHJhbnNmZXI6IGZhaWxlZCB0byBjcmVhdGUgVVJCIVxuIikp Ozxicj4KKyAmbmJzcDsgJm5ic3A7U3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7PGJyPgor ICZuYnNwOyAmbmJzcDtnb3RvIE9OX0VYSVQ7PGJyPgorICZuYnNwO308YnI+Cis8YnI+CisgJm5i c3A7U3RhdHVzID0gWGhjRXhlY1RyYW5zZmVyIChYaGMsIEZBTFNFLCBVcmIsIFRpbWVvdXQpOzxi cj4KKzxicj4KKyAmbmJzcDsqVHJhbnNmZXJSZXN1bHQgPSBVcmItJmd0O1Jlc3VsdDs8YnI+Cisg Jm5ic3A7KkRhdGFMZW5ndGggJm5ic3A7ICZuYnNwOyA9IFVyYi0mZ3Q7Q29tcGxldGVkOzxicj4K Kzxicj4KKyAmbmJzcDtpZiAoKlRyYW5zZmVyUmVzdWx0ID09IEVGSV9VU0JfTk9FUlJPUikgezxi cj4KKyAmbmJzcDsgJm5ic3A7U3RhdHVzID0gRUZJX1NVQ0NFU1M7PGJyPgorICZuYnNwO30gZWxz ZSBpZiAoKlRyYW5zZmVyUmVzdWx0ID09IEVGSV9VU0JfRVJSX1NUQUxMKSB7PGJyPgorICZuYnNw OyAmbmJzcDtSZWNvdmVyeVN0YXR1cyA9IFhoY1JlY292ZXJIYWx0ZWRFbmRwb2ludChYaGMsIFVy Yik7PGJyPgorPGJyPgorICZuYnNwOyAmbmJzcDtpZiAoRUZJX0VSUk9SIChSZWNvdmVyeVN0YXR1 cykpIHs8YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJzcDtERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICJY aGNDb250cm9sVHJhbnNmZXI6IFhoY1JlY292ZXJIYWx0ZWRFbmRwb2ludCBmYWlsZWRcbiIpKTs8 YnI+CisgJm5ic3A7ICZuYnNwO308YnI+CisgJm5ic3A7ICZuYnNwO1N0YXR1cyA9IEVGSV9ERVZJ Q0VfRVJST1I7PGJyPgorICZuYnNwO308YnI+Cis8YnI+CisgJm5ic3A7WGhjLSZndDtQY2lJby0m Z3Q7Rmx1c2ggKFhoYy0mZ3Q7UGNpSW8pOzxicj4KKyAmbmJzcDtYaGNGcmVlVXJiIChYaGMsIFVy Yik7PGJyPgorPGJyPgorI2VuZGlmPGJyPgo8ZGl2PgoJPGJyPgo8L2Rpdj4KJm5ic3A7ICZuYnNw Oy8vPGJyPgombmJzcDsgJm5ic3A7Ly8gSG9vayBHZXRfRGVzY3JpcHRvciByZXF1ZXN0IGZyb20g VXNiQnVzIGFzIHdlIG5lZWQgZXZhbHVhdGUgY29udGV4dCBhbmQgY29uZmlndXJlIGVuZHBvaW50 Ljxicj4KQEAgLTEyMjMsOSArMTI3NCwxMSBAQCBYaGNCdWxrVHJhbnNmZXIgKDxicj4KJm5ic3A7 ICZuYnNwOyk8YnI+CiZuYnNwO3s8YnI+CiZuYnNwOyAmbmJzcDtVU0JfWEhDSV9JTlNUQU5DRSAm bmJzcDsgJm5ic3A7ICZuYnNwOyAqWGhjOzxicj4KKyAmbmJzcDtVUkIgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICpV cmI7PGJyPgombmJzcDsgJm5ic3A7VUlOVDggJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgU2xvdElkOzxicj4KJm5ic3A7ICZuYnNw O0VGSV9TVEFUVVMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7U3RhdHVzOzxicj4KJm5ic3A7ICZuYnNwO0VGSV9UUEwgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBPbGRUcGw7PGJyPgorICZuYnNwO0VG SV9TVEFUVVMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 UmVjb3ZlcnlTdGF0dXM7PGJyPgombmJzcDs8YnI+CiZuYnNwOyAmbmJzcDsvLzxicj4KJm5ic3A7 ICZuYnNwOy8vIFZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzPGJyPgpAQCAtMTI3MCw2ICsxMzIzLDcg QEAgWGhjQnVsa1RyYW5zZmVyICg8YnI+CiZuYnNwOyAmbmJzcDsvLyBDcmVhdGUgYSBuZXcgVVJC LCBpbnNlcnQgaXQgaW50byB0aGUgYXN5bmNocm9ub3VzPGJyPgombmJzcDsgJm5ic3A7Ly8gc2No ZWR1bGUgbGlzdCwgdGhlbiBwb2xsIHRoZSBleGVjdXRpb24gc3RhdHVzLjxicj4KJm5ic3A7ICZu YnNwOy8vPGJyPgorI2lmIDA8YnI+CiZuYnNwOyAmbmJzcDtTdGF0dXMgPSBYaGNUcmFuc2ZlciAo PGJyPgombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgWGhj LDxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IERl dmljZUFkZHJlc3MsPGJyPgpAQCAtMTI4Myw2ICsxMzM3LDQ2IEBAIFhoY0J1bGtUcmFuc2ZlciAo PGJyPgombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgVGlt ZW91dCw8YnI+CiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyBUcmFuc2ZlclJlc3VsdDxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICk7PGJyPgorI2VuZGlmPGJyPgorPGJyPgorICZuYnNwO1VyYiA9IFhoY0Ny ZWF0ZVVyYiAoPGJyPgorICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtYaGMsPGJy PgorICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtEZXZpY2VBZGRyZXNzLDxicj4K KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7RW5kUG9pbnRBZGRyZXNzLDxicj4K KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7RGV2aWNlU3BlZWQsPGJyPgorICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtNYXhpbXVtUGFja2V0TGVuZ3RoLDxicj4K KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7WEhDX0JVTEtfVFJBTlNGRVIsPGJy PgorICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtOVUxMLDxicj4KKyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7RGF0YVswXSw8YnI+CisgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOypEYXRhTGVuZ3RoLDxicj4KKyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7TlVMTCw8YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwO05VTEw8YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyk7PGJyPgor PGJyPgorICZuYnNwO2lmIChVcmIgPT0gTlVMTCkgezxicj4KKyAmbmJzcDsgJm5ic3A7REVCVUcg KChERUJVR19FUlJPUiwgIlhoY0J1bGtUcmFuc2ZlcjogZmFpbGVkIHRvIGNyZWF0ZSBVUkIhXG4i KSk7PGJyPgorICZuYnNwOyAmbmJzcDtTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzs8YnI+ CjxwPgoJKyAmbmJzcDsgJm5ic3A7Z290byBPTl9FWElUOzxicj4KKyAmbmJzcDt9PGJyPgorPGJy PgorICZuYnNwO1N0YXR1cyA9IFhoY0V4ZWNUcmFuc2ZlciAoWGhjLCBGQUxTRSwgVXJiLCBUaW1l b3V0KTs8YnI+Cis8YnI+CisgJm5ic3A7KlRyYW5zZmVyUmVzdWx0ID0gVXJiLSZndDtSZXN1bHQ7 PGJyPgorICZuYnNwOypEYXRhTGVuZ3RoICZuYnNwOyAmbmJzcDsgPSBVcmItJmd0O0NvbXBsZXRl ZDs8YnI+Cis8YnI+CisgJm5ic3A7aWYgKCpUcmFuc2ZlclJlc3VsdCA9PSBFRklfVVNCX05PRVJS T1IpIHs8YnI+CisgJm5ic3A7ICZuYnNwO1N0YXR1cyA9IEVGSV9TVUNDRVNTOzxicj4KKyAmbmJz cDt9IGVsc2UgaWYgKCpUcmFuc2ZlclJlc3VsdCA9PSBFRklfVVNCX0VSUl9TVEFMTCkgezxicj4K KyAmbmJzcDsgJm5ic3A7UmVjb3ZlcnlTdGF0dXMgPSBYaGNSZWNvdmVySGFsdGVkRW5kcG9pbnQo WGhjLCBVcmIpOzxicj4KKzxicj4KKyAmbmJzcDsgJm5ic3A7aWYgKEVGSV9FUlJPUiAoUmVjb3Zl cnlTdGF0dXMpKSB7PGJyPgorICZuYnNwOyAmbmJzcDsgJm5ic3A7REVCVUcgKChFRklfRF9WRVJC T1NFLCAiWGhjQ29udHJvbFRyYW5zZmVyOiBYaGNSZWNvdmVySGFsdGVkRW5kcG9pbnQgZmFpbGVk XG4iKSk7PGJyPgorICZuYnNwOyAmbmJzcDt9PGJyPgorICZuYnNwOyAmbmJzcDtTdGF0dXMgPSBF RklfREVWSUNFX0VSUk9SOzxicj4KKyAmbmJzcDt9Jm5ic3A7PGJyPgorPGJyPgorICZuYnNwO1ho Yy0mZ3Q7UGNpSW8tJmd0O0ZsdXNoIChYaGMtJmd0O1BjaUlvKTs8YnI+CisgJm5ic3A7WGhjRnJl ZVVyYiAoWGhjLCBVcmIpOzxicj4KJm5ic3A7PGJyPgombmJzcDtPTl9FWElUOjxicj4KJm5ic3A7 ICZuYnNwO2lmIChFRklfRVJST1IgKFN0YXR1cykpIHs8YnI+Cgk8L3A+PGRpdj4KCQlAQCAtMTQ5 OCw5ICsxNTkyLDExIEBAIFhoY1N5bmNJbnRlcnJ1cHRUcmFuc2ZlciAoPGJyPgombmJzcDsgJm5i c3A7KTxicj4KJm5ic3A7ezxicj4KJm5ic3A7ICZuYnNwO1VTQl9YSENJX0lOU1RBTkNFICZuYnNw OyAmbmJzcDsgJm5ic3A7ICpYaGM7PGJyPgorICZuYnNwO1VSQiAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgKlVyYjs8 YnI+CiZuYnNwOyAmbmJzcDtVSU5UOCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBTbG90SWQ7PGJyPgombmJzcDsgJm5ic3A7RUZJ X1NUQVRVUyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtT dGF0dXM7PGJyPgombmJzcDsgJm5ic3A7RUZJX1RQTCAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IE9sZFRwbDs8YnI+CisgJm5ic3A7RUZJX1NU QVRVUyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtSZWNv dmVyeVN0YXR1czs8YnI+CiZuYnNwOzxicj4KJm5ic3A7ICZuYnNwOy8vPGJyPgombmJzcDsgJm5i c3A7Ly8gVmFsaWRhdGVzIHBhcmFtZXRlcnM8YnI+CkBAIC0xNTQwLDYgKzE2MzYsNyBAQCBYaGNT eW5jSW50ZXJydXB0VHJhbnNmZXIgKDxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDtnb3RvIE9OX0VY SVQ7PGJyPgombmJzcDsgJm5ic3A7fTxicj4KJm5ic3A7PGJyPgorI2lmIDA8YnI+CiZuYnNwOyAm bmJzcDtTdGF0dXMgPSBYaGNUcmFuc2ZlciAoPGJyPgombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgWGhjLDxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IERldmljZUFkZHJlc3MsPGJyPgpAQCAtMTU1Myw2ICsx NjUwLDQ1IEBAIFhoY1N5bmNJbnRlcnJ1cHRUcmFuc2ZlciAoPGJyPgombmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgVGltZW91dCw8YnI+CiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBUcmFuc2ZlclJlc3VsdDxicj4K Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICk7PGJyPgor I2VuZGlmPGJyPgorICZuYnNwOzxicj4KKyAmbmJzcDtVcmIgPSBYaGNDcmVhdGVVcmIgKDxicj4K KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7WGhjLDxicj4KKyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7RGV2aWNlQWRkcmVzcyw8YnI+CisgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwO0VuZFBvaW50QWRkcmVzcyw8YnI+CisgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwO0RldmljZVNwZWVkLDxicj4KKyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7TWF4aW11bVBhY2tldExlbmd0aCw8YnI+CisgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwO1hIQ19JTlRfVFJBTlNGRVJfU1lOQyw8YnI+CisgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO05VTEwsPGJyPgorICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDtEYXRhLDxicj4KKyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7KkRhdGFMZW5ndGgsPGJyPgorICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDtOVUxMLDxicj4KKyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7TlVMTDxicj4K KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7KTs8YnI+Cis8YnI+CisgJm5ic3A7 aWYgKFVyYiA9PSBOVUxMKSB7PGJyPgorICZuYnNwOyAmbmJzcDtERUJVRyAoKEVGSV9EX1ZFUkJP U0UsICJYaGNTeW5jSW50ZXJydXB0VHJhbnNmZXI6IGZhaWxlZCB0byBjcmVhdGUgVVJCXG4iKSk7 PGJyPgorICZuYnNwOyAmbmJzcDtTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzs8YnI+Cisg Jm5ic3A7ICZuYnNwO2dvdG8gT05fRVhJVDs8YnI+CisgJm5ic3A7fTxicj4KKzxicj4KKyAmbmJz cDtTdGF0dXMgPSBYaGNFeGVjVHJhbnNmZXIgKFhoYywgRkFMU0UsIFVyYiwgVGltZW91dCk7PGJy PgorPGJyPgorICZuYnNwOypUcmFuc2ZlclJlc3VsdCA9IFVyYi0mZ3Q7UmVzdWx0Ozxicj4KKyAm bmJzcDsqRGF0YUxlbmd0aCAmbmJzcDsgJm5ic3A7ID0gVXJiLSZndDtDb21wbGV0ZWQ7PGJyPgor PGJyPgorICZuYnNwO2lmICgqVHJhbnNmZXJSZXN1bHQgPT0gRUZJX1VTQl9OT0VSUk9SKSB7PGJy PgorICZuYnNwOyAmbmJzcDtTdGF0dXMgPSBFRklfU1VDQ0VTUzs8YnI+CisgJm5ic3A7fSBlbHNl IGlmICgqVHJhbnNmZXJSZXN1bHQgPT0gRUZJX1VTQl9FUlJfU1RBTEwpIHs8YnI+CisgJm5ic3A7 ICZuYnNwO1JlY292ZXJ5U3RhdHVzID0gWGhjUmVjb3ZlckhhbHRlZEVuZHBvaW50KFhoYywgVXJi KTsmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7PGJyPgorICZuYnNwOyAmbmJzcDtpZiAoRUZJX0VSUk9SIChS ZWNvdmVyeVN0YXR1cykpIHs8YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJzcDtERUJVRyAoKEVGSV9E X1ZFUkJPU0UsICJYaGNTeW5jSW50ZXJydXB0VHJhbnNmZXI6IFhoY1JlY292ZXJIYWx0ZWRFbmRw b2ludCBmYWlsZWRcbiIpKTs8YnI+CisgJm5ic3A7ICZuYnNwO308YnI+CisgJm5ic3A7ICZuYnNw O1N0YXR1cyA9IEVGSV9ERVZJQ0VfRVJST1I7PGJyPgorICZuYnNwO308YnI+Cis8YnI+CisgJm5i c3A7WGhjLSZndDtQY2lJby0mZ3Q7Rmx1c2ggKFhoYy0mZ3Q7UGNpSW8pOzxicj4KKyAmbmJzcDtY aGNGcmVlVXJiIChYaGMsIFVyYik7PGJyPgombmJzcDs8YnI+CiZuYnNwO09OX0VYSVQ6PGJyPgom bmJzcDsgJm5ic3A7aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgezxicj4KLS0mbmJzcDs8YnI+CjIu MjcuMDxicj4KCQk8ZGl2PgoJCQk8YnI+CgkJPC9kaXY+CjxzcGFuIHN0eWxlPSJmb250LXNpemU6 MTNweDsiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Zm9udC1zaXplOjEz cHg7Ij5Bbm90aGVyIHBvaW50IHdvcnRoIG5vdGVpbmcgaXMgdGhhdCBpbiB0aGUgVXNiTWFzc1N0 b3JhZ2VEeGUgZHJpdmVyLGlmIHRoZSBVU0IgZGV2aWNlIGlzIHB1bGxlZCBvdXQgZHVyaW5nIFVz YkJvb3RFeGVjQ21kUmV0cnksIHRoZSBVc2JCb290RXhlY0NtZCZuYnNwOzwvc3Bhbj48c3BhbiBz dHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Zm9udC1zaXplOjEzcHg7Ij4mbmJzcDt3aWxsIHJlcGVh dGVkbHkgcmV0dXJuIFRpbWVvdXQuU28sIGlzIGl0IG1vcmUgcmVhc29uYWJsZSB0byBjaGFuZ2Ug dGhlIGNvZGUgdG8gdGhlIGZvbGxvd2luZyBmb3JtYXQ6PC9zcGFuPgoJPC9kaXY+Cgk8cD4KCQk8 YnI+Cgk8L3A+Cgk8cD4KCQlkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTWFz c1N0b3JhZ2VEeGUvVXNiTWFzc0Jvb3QuYyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk1hc3NT dG9yYWdlRHhlL1VzYk1hc3NCb290LmM8YnI+CmluZGV4IGViOGY4ZTgxLi4zMDU4NjQwNiAxMDA2 NDQ8YnI+Ci0tLSBhL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk1hc3NTdG9yYWdlRHhlL1VzYk1h c3NCb290LmM8YnI+CisrKyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk1hc3NTdG9yYWdlRHhl L1VzYk1hc3NCb290LmM8YnI+CkBAIC01Miw2ICs1Miw3IEBAIFVzYkJvb3RSZXF1ZXN0U2Vuc2Ug KDxicj4KJm5ic3A7ICZuYnNwO1NlbnNlQ21kLkx1biAmbmJzcDsgJm5ic3A7ICZuYnNwOz0gKFVJ TlQ4KSAoVVNCX0JPT1RfTFVOIChVc2JNYXNzLSZndDtMdW4pKTs8YnI+CiZuYnNwOyAmbmJzcDtT ZW5zZUNtZC5BbGxvY0xlbiA9IChVSU5UOCkgc2l6ZW9mIChVU0JfQk9PVF9SRVFVRVNUX1NFTlNF X0RBVEEpOzxicj4KJm5ic3A7PGJyPgorPGJyPgombmJzcDsgJm5ic3A7U3RhdHVzID0gVHJhbnNw b3J0LSZndDtFeGVjQ29tbWFuZCAoPGJyPgombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDtVc2JNYXNzLSZndDtDb250ZXh0LDxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7JmFtcDtTZW5zZUNtZCw8YnI+CkBAIC0xOTgsNyArMTk5LDcgQEAgVXNiQm9vdEV4ZWNDbWQg KDxicj4KJm5ic3A7PGJyPgombmJzcDsgJm5ic3A7aWYgKFN0YXR1cyA9PSBFRklfVElNRU9VVCkg ezxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDtERUJVRyAoKEVGSV9EX0VSUk9SLCAiVXNiQm9vdEV4 ZWNDbWQ6ICVyIHRvIEV4ZWMgMHgleCBDbWRcbiIsIFN0YXR1cywgKihVSU5UOCAqKUNtZCkpOzxi cj4KLSAmbmJzcDsgJm5ic3A7cmV0dXJuIEVGSV9USU1FT1VUOzxicj4KKyAmbmJzcDsgJm5ic3A7 cmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7PGJyPgombmJzcDsgJm5ic3A7fTxicj4KJm5ic3A7PGJy PgombmJzcDsgJm5ic3A7Ly88YnI+CkBAIC0yMTMsNyArMjE0LDggQEAgVXNiQm9vdEV4ZWNDbWQg KDxicj4KJm5ic3A7ICZuYnNwOy8vIElmIGNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZCwgdGhlbiBy ZXRyaWV2ZSBlcnJvciBpbmZvIHZpYSBzZW5zZSByZXF1ZXN0Ljxicj4KJm5ic3A7ICZuYnNwOy8v PGJyPgombmJzcDsgJm5ic3A7REVCVUcgKChFRklfRF9FUlJPUiwgIlVzYkJvb3RFeGVjQ21kOiAl ciB0byBFeGVjIDB4JXggQ21kIChSZXN1bHQgPSAleClcbiIsIFN0YXR1cywgKihVSU5UOCAqKUNt ZCwgQ21kUmVzdWx0KSk7PGJyPgotICZuYnNwO3JldHVybiBVc2JCb290UmVxdWVzdFNlbnNlIChV c2JNYXNzKTs8YnI+CisgJm5ic3A7Ly9yZXR1cm4gVXNiQm9vdFJlcXVlc3RTZW5zZSAoVXNiTWFz cyk7PGJyPgorICZuYnNwO3JldHVybiBFRklfU1VDQ0VTUzs8YnI+CiZuYnNwO308YnI+CiZuYnNw Ozxicj4KJm5ic3A7PGJyPgpAQCAtMjUxLDEwICsyNTMsMTIgQEAgVXNiQm9vdEV4ZWNDbWRXaXRo UmV0cnkgKDxicj4KJm5ic3A7ezxicj4KJm5ic3A7ICZuYnNwO0VGSV9TVEFUVVMgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtTdGF0 dXM7PGJyPgombmJzcDsgJm5ic3A7VUlOVE4gJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBSZXRyeTs8YnI+ Ci0gJm5ic3A7RUZJX0VWRU5UICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFRpbWVvdXRFdnQ7PGJyPgorICZuYnNwOy8vRUZJX0VW RU5UICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7IFRpbWVvdXRFdnQ7PGJyPgombmJzcDs8YnI+Ci0gJm5ic3A7UmV0cnkgJm5ic3A7 PSAwOzxicj4KKyAmbmJzcDsvL1JldHJ5ICZuYnNwOz0gMDs8YnI+CiZuYnNwOyAmbmJzcDtTdGF0 dXMgPSBFRklfU1VDQ0VTUzs8YnI+Cis8YnI+CisjaWYgMDxicj4KJm5ic3A7ICZuYnNwO1N0YXR1 cyA9IGdCUy0mZ3Q7Q3JlYXRlRXZlbnQgKDxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7RVZUX1RJTUVSLDxicj4K Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7VFBMX0NBTExCQUNLLDxicj4KQEAgLTI3MSw2ICsyNzUsNyBAQCBVc2JCb290 RXhlY0NtZFdpdGhSZXRyeSAoPGJyPgombmJzcDsgJm5ic3A7ICZuYnNwO2dvdG8gRVhJVDs8YnI+ CiZuYnNwOyAmbmJzcDt9PGJyPgombmJzcDs8YnI+Cis8YnI+CiZuYnNwOyAmbmJzcDsvLzxicj4K Jm5ic3A7ICZuYnNwOy8vIEV4ZWN1dGUgdGhlIGNtZCBhbmQgcmV0cnkgaWYgaXQgZmFpbHMuPGJy PgombmJzcDsgJm5ic3A7Ly88YnI+CkBAIC0zMDcsNiArMzEyLDI0IEBAIEVYSVQ6PGJyPgombmJz cDsgJm5ic3A7ICZuYnNwO2dCUy0mZ3Q7Q2xvc2VFdmVudCAoVGltZW91dEV2dCk7PGJyPgombmJz cDsgJm5ic3A7fTxicj4KJm5ic3A7PGJyPgorI2VuZGlmPGJyPgoJCTwvcD48ZGl2PgoJCQk8YnI+ CgkJPC9kaXY+Cis8YnI+CisgJm5ic3A7Zm9yIChSZXRyeSA9IDA7IFJldHJ5ICZsdDsgVVNCX0JP T1RfQ09NTUFORF9SRVRSWTsgUmV0cnkrKykgezxicj4KKyAmbmJzcDsgJm5ic3A7U3RhdHVzID0g VXNiQm9vdEV4ZWNDbWQgKDxicj4KKyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgVXNiTWFzcyw8YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IENtZCw8YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IENtZExlbiw8YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IERhdGFEaXIsPGJyPgorICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBEYXRhLDxicj4KKyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgRGF0YUxlbiw8YnI+Cisg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFRpbWVvdXQ8 YnI+CisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICk7 PGJyPgorPGJyPgorICZuYnNwOyAmbmJzcDtpZiAoU3RhdHVzID09IEVGSV9TVUNDRVNTIHx8IFN0 YXR1cyA9PSBFRklfTk9fTUVESUEgfHwgU3RhdHVzID09IEVGSV9NRURJQV9DSEFOR0VEKSB7PGJy PgorICZuYnNwOyAmbmJzcDsgJm5ic3A7YnJlYWs7PGJyPgorICZuYnNwOyAmbmJzcDt9PGJyPgor ICZuYnNwO308YnI+Cis8YnI+CiZuYnNwOyAmbmJzcDtyZXR1cm4gU3RhdHVzOzxicj4KJm5ic3A7 fTxicj4KJm5ic3A7PGJyPgpAQCAtNTQwLDYgKzU2Myw3IEBAIFVzYkJvb3RSZWFkQ2FwYWNpdHkg KDxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsvLzxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsvLyAm bmJzcDtHZXQgc2Vuc2UgZGF0YSAmbmJzcDs8YnI+CiZuYnNwOyAmbmJzcDsgJm5ic3A7Ly88YnI+ CisgJm5ic3A7ICZuYnNwO0RiZ1ByaW50IChFRklfRF9JTkZPLCJTb3JyeSx0aGUgQmxvY2tTaXpl IG5vdyBpcyAwISEhIVxuIik7PGJyPgombmJzcDsgJm5ic3A7ICZuYnNwO3JldHVybiBVc2JCb290 UmVxdWVzdFNlbnNlIChVc2JNYXNzKTs8YnI+CiZuYnNwOyAmbmJzcDt9IGVsc2Ugezxicj4KJm5i c3A7ICZuYnNwOyAmbmJzcDtNZWRpYS0mZ3Q7QmxvY2tTaXplID0gQmxvY2tTaXplOzxicj4KQEAg LTY5Miw2ICs3MTYsNyBAQCBVc2JCb290RGV0ZWN0TWVkaWEgKDxicj4KJm5ic3A7ICZuYnNwO0VG SV9CTE9DS19JT19NRURJQSAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsqTWVkaWE7PGJyPgom bmJzcDsgJm5ic3A7VUlOVDggJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IENtZFNldDs8YnI+CiZuYnNwOyAmbmJzcDtF RklfU1RBVFVTICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDtTdGF0dXM7PGJyPgorICZuYnNwO0VGSV9UUEwgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgT2xkVHBsOzxicj4KJm5i c3A7PGJyPgombmJzcDsgJm5ic3A7TWVkaWEgJm5ic3A7ICZuYnNwOz0gJmFtcDtVc2JNYXNzLSZn dDtCbG9ja0lvTWVkaWE7PGJyPgombmJzcDs8YnI+CkBAIC03NTQsNyArNzc5LDEwIEBAIFVzYkJv b3REZXRlY3RNZWRpYSAoPGJyPgombmJzcDsgJm5ic3A7ICZuYnNwOy8vIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIGZyb206PGJyPgombmJzcDsgJm5ic3A7ICZuYnNwOy8vICZuYnNwOyBCbG9jayBJ L08gUHJvdG9jb2wgQVBJcywgd2hpY2ggcnVuIGF0IFRQTF9DQUxMQkFDSy48YnI+CiZuYnNwOyAm bmJzcDsgJm5ic3A7Ly8gJm5ic3A7IERyaXZlckJpbmRpbmdTdGFydCgpLCB3aGljaCByYWlzZXMg dG8gVFBMX0NBTExCQUNLLjxicj4KLSAmbmJzcDsgJm5ic3A7QVNTRVJUIChFZmlHZXRDdXJyZW50 VHBsICgpID09IFRQTF9DQUxMQkFDSyk7PGJyPgorICZuYnNwOyAmbmJzcDsvL0FTU0VSVCAoRWZp R2V0Q3VycmVudFRwbCAoKSA9PSBUUExfQ0FMTEJBQ0spOzxicj4KKyAmbmJzcDsgJm5ic3A7T2xk VHBsID0gRWZpR2V0Q3VycmVudFRwbCAoKTs8YnI+CisgJm5ic3A7ICZuYnNwO2dCUy0mZ3Q7UmVz dG9yZVRQTCAoVFBMX0NBTExCQUNLKTs8YnI+Cis8YnI+CiZuYnNwOzxicj4KJm5ic3A7ICZuYnNw OyAmbmJzcDsvLzxicj4KJm5ic3A7ICZuYnNwOyAmbmJzcDsvLyBXaGVuIGl0IGlzIGNhbGxlZCBm cm9tIERyaXZlckJpbmRpbmdTdGFydCgpLCBiZWxvdyByZWluc3RhbGwgZmFpbHMuPGJyPgpAQCAt NzY3LDYgKzc5NSw5IEBAIFVzYkJvb3REZXRlY3RNZWRpYSAoPGJyPgombmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmYW1wO1VzYk1hc3MtJmd0O0Jsb2NrSW88YnI+CiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICk7PGJyPgombmJzcDs8YnI+ CisgJm5ic3A7ICZuYnNwO0FTU0VSVCAoRWZpR2V0Q3VycmVudFRwbCAoKSA9PSBUUExfQ0FMTEJB Q0spOzxicj4KKyAmbmJzcDsgJm5ic3A7Z0JTLSZndDtSYWlzZVRQTCAoT2xkVHBsKTs8YnI+Cis8 YnI+CiZuYnNwOyAmbmJzcDsgJm5ic3A7Ly88YnI+CiZuYnNwOyAmbmJzcDsgJm5ic3A7Ly8gUmVz ZXQgTWVkaWFJZCBhZnRlciByZWluc3RhbGxpbmcgQmxvY2sgSS9PIFByb3RvY29sLjxicj4KJm5i c3A7ICZuYnNwOyAmbmJzcDsvLzxicj4KCQk8ZGl2PgoJCQlkaWZmIC0tZ2l0IGEvTWRlTW9kdWxl UGtnL0J1cy9Vc2IvVXNiTWFzc1N0b3JhZ2VEeGUvVXNiTWFzc0Jvb3QuaCBiL01kZU1vZHVsZVBr Zy9CdXMvVXNiL1VzYk1hc3NTdG9yYWdlRHhlL1VzYk1hc3NCb290Lmg8YnI+CmluZGV4IDY0YjI5 ODVlLi5jNTAyYTM2MyAxMDA2NDQ8YnI+Ci0tLSBhL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk1h c3NTdG9yYWdlRHhlL1VzYk1hc3NCb290Lmg8YnI+CisrKyBiL01kZU1vZHVsZVBrZy9CdXMvVXNi L1VzYk1hc3NTdG9yYWdlRHhlL1VzYk1hc3NCb290Lmg8YnI+CkBAIC03Miw3ICs3Miw3IEBAIFdJ VEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBF WFBSRVNTIE9SIElNUExJRUQuPGJyPgombmJzcDsvLzxicj4KJm5ic3A7Ly8gUmV0cnkgbWFzcyBj b21tYW5kIHRpbWVzLCBzZXQgYnkgZXhwZXJpZW5jZTxicj4KJm5ic3A7Ly88YnI+Ci0jZGVmaW5l IFVTQl9CT09UX0NPTU1BTkRfUkVUUlkgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OzU8YnI+CisjZGVmaW5lIFVTQl9CT09UX0NPTU1BTkRfUkVUUlkgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOzE8YnI+CiZuYnNwOzxicj4KCQkJPGRpdj4KCQkJCTxicj4KCQkJPC9k aXY+CgkJPC9kaXY+CjxwcmUgd3JhcD0ic29mdCIgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O3dvcmQt d3JhcDpicmVhay13b3JkOyI+VGhhbmsgeW91PC9wcmU+Ckxvb2sgZm9yd2FyZCB0byB5b3VyIHJl cGx5LgoJPHA+PC9wPgoJPHA+CgkJPGJyPgoJPC9wPgo8cD48L3A+Cjxicj4KPHA+Cgk8YnI+Cjwv cD4KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OlNpbVN1bjsiPgoJPHNwYW4gc3R5bGU9ImZvbnQtZmFt aWx5OkFyaWFsO2ZvbnQtc2l6ZToxNHB4OyI+PC9zcGFuPiAKPC9wPgo8cCBzdHlsZT0iZm9udC1m YW1pbHk6U2ltU3VuOyI+Cgk8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk65a6L5L2TLCBhcmlhbCwg VmVyZGFuYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDt3aGl0ZS1zcGFjZTpub3JtYWw7Ij48 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6 QXJpYWw7Ij48YnI+Cjwvc3Bhbj48L3NwYW4+PC9zcGFuPiAKPC9wPgo8cCBzdHlsZT0iZm9udC1m YW1pbHk6U2ltU3VuOyI+Cgk8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk65a6L5L2TLCBhcmlhbCwg VmVyZGFuYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDt3aGl0ZS1zcGFjZTpub3JtYWw7Ij48 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6 QXJpYWw7Ij48L3NwYW4+PGJyPgo8L3NwYW4+PC9zcGFuPiAKPC9wPgo8cCBzdHlsZT0iZm9udC1m YW1pbHk6U2ltU3VuOyI+Cgk8YnI+CjwvcD4KPHAgc3R5bGU9ImZvbnQtZmFtaWx5OlNpbVN1bjsi PgoJPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OuWui+S9kywgYXJpYWwsIFZlcmRhbmEsIHNhbnMt c2VyaWY7Zm9udC1zaXplOjE0cHg7d2hpdGUtc3BhY2U6bm9ybWFsOyI+PHNwYW4gc3R5bGU9ImZv bnQtZmFtaWx5OkFyaWFsOyI+PGJyPgo8L3NwYW4+PC9zcGFuPiAKPC9wPgo8cCBzdHlsZT0iZm9u dC1mYW1pbHk6U2ltU3VuOyI+Cgk8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk65a6L5L2TLCBhcmlh bCwgVmVyZGFuYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDt3aGl0ZS1zcGFjZTpub3JtYWw7 Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij48YnI+Cjwvc3Bhbj48L3NwYW4+IAo8 L3A+CjxwIHN0eWxlPSJmb250LWZhbWlseTpTaW1TdW47Ij4KCTxzcGFuIHN0eWxlPSJmb250LWZh bWlseTrlrovkvZMsIGFyaWFsLCBWZXJkYW5hLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O3do aXRlLXNwYWNlOm5vcm1hbDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDsiPjwvc3Bh bj48YnI+Cjwvc3Bhbj4gCjwvcD48YnI+PGJyPjxpIHN0eWxlPSJmb250LXZhcmlhbnQtbnVtZXJp Yzogbm9ybWFsOyBmb250LXZhcmlhbnQtZWFzdC1hc2lhbjogbm9ybWFsOyB3aWRvd3M6IDE7IGZv bnQtZmFtaWx5OiDlrovkvZMsIFRhaG9tYTsgZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDog MTYuOHB4OyI+PGZvbnQgY29sb3I9IiNjMGMwYzAiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEw cHQ7IGZvbnQtZmFtaWx5OiDlrovkvZM7Ij7mnKzpgq7ku7blj4rlhbbpmYTku7blkKvmnInpvpno iq/kuK3np5HnmoTllYbkuJrnp5jlr4bkv6Hmga/vvIzku4XpmZDkuo7lj5HpgIHnu5nkuIrpnaLl nLDlnYDkuK3liJflh7rnmoTkuKrkurrmiJbnvqTnu4TjgILnpoHmraLku7vkvZXlhbbku5bkurrk u6Xku7vkvZXlvaLlvI/kvb/nlKjvvIjljIXmi6zkvYbkuI3pmZDkuo7lhajpg6jmiJbpg6g8L3Nw YW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IOWui+S9kzsiPuWI huWcsOazhOmcsuOAgeWkjeWItuaIluaVo+WPke+8ieacrOmCruS7tuWPiuWFtumZhOS7tuS4reea hOS/oeaBr+OAguWmguaenOaCqOmUmeaUtuacrOmCruS7tu+8jOivt+aCqOeri+WNs+eUteivneaI lumCruS7tumAmuefpeWPkeS7tuS6uuW5tuWIoOmZpOacrOmCruS7tuOAgjwvc3Bhbj48c3BhbiBs YW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsLCBz YW5zLXNlcmlmOyI+Jm5ic3A7PGJyPlRoaXMgZW1haWwgYW5kIGl0cyBhdHRhY2htZW50cyBjb250 YWluIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiBmcm9tIExvb25nc29uIFRlY2hub2xvZ3kgLCB3 aGljaCBpcyBpbnRlbmRlZCBvbmx5IGZvciB0aGUgcGVyc29uIG9yIGVudGl0eSB3aG9zZSBhZGRy ZXNzIGlzIGxpc3RlZCBhYm92ZS4gQW55IHVzZSBvZiB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVk IGhlcmVpbiBpbiBhbnkgd2F5IChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdG90YWwg b3IgcGFydGlhbCBkaXNjbG9zdXJlLCByZXByb2R1Y3Rpb24gb3IgZGlzc2VtaW5hdGlvbikgYnkg cGVyc29ucyBvdGhlciB0aGFuIHRoZSBpbnRlbmRlZCByZWNpcGllbnQocykgaXMgcHJvaGliaXRl ZC4gSWYgeW91IHJlY2VpdmUgdGhpcyBlbWFpbCBpbiBlcnJvciwgcGxlYXNlIG5vdGlmeSB0aGUg c2VuZGVyIGJ5IHBob25lIG9yIGVtYWlsIGltbWVkaWF0ZWx5IGFuZCBkZWxldGUgaXQuJm5ic3A7 PC9zcGFuPjwvZm9udD48L2k+DQoKIDxkaXYgd2lkdGg9IjEiIHN0eWxlPSJjb2xvcjp3aGl0ZTtj bGVhcjpib3RoIj5fLl8sXy5fLF88L2Rpdj4gPGhyPiAgIEdyb3Vwcy5pbyBMaW5rczo8cD4gICBZ b3UgcmVjZWl2ZSBhbGwgbWVzc2FnZXMgc2VudCB0byB0aGlzIGdyb3VwLiAgICA8cD4gPGEgdGFy Z2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9tZXNzYWdl Lzg2Njc3Ij5WaWV3L1JlcGx5IE9ubGluZSAoIzg2Njc3KTwvYT4gfCAgICB8ICA8YSB0YXJnZXQ9 Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9ncm91cHMuaW8vbXQvODkxNTYxOTUvMTc4NzI3NyI+TXV0 ZSBUaGlzIFRvcGljPC9hPiAgfCA8YSBocmVmPSJodHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2 ZWwvcG9zdCI+TmV3IFRvcGljPC9hPjxicj4gICAgPGEgaHJlZj0iaHR0cHM6Ly9lZGsyLmdyb3Vw cy5pby9nL2RldmVsL2VkaXRzdWIvMTc4NzI3NyI+WW91ciBTdWJzY3JpcHRpb248L2E+IHwgPGEg aHJlZj0ibWFpbHRvOmRldmVsK293bmVyQGVkazIuZ3JvdXBzLmlvIj5Db250YWN0IEdyb3VwIE93 bmVyPC9hPiB8ICA8YSBocmVmPSJodHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvdW5zdWIi PlVuc3Vic2NyaWJlPC9hPiAgW2ltcG9ydGVyQHBhdGNoZXcub3JnXTxicj4gPGRpdiB3aWR0aD0i MSIgc3R5bGU9ImNvbG9yOndoaXRlO2NsZWFyOmJvdGgiPl8uXyxfLl8sXzwvZGl2PiAKDQo= ------=_Part_102529_553069211.1644906485089--