From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9A8B8C10F13 for ; Thu, 11 Apr 2019 08:48:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4A17621841 for ; Thu, 11 Apr 2019 08:48:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726812AbfDKIsG (ORCPT ); Thu, 11 Apr 2019 04:48:06 -0400 Received: from relay8-d.mail.gandi.net ([217.70.183.201]:37339 "EHLO relay8-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726121AbfDKIsG (ORCPT ); Thu, 11 Apr 2019 04:48:06 -0400 X-Originating-IP: 90.88.18.121 Received: from aptenodytes (aaubervilliers-681-1-63-121.w90-88.abo.wanadoo.fr [90.88.18.121]) (Authenticated sender: paul.kocialkowski@bootlin.com) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 9265E1BF217; Thu, 11 Apr 2019 08:47:54 +0000 (UTC) Message-ID: <53e40a98df46f42f52dfb3e0b753135753103d06.camel@bootlin.com> Subject: Re: [PATCH v8 1/2] media: uapi: Add H264 low-level decoder API compound controls. From: Paul Kocialkowski To: Maxime Ripard , hans.verkuil@cisco.com, acourbot@chromium.org, sakari.ailus@linux.intel.com, Laurent Pinchart Cc: tfiga@chromium.org, posciak@chromium.org, Chen-Yu Tsai , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org, nicolas.dufresne@collabora.com, jenskuske@gmail.com, jernej.skrabec@gmail.com, jonas@kwiboo.se, ezequiel@collabora.com, linux-sunxi@googlegroups.com, Thomas Petazzoni , Guenter Roeck Date: Thu, 11 Apr 2019 10:47:54 +0200 In-Reply-To: References: Organization: Bootlin Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.32.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Le mercredi 10 avril 2019 à 15:44 +0200, Paul Kocialkowski a écrit : > Hi, > > Le jeudi 04 avril 2019 à 14:59 +0200, Maxime Ripard a écrit : > > From: Pawel Osciak > > > > Stateless video codecs will require both the H264 metadata and slices in > > order to be able to decode frames. > > > > This introduces the definitions for a new pixel format for H264 slices that > > have been parsed, as well as the structures used to pass the metadata from > > the userspace to the kernel. > > With V4L2_PIX_FMT_H264_SLICE_RAW renamed to V4L2_PIX_FMT_H264_SLICE and > moved to the private h264-ctrls.h, this is: Well, since the pixfmt will become private, we don't really need the rename, especially if that can avoid us another round of review. The point was to make MPEG-2 and H264 pixfmts naming consistent, but it's more complicated than what I suggested really. So feel free to apply my reviewed-by on these two patches provided that the definition is made private. I think we will need more discussions about the pixel formats, and Nicolas and Ezequiel's proposal at https://lkml.org/lkml/2019/2/12/248 feels like a good starting point for that. I see a few more issues that need to be discussed though. For instance, what controls should be considered mandatory for each pixfmt? Provided that the Annex-B fashion would also contain the binary slice header, should it be mandatory/allowed/possible to also provide the parsed slice header control? There are also considerations that come to mind when thinking about the cedrus HEVC decoder, where it takes parsed data but also needs some information from the payload header (NAL type + layer ID + temporal ID) which is typically not part of the slice header on its own (although that's how I exposed it in the current HEVC proposal). So that would kind of require having the full annex-b contents, but we definitely want to provide parsed slice data in addition to the binary slice header from the annex-b data. Or maybe each control that reflects a bitstream structure in a NAL element which has a header on its own should also include that header? Anyway that discussion should be followed-up once we have our early codec controls merged in the private API. I certainly don't want to delay this series any further. Cheers, Paul > Reviewed-by: Paul Kocialkowski > > Cheers, > > Paul > > > Reviewed-by: Tomasz Figa > > Signed-off-by: Pawel Osciak > > Signed-off-by: Guenter Roeck > > Co-developed-by: Maxime Ripard > > Signed-off-by: Maxime Ripard > > --- > > Documentation/media/uapi/v4l/biblio.rst | 9 +- > > Documentation/media/uapi/v4l/ext-ctrls-codec.rst | 569 ++++++++++++++- > > Documentation/media/uapi/v4l/pixfmt-compressed.rst | 19 +- > > Documentation/media/uapi/v4l/vidioc-queryctrl.rst | 30 +- > > Documentation/media/videodev2.h.rst.exceptions | 5 +- > > drivers/media/v4l2-core/v4l2-ctrls.c | 42 +- > > drivers/media/v4l2-core/v4l2-ioctl.c | 1 +- > > include/media/h264-ctrls.h | 192 +++++- > > include/media/v4l2-ctrls.h | 13 +- > > include/uapi/linux/videodev2.h | 1 +- > > 10 files changed, 880 insertions(+), 1 deletion(-) > > create mode 100644 include/media/h264-ctrls.h > > > > diff --git a/Documentation/media/uapi/v4l/biblio.rst b/Documentation/media/uapi/v4l/biblio.rst > > index ec33768c055e..8f4eb8823d82 100644 > > --- a/Documentation/media/uapi/v4l/biblio.rst > > +++ b/Documentation/media/uapi/v4l/biblio.rst > > @@ -122,6 +122,15 @@ ITU BT.1119 > > > > :author: International Telecommunication Union (http://www.itu.ch) > > > > +.. _h264: > > + > > +ITU-T Rec. H.264 Specification (04/2017 Edition) > > +================================================ > > + > > +:title: ITU-T Recommendation H.264 "Advanced Video Coding for Generic Audiovisual Services" > > + > > +:author: International Telecommunication Union (http://www.itu.ch) > > + > > .. _jfif: > > > > JFIF > > diff --git a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst > > index 67a122339c0e..fe720f239f70 100644 > > --- a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst > > +++ b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst > > @@ -1371,6 +1371,575 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type - > > - Layer number > > > > > > +.. _v4l2-mpeg-h264: > > + > > +``V4L2_CID_MPEG_VIDEO_H264_SPS (struct)`` > > + Specifies the sequence parameter set (as extracted from the > > + bitstream) for the associated H264 slice data. This includes the > > + necessary parameters for configuring a stateless hardware decoding > > + pipeline for H264. The bitstream parameters are defined according > > + to :ref:`h264`, section 7.4.2.1.1 "Sequence Parameter Set Data > > + Semantics". For further documentation, refer to the above > > + specification, unless there is an explicit comment stating > > + otherwise. > > + > > + .. note:: > > + > > + This compound control is not yet part of the public kernel API and > > + it is expected to change. > > + > > +.. c:type:: v4l2_ctrl_h264_sps > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: struct v4l2_ctrl_h264_sps > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - __u8 > > + - ``profile_idc`` > > + - > > + * - __u8 > > + - ``constraint_set_flags`` > > + - See :ref:`Sequence Parameter Set Constraints Set Flags ` > > + * - __u8 > > + - ``level_idc`` > > + - > > + * - __u8 > > + - ``seq_parameter_set_id`` > > + - > > + * - __u8 > > + - ``chroma_format_idc`` > > + - > > + * - __u8 > > + - ``bit_depth_luma_minus8`` > > + - > > + * - __u8 > > + - ``bit_depth_chroma_minus8`` > > + - > > + * - __u8 > > + - ``log2_max_frame_num_minus4`` > > + - > > + * - __u8 > > + - ``pic_order_cnt_type`` > > + - > > + * - __u8 > > + - ``log2_max_pic_order_cnt_lsb_minus4`` > > + - > > + * - __u8 > > + - ``max_num_ref_frames`` > > + - > > + * - __u8 > > + - ``num_ref_frames_in_pic_order_cnt_cycle`` > > + - > > + * - __s32 > > + - ``offset_for_ref_frame[255]`` > > + - > > + * - __s32 > > + - ``offset_for_non_ref_pic`` > > + - > > + * - __s32 > > + - ``offset_for_top_to_bottom_field`` > > + - > > + * - __u16 > > + - ``pic_width_in_mbs_minus1`` > > + - > > + * - __u16 > > + - ``pic_height_in_map_units_minus1`` > > + - > > + * - __u32 > > + - ``flags`` > > + - See :ref:`Sequence Parameter Set Flags ` > > + > > +.. _h264_sps_constraints_set_flags: > > + > > +``Sequence Parameter Set Constraints Set Flags`` > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - ``V4L2_H264_SPS_CONSTRAINT_SET0_FLAG`` > > + - 0x00000001 > > + - > > + * - ``V4L2_H264_SPS_CONSTRAINT_SET1_FLAG`` > > + - 0x00000002 > > + - > > + * - ``V4L2_H264_SPS_CONSTRAINT_SET2_FLAG`` > > + - 0x00000004 > > + - > > + * - ``V4L2_H264_SPS_CONSTRAINT_SET3_FLAG`` > > + - 0x00000008 > > + - > > + * - ``V4L2_H264_SPS_CONSTRAINT_SET4_FLAG`` > > + - 0x00000010 > > + - > > + * - ``V4L2_H264_SPS_CONSTRAINT_SET5_FLAG`` > > + - 0x00000020 > > + - > > + > > +.. _h264_sps_flags: > > + > > +``Sequence Parameter Set Flags`` > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - ``V4L2_H264_SPS_FLAG_SEPARATE_COLOUR_PLANE`` > > + - 0x00000001 > > + - > > + * - ``V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS`` > > + - 0x00000002 > > + - > > + * - ``V4L2_H264_SPS_FLAG_DELTA_PIC_ORDER_ALWAYS_ZERO`` > > + - 0x00000004 > > + - > > + * - ``V4L2_H264_SPS_FLAG_GAPS_IN_FRAME_NUM_VALUE_ALLOWED`` > > + - 0x00000008 > > + - > > + * - ``V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY`` > > + - 0x00000010 > > + - > > + * - ``V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD`` > > + - 0x00000020 > > + - > > + * - ``V4L2_H264_SPS_FLAG_DIRECT_8X8_INFERENCE`` > > + - 0x00000040 > > + - > > + > > +``V4L2_CID_MPEG_VIDEO_H264_PPS (struct)`` > > + Specifies the picture parameter set (as extracted from the > > + bitstream) for the associated H264 slice data. This includes the > > + necessary parameters for configuring a stateless hardware decoding > > + pipeline for H264. The bitstream parameters are defined according > > + to :ref:`h264`, section 7.4.2.2 "Picture Parameter Set RBSP > > + Semantics". For further documentation, refer to the above > > + specification, unless there is an explicit comment stating > > + otherwise. > > + > > + .. note:: > > + > > + This compound control is not yet part of the public kernel API and > > + it is expected to change. > > + > > +.. c:type:: v4l2_ctrl_h264_pps > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: struct v4l2_ctrl_h264_pps > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - __u8 > > + - ``pic_parameter_set_id`` > > + - > > + * - __u8 > > + - ``seq_parameter_set_id`` > > + - > > + * - __u8 > > + - ``num_slice_groups_minus1`` > > + - > > + * - __u8 > > + - ``num_ref_idx_l0_default_active_minus1`` > > + - > > + * - __u8 > > + - ``num_ref_idx_l1_default_active_minus1`` > > + - > > + * - __u8 > > + - ``weighted_bipred_idc`` > > + - > > + * - __s8 > > + - ``pic_init_qp_minus26`` > > + - > > + * - __s8 > > + - ``pic_init_qs_minus26`` > > + - > > + * - __s8 > > + - ``chroma_qp_index_offset`` > > + - > > + * - __s8 > > + - ``second_chroma_qp_index_offset`` > > + - > > + * - __u16 > > + - ``flags`` > > + - See :ref:`Picture Parameter Set Flags ` > > + > > +.. _h264_pps_flags: > > + > > +``Picture Parameter Set Flags`` > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - ``V4L2_H264_PPS_FLAG_ENTROPY_CODING_MODE`` > > + - 0x00000001 > > + - > > + * - ``V4L2_H264_PPS_FLAG_BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT`` > > + - 0x00000002 > > + - > > + * - ``V4L2_H264_PPS_FLAG_WEIGHTED_PRED`` > > + - 0x00000004 > > + - > > + * - ``V4L2_H264_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT`` > > + - 0x00000008 > > + - > > + * - ``V4L2_H264_PPS_FLAG_CONSTRAINED_INTRA_PRED`` > > + - 0x00000010 > > + - > > + * - ``V4L2_H264_PPS_FLAG_REDUNDANT_PIC_CNT_PRESENT`` > > + - 0x00000020 > > + - > > + * - ``V4L2_H264_PPS_FLAG_TRANSFORM_8X8_MODE`` > > + - 0x00000040 > > + - > > + * - ``V4L2_H264_PPS_FLAG_PIC_SCALING_MATRIX_PRESENT`` > > + - 0x00000080 > > + - > > + > > +``V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX (struct)`` > > + Specifies the scaling matrix (as extracted from the bitstream) for > > + the associated H264 slice data. The bitstream parameters are > > + defined according to :ref:`h264`, section 7.4.2.1.1.1 "Scaling > > + List Semantics".For further documentation, refer to the above > > + specification, unless there is an explicit comment stating > > + otherwise. > > + > > + .. note:: > > + > > + This compound control is not yet part of the public kernel API and > > + it is expected to change. > > + > > +.. c:type:: v4l2_ctrl_h264_scaling_matrix > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: struct v4l2_ctrl_h264_scaling_matrix > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - __u8 > > + - ``scaling_list_4x4[6][16]`` > > + - > > + * - __u8 > > + - ``scaling_list_8x8[6][64]`` > > + - > > + > > +``V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS (struct)`` > > + Specifies the slice parameters (as extracted from the bitstream) > > + for the associated H264 slice data. This includes the necessary > > + parameters for configuring a stateless hardware decoding pipeline > > + for H264. The bitstream parameters are defined according to > > + :ref:`h264`, section 7.4.3 "Slice Header Semantics". For further > > + documentation, refer to the above specification, unless there is > > + an explicit comment stating otherwise. > > + > > + .. note:: > > + > > + This compound control is not yet part of the public kernel API > > + and it is expected to change. > > + > > + This structure is expected to be passed as an array, with one > > + entry for each slice included in the bitstream buffer. > > + > > +.. c:type:: v4l2_ctrl_h264_slice_params > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: struct v4l2_ctrl_h264_slice_params > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - __u32 > > + - ``size`` > > + - > > + * - __u32 > > + - ``header_bit_size`` > > + - > > + * - __u16 > > + - ``first_mb_in_slice`` > > + - > > + * - __u8 > > + - ``slice_type`` > > + - > > + * - __u8 > > + - ``pic_parameter_set_id`` > > + - > > + * - __u8 > > + - ``colour_plane_id`` > > + - > > + * - __u8 > > + - ``redundant_pic_cnt`` > > + - > > + * - __u16 > > + - ``frame_num`` > > + - > > + * - __u16 > > + - ``idr_pic_id`` > > + - > > + * - __u16 > > + - ``pic_order_cnt_lsb`` > > + - > > + * - __s32 > > + - ``delta_pic_order_cnt_bottom`` > > + - > > + * - __s32 > > + - ``delta_pic_order_cnt0`` > > + - > > + * - __s32 > > + - ``delta_pic_order_cnt1`` > > + - > > + * - struct :c:type:`v4l2_h264_pred_weight_table` > > + - ``pred_weight_table`` > > + - > > + * - __u32 > > + - ``dec_ref_pic_marking_bit_size`` > > + - > > + * - __u32 > > + - ``pic_order_cnt_bit_size`` > > + - > > + * - __u8 > > + - ``cabac_init_idc`` > > + - > > + * - __s8 > > + - ``slice_qp_delta`` > > + - > > + * - __s8 > > + - ``slice_qs_delta`` > > + - > > + * - __u8 > > + - ``disable_deblocking_filter_idc`` > > + - > > + * - __s8 > > + - ``slice_alpha_c0_offset_div2`` > > + - > > + * - __s8 > > + - ``slice_beta_offset_div2`` > > + - > > + * - __u8 > > + - ``num_ref_idx_l0_active_minus1`` > > + - > > + * - __u8 > > + - ``num_ref_idx_l1_active_minus1`` > > + - > > + * - __u32 > > + - ``slice_group_change_cycle`` > > + - > > + * - __u8 > > + - ``ref_pic_list0[32]`` > > + - Reference picture list after applying the per-slice modifications > > + * - __u8 > > + - ``ref_pic_list1[32]`` > > + - Reference picture list after applying the per-slice modifications > > + * - __u32 > > + - ``flags`` > > + - See :ref:`Slice Parameter Flags ` > > + > > +.. _h264_slice_flags: > > + > > +``Slice Parameter Set Flags`` > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - ``V4L2_H264_SLICE_FLAG_FIELD_PIC`` > > + - 0x00000001 > > + - > > + * - ``V4L2_H264_SLICE_FLAG_BOTTOM_FIELD`` > > + - 0x00000002 > > + - > > + * - ``V4L2_H264_SLICE_FLAG_DIRECT_SPATIAL_MV_PRED`` > > + - 0x00000004 > > + - > > + * - ``V4L2_H264_SLICE_FLAG_SP_FOR_SWITCH`` > > + - 0x00000008 > > + - > > + > > +``Prediction Weight Table`` > > + > > + The bitstream parameters are defined according to :ref:`h264`, > > + section 7.4.3.2 "Prediction Weight Table Semantics". For further > > + documentation, refer to the above specification, unless there is > > + an explicit comment stating otherwise. > > + > > +.. c:type:: v4l2_h264_pred_weight_table > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: struct v4l2_h264_pred_weight_table > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - __u16 > > + - ``luma_log2_weight_denom`` > > + - > > + * - __u16 > > + - ``chroma_log2_weight_denom`` > > + - > > + * - struct :c:type:`v4l2_h264_weight_factors` > > + - ``weight_factors[2]`` > > + - The weight factors at index 0 are the weight factors for the reference > > + list 0, the one at index 1 for the reference list 1. > > + > > +.. c:type:: v4l2_h264_weight_factors > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: struct v4l2_h264_weight_factors > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - __s16 > > + - ``luma_weight[32]`` > > + - > > + * - __s16 > > + - ``luma_offset[32]`` > > + - > > + * - __s16 > > + - ``chroma_weight[32][2]`` > > + - > > + * - __s16 > > + - ``chroma_offset[32][2]`` > > + - > > + > > +``V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS (struct)`` > > + Specifies the decode parameters (as extracted from the bitstream) > > + for the associated H264 slice data. This includes the necessary > > + parameters for configuring a stateless hardware decoding pipeline > > + for H264. The bitstream parameters are defined according to > > + :ref:`h264`. For further documentation, refer to the above > > + specification, unless there is an explicit comment stating > > + otherwise. > > + > > + .. note:: > > + > > + This compound control is not yet part of the public kernel API and > > + it is expected to change. > > + > > +.. c:type:: v4l2_ctrl_h264_decode_params > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: struct v4l2_ctrl_h264_decode_params > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - __u32 > > + - ``num_slices`` > > + - Number of slices needed to decode the current frame > > + * - __u32 > > + - ``nal_ref_idc`` > > + - NAL reference ID value coming from the NAL Unit header > > + * - __u8 > > + - ``ref_pic_list_p0[32]`` > > + - Backward reference list used by P-frames in the original bitstream order > > + * - __u8 > > + - ``ref_pic_list_b0[32]`` > > + - Backward reference list used by B-frames in the original bitstream order > > + * - __u8 > > + - ``ref_pic_list_b1[32]`` > > + - Forward reference list used by B-frames in the original bitstream order > > + * - __s32 > > + - ``top_field_order_cnt`` > > + - Picture Order Count for the coded top field > > + * - __s32 > > + - ``bottom_field_order_cnt`` > > + - Picture Order Count for the coded bottom field > > + * - __u32 > > + - ``flags`` > > + - See :ref:`Decode Parameters Flags ` > > + * - struct :c:type:`v4l2_h264_dpb_entry` > > + - ``dpb[16]`` > > + - > > + > > +.. _h264_decode_params_flags: > > + > > +``Decode Parameters Flags`` > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - ``V4L2_H264_DECODE_PARAM_FLAG_IDR_PIC`` > > + - 0x00000001 > > + - That picture is an IDR picture > > + > > +.. c:type:: v4l2_h264_dpb_entry > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: struct v4l2_h264_dpb_entry > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - __u64 > > + - ``reference_ts`` > > + - Timestamp of the V4L2 capture buffer to use as reference, used > > + with B-coded and P-coded frames. The timestamp refers to the > > + ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the > > + :c:func:`v4l2_timeval_to_ns()` function to convert the struct > > + :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64. > > + * - __u16 > > + - ``frame_num`` > > + - > > + * - __u16 > > + - ``pic_num`` > > + - > > + * - __s32 > > + - ``top_field_order_cnt`` > > + - > > + * - __s32 > > + - ``bottom_field_order_cnt`` > > + - > > + * - __u32 > > + - ``flags`` > > + - See :ref:`DPB Entry Flags ` > > + > > +.. _h264_dpb_flags: > > + > > +``DPB Entries Flags`` > > + > > +.. cssclass:: longtable > > + > > +.. flat-table:: > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 1 1 2 > > + > > + * - ``V4L2_H264_DPB_ENTRY_FLAG_VALID`` > > + - 0x00000001 > > + - The DPB entry is valid and should be considered > > + * - ``V4L2_H264_DPB_ENTRY_FLAG_ACTIVE`` > > + - 0x00000002 > > + - The DPB entry is currently being used as a reference frame > > + * - ``V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM`` > > + - 0x00000004 > > + - The DPB entry is a long term reference frame > > > > .. _v4l2-mpeg-mpeg2: > > > > diff --git a/Documentation/media/uapi/v4l/pixfmt-compressed.rst b/Documentation/media/uapi/v4l/pixfmt-compressed.rst > > index 6c961cfb74da..ea0a8a68759b 100644 > > --- a/Documentation/media/uapi/v4l/pixfmt-compressed.rst > > +++ b/Documentation/media/uapi/v4l/pixfmt-compressed.rst > > @@ -52,6 +52,25 @@ Compressed Formats > > - ``V4L2_PIX_FMT_H264_MVC`` > > - 'M264' > > - H264 MVC video elementary stream. > > + * .. _V4L2-PIX-FMT-H264-SLICE: > > + > > + - ``V4L2_PIX_FMT_H264_SLICE_RAW`` > > + - 'S264' > > + - H264 parsed slice data, as extracted from the H264 bitstream. > > + This format is adapted for stateless video decoders that > > + implement an H264 pipeline (using the :ref:`codec` and > > + :ref:`media-request-api`). Metadata associated with the frame > > + to decode are required to be passed through the > > + ``V4L2_CID_MPEG_VIDEO_H264_SPS``, > > + ``V4L2_CID_MPEG_VIDEO_H264_PPS``, > > + ``V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX``, > > + ``V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS`` and > > + ``V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS`` controls. See the > > + :ref:`associated Codec Control IDs `. > > + Exactly one output and one capture buffer must be provided for > > + use with this pixel format. The output buffer must contain the > > + appropriate number of macroblocks to decode a full > > + corresponding frame to the matching capture buffer. > > * .. _V4L2-PIX-FMT-H263: > > > > - ``V4L2_PIX_FMT_H263`` > > diff --git a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst > > index f824162d0ea9..dc500632095d 100644 > > --- a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst > > +++ b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst > > @@ -443,6 +443,36 @@ See also the examples in :ref:`control`. > > - n/a > > - A struct :c:type:`v4l2_ctrl_mpeg2_quantization`, containing MPEG-2 > > quantization matrices for stateless video decoders. > > + * - ``V4L2_CTRL_TYPE_H264_SPS`` > > + - n/a > > + - n/a > > + - n/a > > + - A struct :c:type:`v4l2_ctrl_h264_sps`, containing H264 > > + sequence parameters for stateless video decoders. > > + * - ``V4L2_CTRL_TYPE_H264_PPS`` > > + - n/a > > + - n/a > > + - n/a > > + - A struct :c:type:`v4l2_ctrl_h264_pps`, containing H264 > > + picture parameters for stateless video decoders. > > + * - ``V4L2_CTRL_TYPE_H264_SCALING_MATRIX`` > > + - n/a > > + - n/a > > + - n/a > > + - A struct :c:type:`v4l2_ctrl_h264_scaling_matrix`, containing H264 > > + scaling matrices for stateless video decoders. > > + * - ``V4L2_CTRL_TYPE_H264_SLICE_PARAMS`` > > + - n/a > > + - n/a > > + - n/a > > + - A struct :c:type:`v4l2_ctrl_h264_slice_params`, containing H264 > > + slice parameters for stateless video decoders. > > + * - ``V4L2_CTRL_TYPE_H264_DECODE_PARAMS`` > > + - n/a > > + - n/a > > + - n/a > > + - A struct :c:type:`v4l2_ctrl_h264_decode_params`, containing H264 > > + decode parameters for stateless video decoders. > > > > .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| > > > > diff --git a/Documentation/media/videodev2.h.rst.exceptions b/Documentation/media/videodev2.h.rst.exceptions > > index 64d348e67df9..55cbe324b9fc 100644 > > --- a/Documentation/media/videodev2.h.rst.exceptions > > +++ b/Documentation/media/videodev2.h.rst.exceptions > > @@ -136,6 +136,11 @@ replace symbol V4L2_CTRL_TYPE_U32 :c:type:`v4l2_ctrl_type` > > replace symbol V4L2_CTRL_TYPE_U8 :c:type:`v4l2_ctrl_type` > > replace symbol V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS :c:type:`v4l2_ctrl_type` > > replace symbol V4L2_CTRL_TYPE_MPEG2_QUANTIZATION :c:type:`v4l2_ctrl_type` > > +replace symbol V4L2_CTRL_TYPE_H264_SPS :c:type:`v4l2_ctrl_type` > > +replace symbol V4L2_CTRL_TYPE_H264_PPS :c:type:`v4l2_ctrl_type` > > +replace symbol V4L2_CTRL_TYPE_H264_SCALING_MATRIX :c:type:`v4l2_ctrl_type` > > +replace symbol V4L2_CTRL_TYPE_H264_SLICE_PARAMS :c:type:`v4l2_ctrl_type` > > +replace symbol V4L2_CTRL_TYPE_H264_DECODE_PARAMS :c:type:`v4l2_ctrl_type` > > > > # V4L2 capability defines > > replace define V4L2_CAP_VIDEO_CAPTURE device-capabilities > > diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c > > index b1ae2e555c68..46aec8c3acde 100644 > > --- a/drivers/media/v4l2-core/v4l2-ctrls.c > > +++ b/drivers/media/v4l2-core/v4l2-ctrls.c > > @@ -828,6 +828,11 @@ const char *v4l2_ctrl_get_name(u32 id) > > case V4L2_CID_MPEG_VIDEO_H264_CONSTRAINED_INTRA_PREDICTION: > > return "H264 Constrained Intra Pred"; > > case V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET: return "H264 Chroma QP Index Offset"; > > + case V4L2_CID_MPEG_VIDEO_H264_SPS: return "H264 Sequence Parameter Set"; > > + case V4L2_CID_MPEG_VIDEO_H264_PPS: return "H264 Picture Parameter Set"; > > + case V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX: return "H264 Scaling Matrix"; > > + case V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS: return "H264 Slice Parameters"; > > + case V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS: return "H264 Decode Parameters"; > > case V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP: return "MPEG4 I-Frame QP Value"; > > case V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP: return "MPEG4 P-Frame QP Value"; > > case V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP: return "MPEG4 B-Frame QP Value"; > > @@ -1309,6 +1314,21 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, > > case V4L2_CID_MPEG_VIDEO_FWHT_PARAMS: > > *type = V4L2_CTRL_TYPE_FWHT_PARAMS; > > break; > > + case V4L2_CID_MPEG_VIDEO_H264_SPS: > > + *type = V4L2_CTRL_TYPE_H264_SPS; > > + break; > > + case V4L2_CID_MPEG_VIDEO_H264_PPS: > > + *type = V4L2_CTRL_TYPE_H264_PPS; > > + break; > > + case V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX: > > + *type = V4L2_CTRL_TYPE_H264_SCALING_MATRIX; > > + break; > > + case V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS: > > + *type = V4L2_CTRL_TYPE_H264_SLICE_PARAMS; > > + break; > > + case V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS: > > + *type = V4L2_CTRL_TYPE_H264_DECODE_PARAMS; > > + break; > > default: > > *type = V4L2_CTRL_TYPE_INTEGER; > > break; > > @@ -1678,6 +1698,13 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx, > > case V4L2_CTRL_TYPE_FWHT_PARAMS: > > return 0; > > > > + case V4L2_CTRL_TYPE_H264_SPS: > > + case V4L2_CTRL_TYPE_H264_PPS: > > + case V4L2_CTRL_TYPE_H264_SCALING_MATRIX: > > + case V4L2_CTRL_TYPE_H264_SLICE_PARAMS: > > + case V4L2_CTRL_TYPE_H264_DECODE_PARAMS: > > + return 0; > > + > > default: > > return -EINVAL; > > } > > @@ -2261,6 +2288,21 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl, > > case V4L2_CTRL_TYPE_FWHT_PARAMS: > > elem_size = sizeof(struct v4l2_ctrl_fwht_params); > > break; > > + case V4L2_CTRL_TYPE_H264_SPS: > > + elem_size = sizeof(struct v4l2_ctrl_h264_sps); > > + break; > > + case V4L2_CTRL_TYPE_H264_PPS: > > + elem_size = sizeof(struct v4l2_ctrl_h264_pps); > > + break; > > + case V4L2_CTRL_TYPE_H264_SCALING_MATRIX: > > + elem_size = sizeof(struct v4l2_ctrl_h264_scaling_matrix); > > + break; > > + case V4L2_CTRL_TYPE_H264_SLICE_PARAMS: > > + elem_size = sizeof(struct v4l2_ctrl_h264_slice_params); > > + break; > > + case V4L2_CTRL_TYPE_H264_DECODE_PARAMS: > > + elem_size = sizeof(struct v4l2_ctrl_h264_decode_params); > > + break; > > default: > > if (type < V4L2_CTRL_COMPOUND_TYPES) > > elem_size = sizeof(s32); > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > > index ac87c3e37280..f6e1254064d2 100644 > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > > @@ -1325,6 +1325,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) > > case V4L2_PIX_FMT_H264: descr = "H.264"; break; > > case V4L2_PIX_FMT_H264_NO_SC: descr = "H.264 (No Start Codes)"; break; > > case V4L2_PIX_FMT_H264_MVC: descr = "H.264 MVC"; break; > > + case V4L2_PIX_FMT_H264_SLICE_RAW: descr = "H.264 Parsed Slice Data"; break; > > case V4L2_PIX_FMT_H263: descr = "H.263"; break; > > case V4L2_PIX_FMT_MPEG1: descr = "MPEG-1 ES"; break; > > case V4L2_PIX_FMT_MPEG2: descr = "MPEG-2 ES"; break; > > diff --git a/include/media/h264-ctrls.h b/include/media/h264-ctrls.h > > new file mode 100644 > > index 000000000000..e2f83b3cdbef > > --- /dev/null > > +++ b/include/media/h264-ctrls.h > > @@ -0,0 +1,192 @@ > > +/* SPDX-License-Identifier: GPL-2.0 */ > > +/* > > + * These are the H.264 state controls for use with stateless H.264 > > + * codec drivers. > > + * > > + * It turns out that these structs are not stable yet and will undergo > > + * more changes. So keep them private until they are stable and ready to > > + * become part of the official public API. > > + */ > > + > > +#ifndef _H264_CTRLS_H_ > > +#define _H264_CTRLS_H_ > > + > > +/* > > + * This is put insanely high to avoid conflicting with controls that > > + * would be added during the phase where those controls are not > > + * stable. It should be fixed eventually. > > + */ > > +#define V4L2_CID_MPEG_VIDEO_H264_SPS (V4L2_CID_MPEG_BASE+1000) > > +#define V4L2_CID_MPEG_VIDEO_H264_PPS (V4L2_CID_MPEG_BASE+1001) > > +#define V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX (V4L2_CID_MPEG_BASE+1002) > > +#define V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS (V4L2_CID_MPEG_BASE+1003) > > +#define V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS (V4L2_CID_MPEG_BASE+1004) > > + > > +/* enum v4l2_ctrl_type type values */ > > +#define V4L2_CTRL_TYPE_H264_SPS 0x0110 > > +#define V4L2_CTRL_TYPE_H264_PPS 0x0111 > > +#define V4L2_CTRL_TYPE_H264_SCALING_MATRIX 0x0112 > > +#define V4L2_CTRL_TYPE_H264_SLICE_PARAMS 0x0113 > > +#define V4L2_CTRL_TYPE_H264_DECODE_PARAMS 0x0114 > > + > > +#define V4L2_H264_SPS_CONSTRAINT_SET0_FLAG 0x01 > > +#define V4L2_H264_SPS_CONSTRAINT_SET1_FLAG 0x02 > > +#define V4L2_H264_SPS_CONSTRAINT_SET2_FLAG 0x04 > > +#define V4L2_H264_SPS_CONSTRAINT_SET3_FLAG 0x08 > > +#define V4L2_H264_SPS_CONSTRAINT_SET4_FLAG 0x10 > > +#define V4L2_H264_SPS_CONSTRAINT_SET5_FLAG 0x20 > > + > > +#define V4L2_H264_SPS_FLAG_SEPARATE_COLOUR_PLANE 0x01 > > +#define V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS 0x02 > > +#define V4L2_H264_SPS_FLAG_DELTA_PIC_ORDER_ALWAYS_ZERO 0x04 > > +#define V4L2_H264_SPS_FLAG_GAPS_IN_FRAME_NUM_VALUE_ALLOWED 0x08 > > +#define V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY 0x10 > > +#define V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD 0x20 > > +#define V4L2_H264_SPS_FLAG_DIRECT_8X8_INFERENCE 0x40 > > + > > +struct v4l2_ctrl_h264_sps { > > + __u8 profile_idc; > > + __u8 constraint_set_flags; > > + __u8 level_idc; > > + __u8 seq_parameter_set_id; > > + __u8 chroma_format_idc; > > + __u8 bit_depth_luma_minus8; > > + __u8 bit_depth_chroma_minus8; > > + __u8 log2_max_frame_num_minus4; > > + __u8 pic_order_cnt_type; > > + __u8 log2_max_pic_order_cnt_lsb_minus4; > > + __u8 max_num_ref_frames; > > + __u8 num_ref_frames_in_pic_order_cnt_cycle; > > + __s32 offset_for_ref_frame[255]; > > + __s32 offset_for_non_ref_pic; > > + __s32 offset_for_top_to_bottom_field; > > + __u16 pic_width_in_mbs_minus1; > > + __u16 pic_height_in_map_units_minus1; > > + __u32 flags; > > +}; > > + > > +#define V4L2_H264_PPS_FLAG_ENTROPY_CODING_MODE 0x0001 > > +#define V4L2_H264_PPS_FLAG_BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT 0x0002 > > +#define V4L2_H264_PPS_FLAG_WEIGHTED_PRED 0x0004 > > +#define V4L2_H264_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT 0x0008 > > +#define V4L2_H264_PPS_FLAG_CONSTRAINED_INTRA_PRED 0x0010 > > +#define V4L2_H264_PPS_FLAG_REDUNDANT_PIC_CNT_PRESENT 0x0020 > > +#define V4L2_H264_PPS_FLAG_TRANSFORM_8X8_MODE 0x0040 > > +#define V4L2_H264_PPS_FLAG_PIC_SCALING_MATRIX_PRESENT 0x0080 > > + > > +struct v4l2_ctrl_h264_pps { > > + __u8 pic_parameter_set_id; > > + __u8 seq_parameter_set_id; > > + __u8 num_slice_groups_minus1; > > + __u8 num_ref_idx_l0_default_active_minus1; > > + __u8 num_ref_idx_l1_default_active_minus1; > > + __u8 weighted_bipred_idc; > > + __s8 pic_init_qp_minus26; > > + __s8 pic_init_qs_minus26; > > + __s8 chroma_qp_index_offset; > > + __s8 second_chroma_qp_index_offset; > > + __u16 flags; > > +}; > > + > > +struct v4l2_ctrl_h264_scaling_matrix { > > + __u8 scaling_list_4x4[6][16]; > > + __u8 scaling_list_8x8[6][64]; > > +}; > > + > > +struct v4l2_h264_weight_factors { > > + __s16 luma_weight[32]; > > + __s16 luma_offset[32]; > > + __s16 chroma_weight[32][2]; > > + __s16 chroma_offset[32][2]; > > +}; > > + > > +struct v4l2_h264_pred_weight_table { > > + __u16 luma_log2_weight_denom; > > + __u16 chroma_log2_weight_denom; > > + struct v4l2_h264_weight_factors weight_factors[2]; > > +}; > > + > > +#define V4L2_H264_SLICE_TYPE_P 0 > > +#define V4L2_H264_SLICE_TYPE_B 1 > > +#define V4L2_H264_SLICE_TYPE_I 2 > > +#define V4L2_H264_SLICE_TYPE_SP 3 > > +#define V4L2_H264_SLICE_TYPE_SI 4 > > + > > +#define V4L2_H264_SLICE_FLAG_FIELD_PIC 0x01 > > +#define V4L2_H264_SLICE_FLAG_BOTTOM_FIELD 0x02 > > +#define V4L2_H264_SLICE_FLAG_DIRECT_SPATIAL_MV_PRED 0x04 > > +#define V4L2_H264_SLICE_FLAG_SP_FOR_SWITCH 0x08 > > + > > +struct v4l2_ctrl_h264_slice_params { > > + /* Size in bytes, including header */ > > + __u32 size; > > + /* Offset in bits to slice_data() from the beginning of this slice. */ > > + __u32 header_bit_size; > > + > > + __u16 first_mb_in_slice; > > + __u8 slice_type; > > + __u8 pic_parameter_set_id; > > + __u8 colour_plane_id; > > + __u8 redundant_pic_cnt; > > + __u16 frame_num; > > + __u16 idr_pic_id; > > + __u16 pic_order_cnt_lsb; > > + __s32 delta_pic_order_cnt_bottom; > > + __s32 delta_pic_order_cnt0; > > + __s32 delta_pic_order_cnt1; > > + > > + struct v4l2_h264_pred_weight_table pred_weight_table; > > + /* Size in bits of dec_ref_pic_marking() syntax element. */ > > + __u32 dec_ref_pic_marking_bit_size; > > + /* Size in bits of pic order count syntax. */ > > + __u32 pic_order_cnt_bit_size; > > + > > + __u8 cabac_init_idc; > > + __s8 slice_qp_delta; > > + __s8 slice_qs_delta; > > + __u8 disable_deblocking_filter_idc; > > + __s8 slice_alpha_c0_offset_div2; > > + __s8 slice_beta_offset_div2; > > + __u8 num_ref_idx_l0_active_minus1; > > + __u8 num_ref_idx_l1_active_minus1; > > + __u32 slice_group_change_cycle; > > + > > + /* > > + * Entries on each list are indices into > > + * v4l2_ctrl_h264_decode_params.dpb[]. > > + */ > > + __u8 ref_pic_list0[32]; > > + __u8 ref_pic_list1[32]; > > + > > + __u32 flags; > > +}; > > + > > +#define V4L2_H264_DPB_ENTRY_FLAG_VALID 0x01 > > +#define V4L2_H264_DPB_ENTRY_FLAG_ACTIVE 0x02 > > +#define V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM 0x04 > > + > > +struct v4l2_h264_dpb_entry { > > + __u64 reference_ts; > > + __u16 frame_num; > > + __u16 pic_num; > > + /* Note that field is indicated by v4l2_buffer.field */ > > + __s32 top_field_order_cnt; > > + __s32 bottom_field_order_cnt; > > + __u32 flags; /* V4L2_H264_DPB_ENTRY_FLAG_* */ > > +}; > > + > > +#define V4L2_H264_DECODE_PARAM_FLAG_IDR_PIC 0x01 > > + > > +struct v4l2_ctrl_h264_decode_params { > > + struct v4l2_h264_dpb_entry dpb[16]; > > + __u16 num_slices; > > + __u16 nal_ref_idc; > > + __u8 ref_pic_list_p0[32]; > > + __u8 ref_pic_list_b0[32]; > > + __u8 ref_pic_list_b1[32]; > > + __s32 top_field_order_cnt; > > + __s32 bottom_field_order_cnt; > > + __u32 flags; /* V4L2_H264_DECODE_PARAM_FLAG_* */ > > +}; > > + > > +#endif > > diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h > > index bd621cec65a5..dce6f33fd749 100644 > > --- a/include/media/v4l2-ctrls.h > > +++ b/include/media/v4l2-ctrls.h > > @@ -23,11 +23,12 @@ > > #include > > > > /* > > - * Include the mpeg2 and fwht stateless codec compound control definitions. > > + * Include the stateless codec compound control definitions. > > * This will move to the public headers once this API is fully stable. > > */ > > #include > > #include > > +#include > > > > /* forward references */ > > struct file; > > @@ -51,6 +52,11 @@ struct poll_table_struct; > > * @p_mpeg2_slice_params: Pointer to a MPEG2 slice parameters structure. > > * @p_mpeg2_quantization: Pointer to a MPEG2 quantization data structure. > > * @p_fwht_params: Pointer to a FWHT stateless parameters structure. > > + * @p_h264_sps: Pointer to a struct v4l2_ctrl_h264_sps. > > + * @p_h264_pps: Pointer to a struct v4l2_ctrl_h264_pps. > > + * @p_h264_scaling_matrix: Pointer to a struct v4l2_ctrl_h264_scaling_matrix. > > + * @p_h264_slice_param: Pointer to a struct v4l2_ctrl_h264_slice_params. > > + * @p_h264_decode_param: Pointer to a struct v4l2_ctrl_h264_decode_params. > > * @p: Pointer to a compound value. > > */ > > union v4l2_ctrl_ptr { > > @@ -63,6 +69,11 @@ union v4l2_ctrl_ptr { > > struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params; > > struct v4l2_ctrl_mpeg2_quantization *p_mpeg2_quantization; > > struct v4l2_ctrl_fwht_params *p_fwht_params; > > + struct v4l2_ctrl_h264_sps *p_h264_sps; > > + struct v4l2_ctrl_h264_pps *p_h264_pps; > > + struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix; > > + struct v4l2_ctrl_h264_slice_params *p_h264_slice_param; > > + struct v4l2_ctrl_h264_decode_params *p_h264_decode_param; > > void *p; > > }; > > > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > > index 496e6453450c..838732acdefc 100644 > > --- a/include/uapi/linux/videodev2.h > > +++ b/include/uapi/linux/videodev2.h > > @@ -657,6 +657,7 @@ struct v4l2_pix_format { > > #define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */ > > #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */ > > #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */ > > +#define V4L2_PIX_FMT_H264_SLICE_RAW v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices */ > > #define V4L2_PIX_FMT_H263 v4l2_fourcc('H', '2', '6', '3') /* H263 */ > > #define V4L2_PIX_FMT_MPEG1 v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES */ > > #define V4L2_PIX_FMT_MPEG2 v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES */ -- Paul Kocialkowski, Bootlin Embedded Linux and kernel engineering https://bootlin.com From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 267E2C10F14 for ; Thu, 11 Apr 2019 08:48:24 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DBEC621850 for ; Thu, 11 Apr 2019 08:48:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="tCLJ0dlu" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DBEC621850 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=nHwdLPAu/O6te8Pb89jxO6Ri1ZjDixpKVcoYLzibRIE=; b=tCLJ0dluB1QIBL 9tIyRk+yRthoNmFs0VNFqbWfqoGZDI36EwCwhRFIgGs29uChXB/hSScV0LzXev3YhvIs7I5Sy/Orj IK1umKXiQR308X8HzZrYaUJSQ868wgV1wRYh5OT55I/Dc4LzL3TT5SA2CpODh+4Fgf/g09oiqQEg9 aIEY2KzTEp1E4LgN1WcbgtWS5PiW1G8smbfGZc/fLIvKFldB4YKlbDQIv7Eo58CK4VlEVaaoBfj77 L7kP07Ix3h+mMfLUeQite42G8ct1PrwdUNoWFUoKihCx3TMee3ZRvfmwWD3zSYZJRse/Bhm85PJJr Ez8M6wkWhyIpIa60FH7g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hEVNX-0003xs-TY; Thu, 11 Apr 2019 08:48:15 +0000 Received: from relay8-d.mail.gandi.net ([217.70.183.201]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hEVNS-0003wl-7U for linux-arm-kernel@lists.infradead.org; Thu, 11 Apr 2019 08:48:14 +0000 X-Originating-IP: 90.88.18.121 Received: from aptenodytes (aaubervilliers-681-1-63-121.w90-88.abo.wanadoo.fr [90.88.18.121]) (Authenticated sender: paul.kocialkowski@bootlin.com) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 9265E1BF217; Thu, 11 Apr 2019 08:47:54 +0000 (UTC) Message-ID: <53e40a98df46f42f52dfb3e0b753135753103d06.camel@bootlin.com> Subject: Re: [PATCH v8 1/2] media: uapi: Add H264 low-level decoder API compound controls. From: Paul Kocialkowski To: Maxime Ripard , hans.verkuil@cisco.com, acourbot@chromium.org, sakari.ailus@linux.intel.com, Laurent Pinchart Date: Thu, 11 Apr 2019 10:47:54 +0200 In-Reply-To: References: Organization: Bootlin User-Agent: Evolution 3.32.0 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190411_014810_589197_5C3B0464 X-CRM114-Status: GOOD ( 24.63 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jonas@kwiboo.se, jenskuske@gmail.com, linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org, jernej.skrabec@gmail.com, tfiga@chromium.org, Chen-Yu Tsai , posciak@chromium.org, Thomas Petazzoni , Guenter Roeck , nicolas.dufresne@collabora.com, ezequiel@collabora.com, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgpMZSBtZXJjcmVkaSAxMCBhdnJpbCAyMDE5IMOgIDE1OjQ0ICswMjAwLCBQYXVsIEtvY2lh bGtvd3NraSBhIMOpY3JpdCA6Cj4gSGksCj4gCj4gTGUgamV1ZGkgMDQgYXZyaWwgMjAxOSDDoCAx NDo1OSArMDIwMCwgTWF4aW1lIFJpcGFyZCBhIMOpY3JpdCA6Cj4gPiBGcm9tOiBQYXdlbCBPc2Np YWsgPHBvc2NpYWtAY2hyb21pdW0ub3JnPgo+ID4gCj4gPiBTdGF0ZWxlc3MgdmlkZW8gY29kZWNz IHdpbGwgcmVxdWlyZSBib3RoIHRoZSBIMjY0IG1ldGFkYXRhIGFuZCBzbGljZXMgaW4KPiA+IG9y ZGVyIHRvIGJlIGFibGUgdG8gZGVjb2RlIGZyYW1lcy4KPiA+IAo+ID4gVGhpcyBpbnRyb2R1Y2Vz IHRoZSBkZWZpbml0aW9ucyBmb3IgYSBuZXcgcGl4ZWwgZm9ybWF0IGZvciBIMjY0IHNsaWNlcyB0 aGF0Cj4gPiBoYXZlIGJlZW4gcGFyc2VkLCBhcyB3ZWxsIGFzIHRoZSBzdHJ1Y3R1cmVzIHVzZWQg dG8gcGFzcyB0aGUgbWV0YWRhdGEgZnJvbQo+ID4gdGhlIHVzZXJzcGFjZSB0byB0aGUga2VybmVs Lgo+IAo+IFdpdGggVjRMMl9QSVhfRk1UX0gyNjRfU0xJQ0VfUkFXIHJlbmFtZWQgdG8gVjRMMl9Q SVhfRk1UX0gyNjRfU0xJQ0UgYW5kCj4gbW92ZWQgdG8gdGhlIHByaXZhdGUgaDI2NC1jdHJscy5o LCB0aGlzIGlzOgoKV2VsbCwgc2luY2UgdGhlIHBpeGZtdCB3aWxsIGJlY29tZSBwcml2YXRlLCB3 ZSBkb24ndCByZWFsbHkgbmVlZCB0aGUKcmVuYW1lLCBlc3BlY2lhbGx5IGlmIHRoYXQgY2FuIGF2 b2lkIHVzIGFub3RoZXIgcm91bmQgb2YgcmV2aWV3LiBUaGUKcG9pbnQgd2FzIHRvIG1ha2UgTVBF Ry0yIGFuZCBIMjY0IHBpeGZtdHMgbmFtaW5nIGNvbnNpc3RlbnQsIGJ1dCBpdCdzCm1vcmUgY29t cGxpY2F0ZWQgdGhhbiB3aGF0IEkgc3VnZ2VzdGVkIHJlYWxseS4KClNvIGZlZWwgZnJlZSB0byBh cHBseSBteSByZXZpZXdlZC1ieSBvbiB0aGVzZSB0d28gcGF0Y2hlcyBwcm92aWRlZCB0aGF0CnRo ZSBkZWZpbml0aW9uIGlzIG1hZGUgcHJpdmF0ZS4KCkkgdGhpbmsgd2Ugd2lsbCBuZWVkIG1vcmUg ZGlzY3Vzc2lvbnMgYWJvdXQgdGhlIHBpeGVsIGZvcm1hdHMsIGFuZApOaWNvbGFzIGFuZCBFemVx dWllbCdzIHByb3Bvc2FsIGF0IGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE5LzIvMTIvMjQ4IApm ZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhhdC4KCkkgc2VlIGEgZmV3IG1v cmUgaXNzdWVzIHRoYXQgbmVlZCB0byBiZSBkaXNjdXNzZWQgdGhvdWdoLiBGb3IgaW5zdGFuY2Us CndoYXQgY29udHJvbHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgbWFuZGF0b3J5IGZvciBlYWNoIHBp eGZtdD8gUHJvdmlkZWQKdGhhdCB0aGUgQW5uZXgtQiBmYXNoaW9uIHdvdWxkIGFsc28gY29udGFp biB0aGUgYmluYXJ5IHNsaWNlIGhlYWRlciwKc2hvdWxkIGl0IGJlIG1hbmRhdG9yeS9hbGxvd2Vk L3Bvc3NpYmxlIHRvIGFsc28gcHJvdmlkZSB0aGUgcGFyc2VkCnNsaWNlIGhlYWRlciBjb250cm9s PwoKVGhlcmUgYXJlIGFsc28gY29uc2lkZXJhdGlvbnMgdGhhdCBjb21lIHRvIG1pbmQgd2hlbiB0 aGlua2luZyBhYm91dCB0aGUKY2VkcnVzIEhFVkMgZGVjb2Rlciwgd2hlcmUgaXQgdGFrZXMgcGFy c2VkIGRhdGEgYnV0IGFsc28gbmVlZHMgc29tZQppbmZvcm1hdGlvbiBmcm9tIHRoZSBwYXlsb2Fk IGhlYWRlciAoTkFMIHR5cGUgKyBsYXllciBJRCArIHRlbXBvcmFsIElEKQp3aGljaCBpcyB0eXBp Y2FsbHkgbm90IHBhcnQgb2YgdGhlIHNsaWNlIGhlYWRlciBvbiBpdHMgb3duIChhbHRob3VnaAp0 aGF0J3MgaG93IEkgZXhwb3NlZCBpdCBpbiB0aGUgY3VycmVudCBIRVZDIHByb3Bvc2FsKS4gU28g dGhhdCB3b3VsZApraW5kIG9mIHJlcXVpcmUgaGF2aW5nIHRoZSBmdWxsIGFubmV4LWIgY29udGVu dHMsIGJ1dCB3ZSBkZWZpbml0ZWx5CndhbnQgdG8gcHJvdmlkZSBwYXJzZWQgc2xpY2UgZGF0YSBp biBhZGRpdGlvbiB0byB0aGUgYmluYXJ5IHNsaWNlCmhlYWRlciBmcm9tIHRoZSBhbm5leC1iIGRh dGEuCgpPciBtYXliZSBlYWNoIGNvbnRyb2wgdGhhdCByZWZsZWN0cyBhIGJpdHN0cmVhbSBzdHJ1 Y3R1cmUgaW4gYSBOQUwKZWxlbWVudCB3aGljaCBoYXMgYSBoZWFkZXIgb24gaXRzIG93biBzaG91 bGQgYWxzbyBpbmNsdWRlIHRoYXQgaGVhZGVyPwoKQW55d2F5IHRoYXQgZGlzY3Vzc2lvbiBzaG91 bGQgYmUgZm9sbG93ZWQtdXAgb25jZSB3ZSBoYXZlIG91ciBlYXJseQpjb2RlYyBjb250cm9scyBt ZXJnZWQgaW4gdGhlIHByaXZhdGUgQVBJLiBJIGNlcnRhaW5seSBkb24ndCB3YW50IHRvCmRlbGF5 IHRoaXMgc2VyaWVzIGFueSBmdXJ0aGVyLgoKQ2hlZXJzLAoKUGF1bAoKPiBSZXZpZXdlZC1ieTog UGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPgo+IAo+IENo ZWVycywKPiAKPiBQYXVsCj4gCj4gPiBSZXZpZXdlZC1ieTogVG9tYXN6IEZpZ2EgPHRmaWdhQGNo cm9taXVtLm9yZz4KPiA+IFNpZ25lZC1vZmYtYnk6IFBhd2VsIE9zY2lhayA8cG9zY2lha0BjaHJv bWl1bS5vcmc+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBHdWVudGVyIFJvZWNrIDxncm9lY2tAY2hyb21p dW0ub3JnPgo+ID4gQ28tZGV2ZWxvcGVkLWJ5OiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJk QGJvb3RsaW4uY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJp cGFyZEBib290bGluLmNvbT4KPiA+IC0tLQo+ID4gIERvY3VtZW50YXRpb24vbWVkaWEvdWFwaS92 NGwvYmlibGlvLnJzdCAgICAgICAgICAgIHwgICA5ICstCj4gPiAgRG9jdW1lbnRhdGlvbi9tZWRp YS91YXBpL3Y0bC9leHQtY3RybHMtY29kZWMucnN0ICAgfCA1NjkgKysrKysrKysrKysrKystCj4g PiAgRG9jdW1lbnRhdGlvbi9tZWRpYS91YXBpL3Y0bC9waXhmbXQtY29tcHJlc3NlZC5yc3QgfCAg MTkgKy0KPiA+ICBEb2N1bWVudGF0aW9uL21lZGlhL3VhcGkvdjRsL3ZpZGlvYy1xdWVyeWN0cmwu cnN0ICB8ICAzMCArLQo+ID4gIERvY3VtZW50YXRpb24vbWVkaWEvdmlkZW9kZXYyLmgucnN0LmV4 Y2VwdGlvbnMgICAgIHwgICA1ICstCj4gPiAgZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1j dHJscy5jICAgICAgICAgICAgICAgfCAgNDIgKy0KPiA+ICBkcml2ZXJzL21lZGlhL3Y0bDItY29y ZS92NGwyLWlvY3RsLmMgICAgICAgICAgICAgICB8ICAgMSArLQo+ID4gIGluY2x1ZGUvbWVkaWEv aDI2NC1jdHJscy5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTkyICsrKysrLQo+ID4gIGlu Y2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICst Cj4gPiAgaW5jbHVkZS91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKy0KPiA+ICAxMCBmaWxlcyBjaGFuZ2VkLCA4ODAgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL21lZGlhL2gyNjQtY3RybHMu aAo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZWRpYS91YXBpL3Y0bC9iaWJs aW8ucnN0IGIvRG9jdW1lbnRhdGlvbi9tZWRpYS91YXBpL3Y0bC9iaWJsaW8ucnN0Cj4gPiBpbmRl eCBlYzMzNzY4YzA1NWUuLjhmNGViODgyM2Q4MiAxMDA2NDQKPiA+IC0tLSBhL0RvY3VtZW50YXRp b24vbWVkaWEvdWFwaS92NGwvYmlibGlvLnJzdAo+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9tZWRp YS91YXBpL3Y0bC9iaWJsaW8ucnN0Cj4gPiBAQCAtMTIyLDYgKzEyMiwxNSBAQCBJVFUgQlQuMTEx OQo+ID4gIAo+ID4gIDphdXRob3I6ICAgIEludGVybmF0aW9uYWwgVGVsZWNvbW11bmljYXRpb24g VW5pb24gKGh0dHA6Ly93d3cuaXR1LmNoKQo+ID4gIAo+ID4gKy4uIF9oMjY0Ogo+ID4gKwo+ID4g K0lUVS1UIFJlYy4gSC4yNjQgU3BlY2lmaWNhdGlvbiAoMDQvMjAxNyBFZGl0aW9uKQo+ID4gKz09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ID4gKwo+ID4g Kzp0aXRsZTogICAgIElUVS1UIFJlY29tbWVuZGF0aW9uIEguMjY0ICJBZHZhbmNlZCBWaWRlbyBD b2RpbmcgZm9yIEdlbmVyaWMgQXVkaW92aXN1YWwgU2VydmljZXMiCj4gPiArCj4gPiArOmF1dGhv cjogICAgSW50ZXJuYXRpb25hbCBUZWxlY29tbXVuaWNhdGlvbiBVbmlvbiAoaHR0cDovL3d3dy5p dHUuY2gpCj4gPiArCj4gPiAgLi4gX2pmaWY6Cj4gPiAgCj4gPiAgSkZJRgo+ID4gZGlmZiAtLWdp dCBhL0RvY3VtZW50YXRpb24vbWVkaWEvdWFwaS92NGwvZXh0LWN0cmxzLWNvZGVjLnJzdCBiL0Rv Y3VtZW50YXRpb24vbWVkaWEvdWFwaS92NGwvZXh0LWN0cmxzLWNvZGVjLnJzdAo+ID4gaW5kZXgg NjdhMTIyMzM5YzBlLi5mZTcyMGYyMzlmNzAgMTAwNjQ0Cj4gPiAtLS0gYS9Eb2N1bWVudGF0aW9u L21lZGlhL3VhcGkvdjRsL2V4dC1jdHJscy1jb2RlYy5yc3QKPiA+ICsrKyBiL0RvY3VtZW50YXRp b24vbWVkaWEvdWFwaS92NGwvZXh0LWN0cmxzLWNvZGVjLnJzdAo+ID4gQEAgLTEzNzEsNiArMTM3 MSw1NzUgQEAgZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9oaWVyYXJjaGljYWxfY29kaW5nX3R5 cGUgLQo+ID4gICAgICAgIC0gTGF5ZXIgbnVtYmVyCj4gPiAgCj4gPiAgCj4gPiArLi4gX3Y0bDIt bXBlZy1oMjY0Ogo+ID4gKwo+ID4gK2BgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1NQUyAoc3Ry dWN0KWBgCj4gPiArICAgIFNwZWNpZmllcyB0aGUgc2VxdWVuY2UgcGFyYW1ldGVyIHNldCAoYXMg ZXh0cmFjdGVkIGZyb20gdGhlCj4gPiArICAgIGJpdHN0cmVhbSkgZm9yIHRoZSBhc3NvY2lhdGVk IEgyNjQgc2xpY2UgZGF0YS4gVGhpcyBpbmNsdWRlcyB0aGUKPiA+ICsgICAgbmVjZXNzYXJ5IHBh cmFtZXRlcnMgZm9yIGNvbmZpZ3VyaW5nIGEgc3RhdGVsZXNzIGhhcmR3YXJlIGRlY29kaW5nCj4g PiArICAgIHBpcGVsaW5lIGZvciBIMjY0LiBUaGUgYml0c3RyZWFtIHBhcmFtZXRlcnMgYXJlIGRl ZmluZWQgYWNjb3JkaW5nCj4gPiArICAgIHRvIDpyZWY6YGgyNjRgLCBzZWN0aW9uIDcuNC4yLjEu MSAiU2VxdWVuY2UgUGFyYW1ldGVyIFNldCBEYXRhCj4gPiArICAgIFNlbWFudGljcyIuIEZvciBm dXJ0aGVyIGRvY3VtZW50YXRpb24sIHJlZmVyIHRvIHRoZSBhYm92ZQo+ID4gKyAgICBzcGVjaWZp Y2F0aW9uLCB1bmxlc3MgdGhlcmUgaXMgYW4gZXhwbGljaXQgY29tbWVudCBzdGF0aW5nCj4gPiAr ICAgIG90aGVyd2lzZS4KPiA+ICsKPiA+ICsgICAgLi4gbm90ZTo6Cj4gPiArCj4gPiArICAgICAg IFRoaXMgY29tcG91bmQgY29udHJvbCBpcyBub3QgeWV0IHBhcnQgb2YgdGhlIHB1YmxpYyBrZXJu ZWwgQVBJIGFuZAo+ID4gKyAgICAgICBpdCBpcyBleHBlY3RlZCB0byBjaGFuZ2UuCj4gPiArCj4g PiArLi4gYzp0eXBlOjogdjRsMl9jdHJsX2gyNjRfc3BzCj4gPiArCj4gPiArLi4gY3NzY2xhc3M6 OiBsb25ndGFibGUKPiA+ICsKPiA+ICsuLiBmbGF0LXRhYmxlOjogc3RydWN0IHY0bDJfY3RybF9o MjY0X3Nwcwo+ID4gKyAgICA6aGVhZGVyLXJvd3M6ICAwCj4gPiArICAgIDpzdHViLWNvbHVtbnM6 IDAKPiA+ICsgICAgOndpZHRoczogICAgICAgMSAxIDIKPiA+ICsKPiA+ICsgICAgKiAtIF9fdTgK PiA+ICsgICAgICAtIGBgcHJvZmlsZV9pZGNgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9f dTgKPiA+ICsgICAgICAtIGBgY29uc3RyYWludF9zZXRfZmxhZ3NgYAo+ID4gKyAgICAgIC0gU2Vl IDpyZWY6YFNlcXVlbmNlIFBhcmFtZXRlciBTZXQgQ29uc3RyYWludHMgU2V0IEZsYWdzIDxoMjY0 X3Nwc19jb25zdHJhaW50c19zZXRfZmxhZ3M+YAo+ID4gKyAgICAqIC0gX191OAo+ID4gKyAgICAg IC0gYGBsZXZlbF9pZGNgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9fdTgKPiA+ICsgICAg ICAtIGBgc2VxX3BhcmFtZXRlcl9zZXRfaWRgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9f dTgKPiA+ICsgICAgICAtIGBgY2hyb21hX2Zvcm1hdF9pZGNgYAo+ID4gKyAgICAgIC0KPiA+ICsg ICAgKiAtIF9fdTgKPiA+ICsgICAgICAtIGBgYml0X2RlcHRoX2x1bWFfbWludXM4YGAKPiA+ICsg ICAgICAtCj4gPiArICAgICogLSBfX3U4Cj4gPiArICAgICAgLSBgYGJpdF9kZXB0aF9jaHJvbWFf bWludXM4YGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBfX3U4Cj4gPiArICAgICAgLSBgYGxv ZzJfbWF4X2ZyYW1lX251bV9taW51czRgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9fdTgK PiA+ICsgICAgICAtIGBgcGljX29yZGVyX2NudF90eXBlYGAKPiA+ICsgICAgICAtCj4gPiArICAg ICogLSBfX3U4Cj4gPiArICAgICAgLSBgYGxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNiX21pbnVz NGBgCj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gX191OAo+ID4gKyAgICAgIC0gYGBtYXhfbnVt X3JlZl9mcmFtZXNgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9fdTgKPiA+ICsgICAgICAt IGBgbnVtX3JlZl9mcmFtZXNfaW5fcGljX29yZGVyX2NudF9jeWNsZWBgCj4gPiArICAgICAgLQo+ ID4gKyAgICAqIC0gX19zMzIKPiA+ICsgICAgICAtIGBgb2Zmc2V0X2Zvcl9yZWZfZnJhbWVbMjU1 XWBgCj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gX19zMzIKPiA+ICsgICAgICAtIGBgb2Zmc2V0 X2Zvcl9ub25fcmVmX3BpY2BgCj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gX19zMzIKPiA+ICsg ICAgICAtIGBgb2Zmc2V0X2Zvcl90b3BfdG9fYm90dG9tX2ZpZWxkYGAKPiA+ICsgICAgICAtCj4g PiArICAgICogLSBfX3UxNgo+ID4gKyAgICAgIC0gYGBwaWNfd2lkdGhfaW5fbWJzX21pbnVzMWBg Cj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gX191MTYKPiA+ICsgICAgICAtIGBgcGljX2hlaWdo dF9pbl9tYXBfdW5pdHNfbWludXMxYGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBfX3UzMgo+ ID4gKyAgICAgIC0gYGBmbGFnc2BgCj4gPiArICAgICAgLSBTZWUgOnJlZjpgU2VxdWVuY2UgUGFy YW1ldGVyIFNldCBGbGFncyA8aDI2NF9zcHNfZmxhZ3M+YAo+ID4gKwo+ID4gKy4uIF9oMjY0X3Nw c19jb25zdHJhaW50c19zZXRfZmxhZ3M6Cj4gPiArCj4gPiArYGBTZXF1ZW5jZSBQYXJhbWV0ZXIg U2V0IENvbnN0cmFpbnRzIFNldCBGbGFnc2BgCj4gPiArCj4gPiArLi4gY3NzY2xhc3M6OiBsb25n dGFibGUKPiA+ICsKPiA+ICsuLiBmbGF0LXRhYmxlOjoKPiA+ICsgICAgOmhlYWRlci1yb3dzOiAg MAo+ID4gKyAgICA6c3R1Yi1jb2x1bW5zOiAwCj4gPiArICAgIDp3aWR0aHM6ICAgICAgIDEgMSAy Cj4gPiArCj4gPiArICAgICogLSBgYFY0TDJfSDI2NF9TUFNfQ09OU1RSQUlOVF9TRVQwX0ZMQUdg YAo+ID4gKyAgICAgIC0gMHgwMDAwMDAwMQo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIGBgVjRM Ml9IMjY0X1NQU19DT05TVFJBSU5UX1NFVDFfRkxBR2BgCj4gPiArICAgICAgLSAweDAwMDAwMDAy Cj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gYGBWNEwyX0gyNjRfU1BTX0NPTlNUUkFJTlRfU0VU Ml9GTEFHYGAKPiA+ICsgICAgICAtIDB4MDAwMDAwMDQKPiA+ICsgICAgICAtCj4gPiArICAgICog LSBgYFY0TDJfSDI2NF9TUFNfQ09OU1RSQUlOVF9TRVQzX0ZMQUdgYAo+ID4gKyAgICAgIC0gMHgw MDAwMDAwOAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIGBgVjRMMl9IMjY0X1NQU19DT05TVFJB SU5UX1NFVDRfRkxBR2BgCj4gPiArICAgICAgLSAweDAwMDAwMDEwCj4gPiArICAgICAgLQo+ID4g KyAgICAqIC0gYGBWNEwyX0gyNjRfU1BTX0NPTlNUUkFJTlRfU0VUNV9GTEFHYGAKPiA+ICsgICAg ICAtIDB4MDAwMDAwMjAKPiA+ICsgICAgICAtCj4gPiArCj4gPiArLi4gX2gyNjRfc3BzX2ZsYWdz Ogo+ID4gKwo+ID4gK2BgU2VxdWVuY2UgUGFyYW1ldGVyIFNldCBGbGFnc2BgCj4gPiArCj4gPiAr Li4gY3NzY2xhc3M6OiBsb25ndGFibGUKPiA+ICsKPiA+ICsuLiBmbGF0LXRhYmxlOjoKPiA+ICsg ICAgOmhlYWRlci1yb3dzOiAgMAo+ID4gKyAgICA6c3R1Yi1jb2x1bW5zOiAwCj4gPiArICAgIDp3 aWR0aHM6ICAgICAgIDEgMSAyCj4gPiArCj4gPiArICAgICogLSBgYFY0TDJfSDI2NF9TUFNfRkxB R19TRVBBUkFURV9DT0xPVVJfUExBTkVgYAo+ID4gKyAgICAgIC0gMHgwMDAwMDAwMQo+ID4gKyAg ICAgIC0KPiA+ICsgICAgKiAtIGBgVjRMMl9IMjY0X1NQU19GTEFHX1FQUFJJTUVfWV9aRVJPX1RS QU5TRk9STV9CWVBBU1NgYAo+ID4gKyAgICAgIC0gMHgwMDAwMDAwMgo+ID4gKyAgICAgIC0KPiA+ ICsgICAgKiAtIGBgVjRMMl9IMjY0X1NQU19GTEFHX0RFTFRBX1BJQ19PUkRFUl9BTFdBWVNfWkVS T2BgCj4gPiArICAgICAgLSAweDAwMDAwMDA0Cj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gYGBW NEwyX0gyNjRfU1BTX0ZMQUdfR0FQU19JTl9GUkFNRV9OVU1fVkFMVUVfQUxMT1dFRGBgCj4gPiAr ICAgICAgLSAweDAwMDAwMDA4Cj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gYGBWNEwyX0gyNjRf U1BTX0ZMQUdfRlJBTUVfTUJTX09OTFlgYAo+ID4gKyAgICAgIC0gMHgwMDAwMDAxMAo+ID4gKyAg ICAgIC0KPiA+ICsgICAgKiAtIGBgVjRMMl9IMjY0X1NQU19GTEFHX01CX0FEQVBUSVZFX0ZSQU1F X0ZJRUxEYGAKPiA+ICsgICAgICAtIDB4MDAwMDAwMjAKPiA+ICsgICAgICAtCj4gPiArICAgICog LSBgYFY0TDJfSDI2NF9TUFNfRkxBR19ESVJFQ1RfOFg4X0lORkVSRU5DRWBgCj4gPiArICAgICAg LSAweDAwMDAwMDQwCj4gPiArICAgICAgLQo+ID4gKwo+ID4gK2BgVjRMMl9DSURfTVBFR19WSURF T19IMjY0X1BQUyAoc3RydWN0KWBgCj4gPiArICAgIFNwZWNpZmllcyB0aGUgcGljdHVyZSBwYXJh bWV0ZXIgc2V0IChhcyBleHRyYWN0ZWQgZnJvbSB0aGUKPiA+ICsgICAgYml0c3RyZWFtKSBmb3Ig dGhlIGFzc29jaWF0ZWQgSDI2NCBzbGljZSBkYXRhLiBUaGlzIGluY2x1ZGVzIHRoZQo+ID4gKyAg ICBuZWNlc3NhcnkgcGFyYW1ldGVycyBmb3IgY29uZmlndXJpbmcgYSBzdGF0ZWxlc3MgaGFyZHdh cmUgZGVjb2RpbmcKPiA+ICsgICAgcGlwZWxpbmUgZm9yIEgyNjQuICBUaGUgYml0c3RyZWFtIHBh cmFtZXRlcnMgYXJlIGRlZmluZWQgYWNjb3JkaW5nCj4gPiArICAgIHRvIDpyZWY6YGgyNjRgLCBz ZWN0aW9uIDcuNC4yLjIgIlBpY3R1cmUgUGFyYW1ldGVyIFNldCBSQlNQCj4gPiArICAgIFNlbWFu dGljcyIuIEZvciBmdXJ0aGVyIGRvY3VtZW50YXRpb24sIHJlZmVyIHRvIHRoZSBhYm92ZQo+ID4g KyAgICBzcGVjaWZpY2F0aW9uLCB1bmxlc3MgdGhlcmUgaXMgYW4gZXhwbGljaXQgY29tbWVudCBz dGF0aW5nCj4gPiArICAgIG90aGVyd2lzZS4KPiA+ICsKPiA+ICsgICAgLi4gbm90ZTo6Cj4gPiAr Cj4gPiArICAgICAgIFRoaXMgY29tcG91bmQgY29udHJvbCBpcyBub3QgeWV0IHBhcnQgb2YgdGhl IHB1YmxpYyBrZXJuZWwgQVBJIGFuZAo+ID4gKyAgICAgICBpdCBpcyBleHBlY3RlZCB0byBjaGFu Z2UuCj4gPiArCj4gPiArLi4gYzp0eXBlOjogdjRsMl9jdHJsX2gyNjRfcHBzCj4gPiArCj4gPiAr Li4gY3NzY2xhc3M6OiBsb25ndGFibGUKPiA+ICsKPiA+ICsuLiBmbGF0LXRhYmxlOjogc3RydWN0 IHY0bDJfY3RybF9oMjY0X3Bwcwo+ID4gKyAgICA6aGVhZGVyLXJvd3M6ICAwCj4gPiArICAgIDpz dHViLWNvbHVtbnM6IDAKPiA+ICsgICAgOndpZHRoczogICAgICAgMSAxIDIKPiA+ICsKPiA+ICsg ICAgKiAtIF9fdTgKPiA+ICsgICAgICAtIGBgcGljX3BhcmFtZXRlcl9zZXRfaWRgYAo+ID4gKyAg ICAgIC0KPiA+ICsgICAgKiAtIF9fdTgKPiA+ICsgICAgICAtIGBgc2VxX3BhcmFtZXRlcl9zZXRf aWRgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9fdTgKPiA+ICsgICAgICAtIGBgbnVtX3Ns aWNlX2dyb3Vwc19taW51czFgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9fdTgKPiA+ICsg ICAgICAtIGBgbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxYGAKPiA+ICsgICAg ICAtCj4gPiArICAgICogLSBfX3U4Cj4gPiArICAgICAgLSBgYG51bV9yZWZfaWR4X2wxX2RlZmF1 bHRfYWN0aXZlX21pbnVzMWBgCj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gX191OAo+ID4gKyAg ICAgIC0gYGB3ZWlnaHRlZF9iaXByZWRfaWRjYGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBf X3M4Cj4gPiArICAgICAgLSBgYHBpY19pbml0X3FwX21pbnVzMjZgYAo+ID4gKyAgICAgIC0KPiA+ ICsgICAgKiAtIF9fczgKPiA+ICsgICAgICAtIGBgcGljX2luaXRfcXNfbWludXMyNmBgCj4gPiAr ICAgICAgLQo+ID4gKyAgICAqIC0gX19zOAo+ID4gKyAgICAgIC0gYGBjaHJvbWFfcXBfaW5kZXhf b2Zmc2V0YGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBfX3M4Cj4gPiArICAgICAgLSBgYHNl Y29uZF9jaHJvbWFfcXBfaW5kZXhfb2Zmc2V0YGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBf X3UxNgo+ID4gKyAgICAgIC0gYGBmbGFnc2BgCj4gPiArICAgICAgLSBTZWUgOnJlZjpgUGljdHVy ZSBQYXJhbWV0ZXIgU2V0IEZsYWdzIDxoMjY0X3Bwc19mbGFncz5gCj4gPiArCj4gPiArLi4gX2gy NjRfcHBzX2ZsYWdzOgo+ID4gKwo+ID4gK2BgUGljdHVyZSBQYXJhbWV0ZXIgU2V0IEZsYWdzYGAK PiA+ICsKPiA+ICsuLiBjc3NjbGFzczo6IGxvbmd0YWJsZQo+ID4gKwo+ID4gKy4uIGZsYXQtdGFi bGU6Ogo+ID4gKyAgICA6aGVhZGVyLXJvd3M6ICAwCj4gPiArICAgIDpzdHViLWNvbHVtbnM6IDAK PiA+ICsgICAgOndpZHRoczogICAgICAgMSAxIDIKPiA+ICsKPiA+ICsgICAgKiAtIGBgVjRMMl9I MjY0X1BQU19GTEFHX0VOVFJPUFlfQ09ESU5HX01PREVgYAo+ID4gKyAgICAgIC0gMHgwMDAwMDAw MQo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIGBgVjRMMl9IMjY0X1BQU19GTEFHX0JPVFRPTV9G SUVMRF9QSUNfT1JERVJfSU5fRlJBTUVfUFJFU0VOVGBgCj4gPiArICAgICAgLSAweDAwMDAwMDAy Cj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gYGBWNEwyX0gyNjRfUFBTX0ZMQUdfV0VJR0hURURf UFJFRGBgCj4gPiArICAgICAgLSAweDAwMDAwMDA0Cj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0g YGBWNEwyX0gyNjRfUFBTX0ZMQUdfREVCTE9DS0lOR19GSUxURVJfQ09OVFJPTF9QUkVTRU5UYGAK PiA+ICsgICAgICAtIDB4MDAwMDAwMDgKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBgYFY0TDJf SDI2NF9QUFNfRkxBR19DT05TVFJBSU5FRF9JTlRSQV9QUkVEYGAKPiA+ICsgICAgICAtIDB4MDAw MDAwMTAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBgYFY0TDJfSDI2NF9QUFNfRkxBR19SRURV TkRBTlRfUElDX0NOVF9QUkVTRU5UYGAKPiA+ICsgICAgICAtIDB4MDAwMDAwMjAKPiA+ICsgICAg ICAtCj4gPiArICAgICogLSBgYFY0TDJfSDI2NF9QUFNfRkxBR19UUkFOU0ZPUk1fOFg4X01PREVg YAo+ID4gKyAgICAgIC0gMHgwMDAwMDA0MAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIGBgVjRM Ml9IMjY0X1BQU19GTEFHX1BJQ19TQ0FMSU5HX01BVFJJWF9QUkVTRU5UYGAKPiA+ICsgICAgICAt IDB4MDAwMDAwODAKPiA+ICsgICAgICAtCj4gPiArCj4gPiArYGBWNEwyX0NJRF9NUEVHX1ZJREVP X0gyNjRfU0NBTElOR19NQVRSSVggKHN0cnVjdClgYAo+ID4gKyAgICBTcGVjaWZpZXMgdGhlIHNj YWxpbmcgbWF0cml4IChhcyBleHRyYWN0ZWQgZnJvbSB0aGUgYml0c3RyZWFtKSBmb3IKPiA+ICsg ICAgdGhlIGFzc29jaWF0ZWQgSDI2NCBzbGljZSBkYXRhLiBUaGUgYml0c3RyZWFtIHBhcmFtZXRl cnMgYXJlCj4gPiArICAgIGRlZmluZWQgYWNjb3JkaW5nIHRvIDpyZWY6YGgyNjRgLCBzZWN0aW9u IDcuNC4yLjEuMS4xICJTY2FsaW5nCj4gPiArICAgIExpc3QgU2VtYW50aWNzIi5Gb3IgZnVydGhl ciBkb2N1bWVudGF0aW9uLCByZWZlciB0byB0aGUgYWJvdmUKPiA+ICsgICAgc3BlY2lmaWNhdGlv biwgdW5sZXNzIHRoZXJlIGlzIGFuIGV4cGxpY2l0IGNvbW1lbnQgc3RhdGluZwo+ID4gKyAgICBv dGhlcndpc2UuCj4gPiArCj4gPiArICAgIC4uIG5vdGU6Ogo+ID4gKwo+ID4gKyAgICAgICBUaGlz IGNvbXBvdW5kIGNvbnRyb2wgaXMgbm90IHlldCBwYXJ0IG9mIHRoZSBwdWJsaWMga2VybmVsIEFQ SSBhbmQKPiA+ICsgICAgICAgaXQgaXMgZXhwZWN0ZWQgdG8gY2hhbmdlLgo+ID4gKwo+ID4gKy4u IGM6dHlwZTo6IHY0bDJfY3RybF9oMjY0X3NjYWxpbmdfbWF0cml4Cj4gPiArCj4gPiArLi4gY3Nz Y2xhc3M6OiBsb25ndGFibGUKPiA+ICsKPiA+ICsuLiBmbGF0LXRhYmxlOjogc3RydWN0IHY0bDJf Y3RybF9oMjY0X3NjYWxpbmdfbWF0cml4Cj4gPiArICAgIDpoZWFkZXItcm93czogIDAKPiA+ICsg ICAgOnN0dWItY29sdW1uczogMAo+ID4gKyAgICA6d2lkdGhzOiAgICAgICAxIDEgMgo+ID4gKwo+ ID4gKyAgICAqIC0gX191OAo+ID4gKyAgICAgIC0gYGBzY2FsaW5nX2xpc3RfNHg0WzZdWzE2XWBg Cj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gX191OAo+ID4gKyAgICAgIC0gYGBzY2FsaW5nX2xp c3RfOHg4WzZdWzY0XWBgCj4gPiArICAgICAgLQo+ID4gKwo+ID4gK2BgVjRMMl9DSURfTVBFR19W SURFT19IMjY0X1NMSUNFX1BBUkFNUyAoc3RydWN0KWBgCj4gPiArICAgIFNwZWNpZmllcyB0aGUg c2xpY2UgcGFyYW1ldGVycyAoYXMgZXh0cmFjdGVkIGZyb20gdGhlIGJpdHN0cmVhbSkKPiA+ICsg ICAgZm9yIHRoZSBhc3NvY2lhdGVkIEgyNjQgc2xpY2UgZGF0YS4gVGhpcyBpbmNsdWRlcyB0aGUg bmVjZXNzYXJ5Cj4gPiArICAgIHBhcmFtZXRlcnMgZm9yIGNvbmZpZ3VyaW5nIGEgc3RhdGVsZXNz IGhhcmR3YXJlIGRlY29kaW5nIHBpcGVsaW5lCj4gPiArICAgIGZvciBIMjY0LiAgVGhlIGJpdHN0 cmVhbSBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGFjY29yZGluZyB0bwo+ID4gKyAgICA6cmVmOmBo MjY0YCwgc2VjdGlvbiA3LjQuMyAiU2xpY2UgSGVhZGVyIFNlbWFudGljcyIuIEZvciBmdXJ0aGVy Cj4gPiArICAgIGRvY3VtZW50YXRpb24sIHJlZmVyIHRvIHRoZSBhYm92ZSBzcGVjaWZpY2F0aW9u LCB1bmxlc3MgdGhlcmUgaXMKPiA+ICsgICAgYW4gZXhwbGljaXQgY29tbWVudCBzdGF0aW5nIG90 aGVyd2lzZS4KPiA+ICsKPiA+ICsgICAgLi4gbm90ZTo6Cj4gPiArCj4gPiArICAgICAgIFRoaXMg Y29tcG91bmQgY29udHJvbCBpcyBub3QgeWV0IHBhcnQgb2YgdGhlIHB1YmxpYyBrZXJuZWwgQVBJ Cj4gPiArICAgICAgIGFuZCBpdCBpcyBleHBlY3RlZCB0byBjaGFuZ2UuCj4gPiArCj4gPiArICAg ICAgIFRoaXMgc3RydWN0dXJlIGlzIGV4cGVjdGVkIHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheSwg d2l0aCBvbmUKPiA+ICsgICAgICAgZW50cnkgZm9yIGVhY2ggc2xpY2UgaW5jbHVkZWQgaW4gdGhl IGJpdHN0cmVhbSBidWZmZXIuCj4gPiArCj4gPiArLi4gYzp0eXBlOjogdjRsMl9jdHJsX2gyNjRf c2xpY2VfcGFyYW1zCj4gPiArCj4gPiArLi4gY3NzY2xhc3M6OiBsb25ndGFibGUKPiA+ICsKPiA+ ICsuLiBmbGF0LXRhYmxlOjogc3RydWN0IHY0bDJfY3RybF9oMjY0X3NsaWNlX3BhcmFtcwo+ID4g KyAgICA6aGVhZGVyLXJvd3M6ICAwCj4gPiArICAgIDpzdHViLWNvbHVtbnM6IDAKPiA+ICsgICAg OndpZHRoczogICAgICAgMSAxIDIKPiA+ICsKPiA+ICsgICAgKiAtIF9fdTMyCj4gPiArICAgICAg LSBgYHNpemVgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9fdTMyCj4gPiArICAgICAgLSBg YGhlYWRlcl9iaXRfc2l6ZWBgCj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gX191MTYKPiA+ICsg ICAgICAtIGBgZmlyc3RfbWJfaW5fc2xpY2VgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9f dTgKPiA+ICsgICAgICAtIGBgc2xpY2VfdHlwZWBgCj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0g X191OAo+ID4gKyAgICAgIC0gYGBwaWNfcGFyYW1ldGVyX3NldF9pZGBgCj4gPiArICAgICAgLQo+ ID4gKyAgICAqIC0gX191OAo+ID4gKyAgICAgIC0gYGBjb2xvdXJfcGxhbmVfaWRgYAo+ID4gKyAg ICAgIC0KPiA+ICsgICAgKiAtIF9fdTgKPiA+ICsgICAgICAtIGBgcmVkdW5kYW50X3BpY19jbnRg YAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9fdTE2Cj4gPiArICAgICAgLSBgYGZyYW1lX251 bWBgCj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gX191MTYKPiA+ICsgICAgICAtIGBgaWRyX3Bp Y19pZGBgCj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gX191MTYKPiA+ICsgICAgICAtIGBgcGlj X29yZGVyX2NudF9sc2JgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9fczMyCj4gPiArICAg ICAgLSBgYGRlbHRhX3BpY19vcmRlcl9jbnRfYm90dG9tYGAKPiA+ICsgICAgICAtCj4gPiArICAg ICogLSBfX3MzMgo+ID4gKyAgICAgIC0gYGBkZWx0YV9waWNfb3JkZXJfY250MGBgCj4gPiArICAg ICAgLQo+ID4gKyAgICAqIC0gX19zMzIKPiA+ICsgICAgICAtIGBgZGVsdGFfcGljX29yZGVyX2Nu dDFgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIHN0cnVjdCA6Yzp0eXBlOmB2NGwyX2gyNjRf cHJlZF93ZWlnaHRfdGFibGVgCj4gPiArICAgICAgLSBgYHByZWRfd2VpZ2h0X3RhYmxlYGAKPiA+ ICsgICAgICAtCj4gPiArICAgICogLSBfX3UzMgo+ID4gKyAgICAgIC0gYGBkZWNfcmVmX3BpY19t YXJraW5nX2JpdF9zaXplYGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBfX3UzMgo+ID4gKyAg ICAgIC0gYGBwaWNfb3JkZXJfY250X2JpdF9zaXplYGAKPiA+ICsgICAgICAtCj4gPiArICAgICog LSBfX3U4Cj4gPiArICAgICAgLSBgYGNhYmFjX2luaXRfaWRjYGAKPiA+ICsgICAgICAtCj4gPiAr ICAgICogLSBfX3M4Cj4gPiArICAgICAgLSBgYHNsaWNlX3FwX2RlbHRhYGAKPiA+ICsgICAgICAt Cj4gPiArICAgICogLSBfX3M4Cj4gPiArICAgICAgLSBgYHNsaWNlX3FzX2RlbHRhYGAKPiA+ICsg ICAgICAtCj4gPiArICAgICogLSBfX3U4Cj4gPiArICAgICAgLSBgYGRpc2FibGVfZGVibG9ja2lu Z19maWx0ZXJfaWRjYGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBfX3M4Cj4gPiArICAgICAg LSBgYHNsaWNlX2FscGhhX2MwX29mZnNldF9kaXYyYGAKPiA+ICsgICAgICAtCj4gPiArICAgICog LSBfX3M4Cj4gPiArICAgICAgLSBgYHNsaWNlX2JldGFfb2Zmc2V0X2RpdjJgYAo+ID4gKyAgICAg IC0KPiA+ICsgICAgKiAtIF9fdTgKPiA+ICsgICAgICAtIGBgbnVtX3JlZl9pZHhfbDBfYWN0aXZl X21pbnVzMWBgCj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gX191OAo+ID4gKyAgICAgIC0gYGBu dW1fcmVmX2lkeF9sMV9hY3RpdmVfbWludXMxYGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBf X3UzMgo+ID4gKyAgICAgIC0gYGBzbGljZV9ncm91cF9jaGFuZ2VfY3ljbGVgYAo+ID4gKyAgICAg IC0KPiA+ICsgICAgKiAtIF9fdTgKPiA+ICsgICAgICAtIGBgcmVmX3BpY19saXN0MFszMl1gYAo+ ID4gKyAgICAgIC0gUmVmZXJlbmNlIHBpY3R1cmUgbGlzdCBhZnRlciBhcHBseWluZyB0aGUgcGVy LXNsaWNlIG1vZGlmaWNhdGlvbnMKPiA+ICsgICAgKiAtIF9fdTgKPiA+ICsgICAgICAtIGBgcmVm X3BpY19saXN0MVszMl1gYAo+ID4gKyAgICAgIC0gUmVmZXJlbmNlIHBpY3R1cmUgbGlzdCBhZnRl ciBhcHBseWluZyB0aGUgcGVyLXNsaWNlIG1vZGlmaWNhdGlvbnMKPiA+ICsgICAgKiAtIF9fdTMy Cj4gPiArICAgICAgLSBgYGZsYWdzYGAKPiA+ICsgICAgICAtIFNlZSA6cmVmOmBTbGljZSBQYXJh bWV0ZXIgRmxhZ3MgPGgyNjRfc2xpY2VfZmxhZ3M+YAo+ID4gKwo+ID4gKy4uIF9oMjY0X3NsaWNl X2ZsYWdzOgo+ID4gKwo+ID4gK2BgU2xpY2UgUGFyYW1ldGVyIFNldCBGbGFnc2BgCj4gPiArCj4g PiArLi4gY3NzY2xhc3M6OiBsb25ndGFibGUKPiA+ICsKPiA+ICsuLiBmbGF0LXRhYmxlOjoKPiA+ ICsgICAgOmhlYWRlci1yb3dzOiAgMAo+ID4gKyAgICA6c3R1Yi1jb2x1bW5zOiAwCj4gPiArICAg IDp3aWR0aHM6ICAgICAgIDEgMSAyCj4gPiArCj4gPiArICAgICogLSBgYFY0TDJfSDI2NF9TTElD RV9GTEFHX0ZJRUxEX1BJQ2BgCj4gPiArICAgICAgLSAweDAwMDAwMDAxCj4gPiArICAgICAgLQo+ ID4gKyAgICAqIC0gYGBWNEwyX0gyNjRfU0xJQ0VfRkxBR19CT1RUT01fRklFTERgYAo+ID4gKyAg ICAgIC0gMHgwMDAwMDAwMgo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIGBgVjRMMl9IMjY0X1NM SUNFX0ZMQUdfRElSRUNUX1NQQVRJQUxfTVZfUFJFRGBgCj4gPiArICAgICAgLSAweDAwMDAwMDA0 Cj4gPiArICAgICAgLQo+ID4gKyAgICAqIC0gYGBWNEwyX0gyNjRfU0xJQ0VfRkxBR19TUF9GT1Jf U1dJVENIYGAKPiA+ICsgICAgICAtIDB4MDAwMDAwMDgKPiA+ICsgICAgICAtCj4gPiArCj4gPiAr YGBQcmVkaWN0aW9uIFdlaWdodCBUYWJsZWBgCj4gPiArCj4gPiArICAgIFRoZSBiaXRzdHJlYW0g cGFyYW1ldGVycyBhcmUgZGVmaW5lZCBhY2NvcmRpbmcgdG8gOnJlZjpgaDI2NGAsCj4gPiArICAg IHNlY3Rpb24gNy40LjMuMiAiUHJlZGljdGlvbiBXZWlnaHQgVGFibGUgU2VtYW50aWNzIi4gRm9y IGZ1cnRoZXIKPiA+ICsgICAgZG9jdW1lbnRhdGlvbiwgcmVmZXIgdG8gdGhlIGFib3ZlIHNwZWNp ZmljYXRpb24sIHVubGVzcyB0aGVyZSBpcwo+ID4gKyAgICBhbiBleHBsaWNpdCBjb21tZW50IHN0 YXRpbmcgb3RoZXJ3aXNlLgo+ID4gKwo+ID4gKy4uIGM6dHlwZTo6IHY0bDJfaDI2NF9wcmVkX3dl aWdodF90YWJsZQo+ID4gKwo+ID4gKy4uIGNzc2NsYXNzOjogbG9uZ3RhYmxlCj4gPiArCj4gPiAr Li4gZmxhdC10YWJsZTo6IHN0cnVjdCB2NGwyX2gyNjRfcHJlZF93ZWlnaHRfdGFibGUKPiA+ICsg ICAgOmhlYWRlci1yb3dzOiAgMAo+ID4gKyAgICA6c3R1Yi1jb2x1bW5zOiAwCj4gPiArICAgIDp3 aWR0aHM6ICAgICAgIDEgMSAyCj4gPiArCj4gPiArICAgICogLSBfX3UxNgo+ID4gKyAgICAgIC0g YGBsdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tYGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBfX3Ux Ngo+ID4gKyAgICAgIC0gYGBjaHJvbWFfbG9nMl93ZWlnaHRfZGVub21gYAo+ID4gKyAgICAgIC0K PiA+ICsgICAgKiAtIHN0cnVjdCA6Yzp0eXBlOmB2NGwyX2gyNjRfd2VpZ2h0X2ZhY3RvcnNgCj4g PiArICAgICAgLSBgYHdlaWdodF9mYWN0b3JzWzJdYGAKPiA+ICsgICAgICAtIFRoZSB3ZWlnaHQg ZmFjdG9ycyBhdCBpbmRleCAwIGFyZSB0aGUgd2VpZ2h0IGZhY3RvcnMgZm9yIHRoZSByZWZlcmVu Y2UKPiA+ICsgICAgICAgIGxpc3QgMCwgdGhlIG9uZSBhdCBpbmRleCAxIGZvciB0aGUgcmVmZXJl bmNlIGxpc3QgMS4KPiA+ICsKPiA+ICsuLiBjOnR5cGU6OiB2NGwyX2gyNjRfd2VpZ2h0X2ZhY3Rv cnMKPiA+ICsKPiA+ICsuLiBjc3NjbGFzczo6IGxvbmd0YWJsZQo+ID4gKwo+ID4gKy4uIGZsYXQt dGFibGU6OiBzdHJ1Y3QgdjRsMl9oMjY0X3dlaWdodF9mYWN0b3JzCj4gPiArICAgIDpoZWFkZXIt cm93czogIDAKPiA+ICsgICAgOnN0dWItY29sdW1uczogMAo+ID4gKyAgICA6d2lkdGhzOiAgICAg ICAxIDEgMgo+ID4gKwo+ID4gKyAgICAqIC0gX19zMTYKPiA+ICsgICAgICAtIGBgbHVtYV93ZWln aHRbMzJdYGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBfX3MxNgo+ID4gKyAgICAgIC0gYGBs dW1hX29mZnNldFszMl1gYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9fczE2Cj4gPiArICAg ICAgLSBgYGNocm9tYV93ZWlnaHRbMzJdWzJdYGAKPiA+ICsgICAgICAtCj4gPiArICAgICogLSBf X3MxNgo+ID4gKyAgICAgIC0gYGBjaHJvbWFfb2Zmc2V0WzMyXVsyXWBgCj4gPiArICAgICAgLQo+ ID4gKwo+ID4gK2BgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0RFQ09ERV9QQVJBTVMgKHN0cnVj dClgYAo+ID4gKyAgICBTcGVjaWZpZXMgdGhlIGRlY29kZSBwYXJhbWV0ZXJzIChhcyBleHRyYWN0 ZWQgZnJvbSB0aGUgYml0c3RyZWFtKQo+ID4gKyAgICBmb3IgdGhlIGFzc29jaWF0ZWQgSDI2NCBz bGljZSBkYXRhLiBUaGlzIGluY2x1ZGVzIHRoZSBuZWNlc3NhcnkKPiA+ICsgICAgcGFyYW1ldGVy cyBmb3IgY29uZmlndXJpbmcgYSBzdGF0ZWxlc3MgaGFyZHdhcmUgZGVjb2RpbmcgcGlwZWxpbmUK PiA+ICsgICAgZm9yIEgyNjQuIFRoZSBiaXRzdHJlYW0gcGFyYW1ldGVycyBhcmUgZGVmaW5lZCBh Y2NvcmRpbmcgdG8KPiA+ICsgICAgOnJlZjpgaDI2NGAuIEZvciBmdXJ0aGVyIGRvY3VtZW50YXRp b24sIHJlZmVyIHRvIHRoZSBhYm92ZQo+ID4gKyAgICBzcGVjaWZpY2F0aW9uLCB1bmxlc3MgdGhl cmUgaXMgYW4gZXhwbGljaXQgY29tbWVudCBzdGF0aW5nCj4gPiArICAgIG90aGVyd2lzZS4KPiA+ ICsKPiA+ICsgICAgLi4gbm90ZTo6Cj4gPiArCj4gPiArICAgICAgIFRoaXMgY29tcG91bmQgY29u dHJvbCBpcyBub3QgeWV0IHBhcnQgb2YgdGhlIHB1YmxpYyBrZXJuZWwgQVBJIGFuZAo+ID4gKyAg ICAgICBpdCBpcyBleHBlY3RlZCB0byBjaGFuZ2UuCj4gPiArCj4gPiArLi4gYzp0eXBlOjogdjRs Ml9jdHJsX2gyNjRfZGVjb2RlX3BhcmFtcwo+ID4gKwo+ID4gKy4uIGNzc2NsYXNzOjogbG9uZ3Rh YmxlCj4gPiArCj4gPiArLi4gZmxhdC10YWJsZTo6IHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9kZWNv ZGVfcGFyYW1zCj4gPiArICAgIDpoZWFkZXItcm93czogIDAKPiA+ICsgICAgOnN0dWItY29sdW1u czogMAo+ID4gKyAgICA6d2lkdGhzOiAgICAgICAxIDEgMgo+ID4gKwo+ID4gKyAgICAqIC0gX191 MzIKPiA+ICsgICAgICAtIGBgbnVtX3NsaWNlc2BgCj4gPiArICAgICAgLSBOdW1iZXIgb2Ygc2xp Y2VzIG5lZWRlZCB0byBkZWNvZGUgdGhlIGN1cnJlbnQgZnJhbWUKPiA+ICsgICAgKiAtIF9fdTMy Cj4gPiArICAgICAgLSBgYG5hbF9yZWZfaWRjYGAKPiA+ICsgICAgICAtIE5BTCByZWZlcmVuY2Ug SUQgdmFsdWUgY29taW5nIGZyb20gdGhlIE5BTCBVbml0IGhlYWRlcgo+ID4gKyAgICAqIC0gX191 OAo+ID4gKyAgICAgIC0gYGByZWZfcGljX2xpc3RfcDBbMzJdYGAKPiA+ICsgICAgICAtIEJhY2t3 YXJkIHJlZmVyZW5jZSBsaXN0IHVzZWQgYnkgUC1mcmFtZXMgaW4gdGhlIG9yaWdpbmFsIGJpdHN0 cmVhbSBvcmRlcgo+ID4gKyAgICAqIC0gX191OAo+ID4gKyAgICAgIC0gYGByZWZfcGljX2xpc3Rf YjBbMzJdYGAKPiA+ICsgICAgICAtIEJhY2t3YXJkIHJlZmVyZW5jZSBsaXN0IHVzZWQgYnkgQi1m cmFtZXMgaW4gdGhlIG9yaWdpbmFsIGJpdHN0cmVhbSBvcmRlcgo+ID4gKyAgICAqIC0gX191OAo+ ID4gKyAgICAgIC0gYGByZWZfcGljX2xpc3RfYjFbMzJdYGAKPiA+ICsgICAgICAtIEZvcndhcmQg cmVmZXJlbmNlIGxpc3QgdXNlZCBieSBCLWZyYW1lcyBpbiB0aGUgb3JpZ2luYWwgYml0c3RyZWFt IG9yZGVyCj4gPiArICAgICogLSBfX3MzMgo+ID4gKyAgICAgIC0gYGB0b3BfZmllbGRfb3JkZXJf Y250YGAKPiA+ICsgICAgICAtIFBpY3R1cmUgT3JkZXIgQ291bnQgZm9yIHRoZSBjb2RlZCB0b3Ag ZmllbGQKPiA+ICsgICAgKiAtIF9fczMyCj4gPiArICAgICAgLSBgYGJvdHRvbV9maWVsZF9vcmRl cl9jbnRgYAo+ID4gKyAgICAgIC0gUGljdHVyZSBPcmRlciBDb3VudCBmb3IgdGhlIGNvZGVkIGJv dHRvbSBmaWVsZAo+ID4gKyAgICAqIC0gX191MzIKPiA+ICsgICAgICAtIGBgZmxhZ3NgYAo+ID4g KyAgICAgIC0gU2VlIDpyZWY6YERlY29kZSBQYXJhbWV0ZXJzIEZsYWdzIDxoMjY0X2RlY29kZV9w YXJhbXNfZmxhZ3M+YAo+ID4gKyAgICAqIC0gc3RydWN0IDpjOnR5cGU6YHY0bDJfaDI2NF9kcGJf ZW50cnlgCj4gPiArICAgICAgLSBgYGRwYlsxNl1gYAo+ID4gKyAgICAgIC0KPiA+ICsKPiA+ICsu LiBfaDI2NF9kZWNvZGVfcGFyYW1zX2ZsYWdzOgo+ID4gKwo+ID4gK2BgRGVjb2RlIFBhcmFtZXRl cnMgRmxhZ3NgYAo+ID4gKwo+ID4gKy4uIGNzc2NsYXNzOjogbG9uZ3RhYmxlCj4gPiArCj4gPiAr Li4gZmxhdC10YWJsZTo6Cj4gPiArICAgIDpoZWFkZXItcm93czogIDAKPiA+ICsgICAgOnN0dWIt Y29sdW1uczogMAo+ID4gKyAgICA6d2lkdGhzOiAgICAgICAxIDEgMgo+ID4gKwo+ID4gKyAgICAq IC0gYGBWNEwyX0gyNjRfREVDT0RFX1BBUkFNX0ZMQUdfSURSX1BJQ2BgCj4gPiArICAgICAgLSAw eDAwMDAwMDAxCj4gPiArICAgICAgLSBUaGF0IHBpY3R1cmUgaXMgYW4gSURSIHBpY3R1cmUKPiA+ ICsKPiA+ICsuLiBjOnR5cGU6OiB2NGwyX2gyNjRfZHBiX2VudHJ5Cj4gPiArCj4gPiArLi4gY3Nz Y2xhc3M6OiBsb25ndGFibGUKPiA+ICsKPiA+ICsuLiBmbGF0LXRhYmxlOjogc3RydWN0IHY0bDJf aDI2NF9kcGJfZW50cnkKPiA+ICsgICAgOmhlYWRlci1yb3dzOiAgMAo+ID4gKyAgICA6c3R1Yi1j b2x1bW5zOiAwCj4gPiArICAgIDp3aWR0aHM6ICAgICAgIDEgMSAyCj4gPiArCj4gPiArICAgICog LSBfX3U2NAo+ID4gKyAgICAgIC0gYGByZWZlcmVuY2VfdHNgYAo+ID4gKyAgICAgIC0gVGltZXN0 YW1wIG9mIHRoZSBWNEwyIGNhcHR1cmUgYnVmZmVyIHRvIHVzZSBhcyByZWZlcmVuY2UsIHVzZWQK PiA+ICsgICAgICAgIHdpdGggQi1jb2RlZCBhbmQgUC1jb2RlZCBmcmFtZXMuIFRoZSB0aW1lc3Rh bXAgcmVmZXJzIHRvIHRoZQo+ID4gKwlgYHRpbWVzdGFtcGBgIGZpZWxkIGluIHN0cnVjdCA6Yzp0 eXBlOmB2NGwyX2J1ZmZlcmAuIFVzZSB0aGUKPiA+ICsJOmM6ZnVuYzpgdjRsMl90aW1ldmFsX3Rv X25zKClgIGZ1bmN0aW9uIHRvIGNvbnZlcnQgdGhlIHN0cnVjdAo+ID4gKwk6Yzp0eXBlOmB0aW1l dmFsYCBpbiBzdHJ1Y3QgOmM6dHlwZTpgdjRsMl9idWZmZXJgIHRvIGEgX191NjQuCj4gPiArICAg ICogLSBfX3UxNgo+ID4gKyAgICAgIC0gYGBmcmFtZV9udW1gYAo+ID4gKyAgICAgIC0KPiA+ICsg ICAgKiAtIF9fdTE2Cj4gPiArICAgICAgLSBgYHBpY19udW1gYAo+ID4gKyAgICAgIC0KPiA+ICsg ICAgKiAtIF9fczMyCj4gPiArICAgICAgLSBgYHRvcF9maWVsZF9vcmRlcl9jbnRgYAo+ID4gKyAg ICAgIC0KPiA+ICsgICAgKiAtIF9fczMyCj4gPiArICAgICAgLSBgYGJvdHRvbV9maWVsZF9vcmRl cl9jbnRgYAo+ID4gKyAgICAgIC0KPiA+ICsgICAgKiAtIF9fdTMyCj4gPiArICAgICAgLSBgYGZs YWdzYGAKPiA+ICsgICAgICAtIFNlZSA6cmVmOmBEUEIgRW50cnkgRmxhZ3MgPGgyNjRfZHBiX2Zs YWdzPmAKPiA+ICsKPiA+ICsuLiBfaDI2NF9kcGJfZmxhZ3M6Cj4gPiArCj4gPiArYGBEUEIgRW50 cmllcyBGbGFnc2BgCj4gPiArCj4gPiArLi4gY3NzY2xhc3M6OiBsb25ndGFibGUKPiA+ICsKPiA+ ICsuLiBmbGF0LXRhYmxlOjoKPiA+ICsgICAgOmhlYWRlci1yb3dzOiAgMAo+ID4gKyAgICA6c3R1 Yi1jb2x1bW5zOiAwCj4gPiArICAgIDp3aWR0aHM6ICAgICAgIDEgMSAyCj4gPiArCj4gPiArICAg ICogLSBgYFY0TDJfSDI2NF9EUEJfRU5UUllfRkxBR19WQUxJRGBgCj4gPiArICAgICAgLSAweDAw MDAwMDAxCj4gPiArICAgICAgLSBUaGUgRFBCIGVudHJ5IGlzIHZhbGlkIGFuZCBzaG91bGQgYmUg Y29uc2lkZXJlZAo+ID4gKyAgICAqIC0gYGBWNEwyX0gyNjRfRFBCX0VOVFJZX0ZMQUdfQUNUSVZF YGAKPiA+ICsgICAgICAtIDB4MDAwMDAwMDIKPiA+ICsgICAgICAtIFRoZSBEUEIgZW50cnkgaXMg Y3VycmVudGx5IGJlaW5nIHVzZWQgYXMgYSByZWZlcmVuY2UgZnJhbWUKPiA+ICsgICAgKiAtIGBg VjRMMl9IMjY0X0RQQl9FTlRSWV9GTEFHX0xPTkdfVEVSTWBgCj4gPiArICAgICAgLSAweDAwMDAw MDA0Cj4gPiArICAgICAgLSBUaGUgRFBCIGVudHJ5IGlzIGEgbG9uZyB0ZXJtIHJlZmVyZW5jZSBm cmFtZQo+ID4gIAo+ID4gIC4uIF92NGwyLW1wZWctbXBlZzI6Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0 IGEvRG9jdW1lbnRhdGlvbi9tZWRpYS91YXBpL3Y0bC9waXhmbXQtY29tcHJlc3NlZC5yc3QgYi9E b2N1bWVudGF0aW9uL21lZGlhL3VhcGkvdjRsL3BpeGZtdC1jb21wcmVzc2VkLnJzdAo+ID4gaW5k ZXggNmM5NjFjZmI3NGRhLi5lYTBhOGE2ODc1OWIgMTAwNjQ0Cj4gPiAtLS0gYS9Eb2N1bWVudGF0 aW9uL21lZGlhL3VhcGkvdjRsL3BpeGZtdC1jb21wcmVzc2VkLnJzdAo+ID4gKysrIGIvRG9jdW1l bnRhdGlvbi9tZWRpYS91YXBpL3Y0bC9waXhmbXQtY29tcHJlc3NlZC5yc3QKPiA+IEBAIC01Miw2 ICs1MiwyNSBAQCBDb21wcmVzc2VkIEZvcm1hdHMKPiA+ICAgICAgICAtIGBgVjRMMl9QSVhfRk1U X0gyNjRfTVZDYGAKPiA+ICAgICAgICAtICdNMjY0Jwo+ID4gICAgICAgIC0gSDI2NCBNVkMgdmlk ZW8gZWxlbWVudGFyeSBzdHJlYW0uCj4gPiArICAgICogLi4gX1Y0TDItUElYLUZNVC1IMjY0LVNM SUNFOgo+ID4gKwo+ID4gKyAgICAgIC0gYGBWNEwyX1BJWF9GTVRfSDI2NF9TTElDRV9SQVdgYAo+ ID4gKyAgICAgIC0gJ1MyNjQnCj4gPiArICAgICAgLSBIMjY0IHBhcnNlZCBzbGljZSBkYXRhLCBh cyBleHRyYWN0ZWQgZnJvbSB0aGUgSDI2NCBiaXRzdHJlYW0uCj4gPiArCVRoaXMgZm9ybWF0IGlz IGFkYXB0ZWQgZm9yIHN0YXRlbGVzcyB2aWRlbyBkZWNvZGVycyB0aGF0Cj4gPiArCWltcGxlbWVu dCBhbiBIMjY0IHBpcGVsaW5lICh1c2luZyB0aGUgOnJlZjpgY29kZWNgIGFuZAo+ID4gKwk6cmVm OmBtZWRpYS1yZXF1ZXN0LWFwaWApLiAgTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBmcmFt ZQo+ID4gKwl0byBkZWNvZGUgYXJlIHJlcXVpcmVkIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRoZQo+ ID4gKwlgYFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9TUFNgYCwKPiA+ICsJYGBWNEwyX0NJRF9N UEVHX1ZJREVPX0gyNjRfUFBTYGAsCj4gPiArCWBgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1ND QUxJTkdfTUFUUklYYGAsCj4gPiArCWBgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1NMSUNFX1BB UkFNU2BgIGFuZAo+ID4gKwlgYFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9ERUNPREVfUEFSQU1T YGAgY29udHJvbHMuICBTZWUgdGhlCj4gPiArCTpyZWY6YGFzc29jaWF0ZWQgQ29kZWMgQ29udHJv bCBJRHMgPHY0bDItbXBlZy1oMjY0PmAuCj4gPiArCUV4YWN0bHkgb25lIG91dHB1dCBhbmQgb25l IGNhcHR1cmUgYnVmZmVyIG11c3QgYmUgcHJvdmlkZWQgZm9yCj4gPiArCXVzZSB3aXRoIHRoaXMg cGl4ZWwgZm9ybWF0LiBUaGUgb3V0cHV0IGJ1ZmZlciBtdXN0IGNvbnRhaW4gdGhlCj4gPiArCWFw cHJvcHJpYXRlIG51bWJlciBvZiBtYWNyb2Jsb2NrcyB0byBkZWNvZGUgYSBmdWxsCj4gPiArCWNv cnJlc3BvbmRpbmcgZnJhbWUgdG8gdGhlIG1hdGNoaW5nIGNhcHR1cmUgYnVmZmVyLgo+ID4gICAg ICAqIC4uIF9WNEwyLVBJWC1GTVQtSDI2MzoKPiA+ICAKPiA+ICAgICAgICAtIGBgVjRMMl9QSVhf Rk1UX0gyNjNgYAo+ID4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVkaWEvdWFwaS92NGwv dmlkaW9jLXF1ZXJ5Y3RybC5yc3QgYi9Eb2N1bWVudGF0aW9uL21lZGlhL3VhcGkvdjRsL3ZpZGlv Yy1xdWVyeWN0cmwucnN0Cj4gPiBpbmRleCBmODI0MTYyZDBlYTkuLmRjNTAwNjMyMDk1ZCAxMDA2 NDQKPiA+IC0tLSBhL0RvY3VtZW50YXRpb24vbWVkaWEvdWFwaS92NGwvdmlkaW9jLXF1ZXJ5Y3Ry bC5yc3QKPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vbWVkaWEvdWFwaS92NGwvdmlkaW9jLXF1ZXJ5 Y3RybC5yc3QKPiA+IEBAIC00NDMsNiArNDQzLDM2IEBAIFNlZSBhbHNvIHRoZSBleGFtcGxlcyBp biA6cmVmOmBjb250cm9sYC4KPiA+ICAgICAgICAtIG4vYQo+ID4gICAgICAgIC0gQSBzdHJ1Y3Qg OmM6dHlwZTpgdjRsMl9jdHJsX21wZWcyX3F1YW50aXphdGlvbmAsIGNvbnRhaW5pbmcgTVBFRy0y Cj4gPiAgCXF1YW50aXphdGlvbiBtYXRyaWNlcyBmb3Igc3RhdGVsZXNzIHZpZGVvIGRlY29kZXJz Lgo+ID4gKyAgICAqIC0gYGBWNEwyX0NUUkxfVFlQRV9IMjY0X1NQU2BgCj4gPiArICAgICAgLSBu L2EKPiA+ICsgICAgICAtIG4vYQo+ID4gKyAgICAgIC0gbi9hCj4gPiArICAgICAgLSBBIHN0cnVj dCA6Yzp0eXBlOmB2NGwyX2N0cmxfaDI2NF9zcHNgLCBjb250YWluaW5nIEgyNjQKPiA+ICsJc2Vx dWVuY2UgcGFyYW1ldGVycyBmb3Igc3RhdGVsZXNzIHZpZGVvIGRlY29kZXJzLgo+ID4gKyAgICAq IC0gYGBWNEwyX0NUUkxfVFlQRV9IMjY0X1BQU2BgCj4gPiArICAgICAgLSBuL2EKPiA+ICsgICAg ICAtIG4vYQo+ID4gKyAgICAgIC0gbi9hCj4gPiArICAgICAgLSBBIHN0cnVjdCA6Yzp0eXBlOmB2 NGwyX2N0cmxfaDI2NF9wcHNgLCBjb250YWluaW5nIEgyNjQKPiA+ICsJcGljdHVyZSBwYXJhbWV0 ZXJzIGZvciBzdGF0ZWxlc3MgdmlkZW8gZGVjb2RlcnMuCj4gPiArICAgICogLSBgYFY0TDJfQ1RS TF9UWVBFX0gyNjRfU0NBTElOR19NQVRSSVhgYAo+ID4gKyAgICAgIC0gbi9hCj4gPiArICAgICAg LSBuL2EKPiA+ICsgICAgICAtIG4vYQo+ID4gKyAgICAgIC0gQSBzdHJ1Y3QgOmM6dHlwZTpgdjRs Ml9jdHJsX2gyNjRfc2NhbGluZ19tYXRyaXhgLCBjb250YWluaW5nIEgyNjQKPiA+ICsJc2NhbGlu ZyBtYXRyaWNlcyBmb3Igc3RhdGVsZXNzIHZpZGVvIGRlY29kZXJzLgo+ID4gKyAgICAqIC0gYGBW NEwyX0NUUkxfVFlQRV9IMjY0X1NMSUNFX1BBUkFNU2BgCj4gPiArICAgICAgLSBuL2EKPiA+ICsg ICAgICAtIG4vYQo+ID4gKyAgICAgIC0gbi9hCj4gPiArICAgICAgLSBBIHN0cnVjdCA6Yzp0eXBl OmB2NGwyX2N0cmxfaDI2NF9zbGljZV9wYXJhbXNgLCBjb250YWluaW5nIEgyNjQKPiA+ICsJc2xp Y2UgcGFyYW1ldGVycyBmb3Igc3RhdGVsZXNzIHZpZGVvIGRlY29kZXJzLgo+ID4gKyAgICAqIC0g YGBWNEwyX0NUUkxfVFlQRV9IMjY0X0RFQ09ERV9QQVJBTVNgYAo+ID4gKyAgICAgIC0gbi9hCj4g PiArICAgICAgLSBuL2EKPiA+ICsgICAgICAtIG4vYQo+ID4gKyAgICAgIC0gQSBzdHJ1Y3QgOmM6 dHlwZTpgdjRsMl9jdHJsX2gyNjRfZGVjb2RlX3BhcmFtc2AsIGNvbnRhaW5pbmcgSDI2NAo+ID4g KwlkZWNvZGUgcGFyYW1ldGVycyBmb3Igc3RhdGVsZXNzIHZpZGVvIGRlY29kZXJzLgo+ID4gIAo+ ID4gIC4uIHRhYnVsYXJjb2x1bW5zOjogfHB7Ni42Y219fHB7Mi4yY219fHB7OC43Y219fAo+ID4g IAo+ID4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVkaWEvdmlkZW9kZXYyLmgucnN0LmV4 Y2VwdGlvbnMgYi9Eb2N1bWVudGF0aW9uL21lZGlhL3ZpZGVvZGV2Mi5oLnJzdC5leGNlcHRpb25z Cj4gPiBpbmRleCA2NGQzNDhlNjdkZjkuLjU1Y2JlMzI0YjlmYyAxMDA2NDQKPiA+IC0tLSBhL0Rv Y3VtZW50YXRpb24vbWVkaWEvdmlkZW9kZXYyLmgucnN0LmV4Y2VwdGlvbnMKPiA+ICsrKyBiL0Rv Y3VtZW50YXRpb24vbWVkaWEvdmlkZW9kZXYyLmgucnN0LmV4Y2VwdGlvbnMKPiA+IEBAIC0xMzYs NiArMTM2LDExIEBAIHJlcGxhY2Ugc3ltYm9sIFY0TDJfQ1RSTF9UWVBFX1UzMiA6Yzp0eXBlOmB2 NGwyX2N0cmxfdHlwZWAKPiA+ICByZXBsYWNlIHN5bWJvbCBWNEwyX0NUUkxfVFlQRV9VOCA6Yzp0 eXBlOmB2NGwyX2N0cmxfdHlwZWAKPiA+ICByZXBsYWNlIHN5bWJvbCBWNEwyX0NUUkxfVFlQRV9N UEVHMl9TTElDRV9QQVJBTVMgOmM6dHlwZTpgdjRsMl9jdHJsX3R5cGVgCj4gPiAgcmVwbGFjZSBz eW1ib2wgVjRMMl9DVFJMX1RZUEVfTVBFRzJfUVVBTlRJWkFUSU9OIDpjOnR5cGU6YHY0bDJfY3Ry bF90eXBlYAo+ID4gK3JlcGxhY2Ugc3ltYm9sIFY0TDJfQ1RSTF9UWVBFX0gyNjRfU1BTIDpjOnR5 cGU6YHY0bDJfY3RybF90eXBlYAo+ID4gK3JlcGxhY2Ugc3ltYm9sIFY0TDJfQ1RSTF9UWVBFX0gy NjRfUFBTIDpjOnR5cGU6YHY0bDJfY3RybF90eXBlYAo+ID4gK3JlcGxhY2Ugc3ltYm9sIFY0TDJf Q1RSTF9UWVBFX0gyNjRfU0NBTElOR19NQVRSSVggOmM6dHlwZTpgdjRsMl9jdHJsX3R5cGVgCj4g PiArcmVwbGFjZSBzeW1ib2wgVjRMMl9DVFJMX1RZUEVfSDI2NF9TTElDRV9QQVJBTVMgOmM6dHlw ZTpgdjRsMl9jdHJsX3R5cGVgCj4gPiArcmVwbGFjZSBzeW1ib2wgVjRMMl9DVFJMX1RZUEVfSDI2 NF9ERUNPREVfUEFSQU1TIDpjOnR5cGU6YHY0bDJfY3RybF90eXBlYAo+ID4gIAo+ID4gICMgVjRM MiBjYXBhYmlsaXR5IGRlZmluZXMKPiA+ICByZXBsYWNlIGRlZmluZSBWNEwyX0NBUF9WSURFT19D QVBUVVJFIGRldmljZS1jYXBhYmlsaXRpZXMKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlh L3Y0bDItY29yZS92NGwyLWN0cmxzLmMgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0 cmxzLmMKPiA+IGluZGV4IGIxYWUyZTU1NWM2OC4uNDZhZWM4YzNhY2RlIDEwMDY0NAo+ID4gLS0t IGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy5jCj4gPiArKysgYi9kcml2ZXJz L21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxzLmMKPiA+IEBAIC04MjgsNiArODI4LDExIEBAIGNv bnN0IGNoYXIgKnY0bDJfY3RybF9nZXRfbmFtZSh1MzIgaWQpCj4gPiAgCWNhc2UgVjRMMl9DSURf TVBFR19WSURFT19IMjY0X0NPTlNUUkFJTkVEX0lOVFJBX1BSRURJQ1RJT046Cj4gPiAgCQkJCQkJ CQlyZXR1cm4gIkgyNjQgQ29uc3RyYWluZWQgSW50cmEgUHJlZCI7Cj4gPiAgCWNhc2UgVjRMMl9D SURfTVBFR19WSURFT19IMjY0X0NIUk9NQV9RUF9JTkRFWF9PRkZTRVQ6CXJldHVybiAiSDI2NCBD aHJvbWEgUVAgSW5kZXggT2Zmc2V0IjsKPiA+ICsJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gy NjRfU1BTOgkJCXJldHVybiAiSDI2NCBTZXF1ZW5jZSBQYXJhbWV0ZXIgU2V0IjsKPiA+ICsJY2Fz ZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfUFBTOgkJCXJldHVybiAiSDI2NCBQaWN0dXJlIFBh cmFtZXRlciBTZXQiOwo+ID4gKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9TQ0FMSU5H X01BVFJJWDoJCXJldHVybiAiSDI2NCBTY2FsaW5nIE1hdHJpeCI7Cj4gPiArCWNhc2UgVjRMMl9D SURfTVBFR19WSURFT19IMjY0X1NMSUNFX1BBUkFNUzoJCXJldHVybiAiSDI2NCBTbGljZSBQYXJh bWV0ZXJzIjsKPiA+ICsJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfREVDT0RFX1BBUkFN UzoJCXJldHVybiAiSDI2NCBEZWNvZGUgUGFyYW1ldGVycyI7Cj4gPiAgCWNhc2UgVjRMMl9DSURf TVBFR19WSURFT19NUEVHNF9JX0ZSQU1FX1FQOgkJcmV0dXJuICJNUEVHNCBJLUZyYW1lIFFQIFZh bHVlIjsKPiA+ICAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1BfRlJBTUVfUVA6CQly ZXR1cm4gIk1QRUc0IFAtRnJhbWUgUVAgVmFsdWUiOwo+ID4gIAljYXNlIFY0TDJfQ0lEX01QRUdf VklERU9fTVBFRzRfQl9GUkFNRV9RUDoJCXJldHVybiAiTVBFRzQgQi1GcmFtZSBRUCBWYWx1ZSI7 Cj4gPiBAQCAtMTMwOSw2ICsxMzE0LDIxIEBAIHZvaWQgdjRsMl9jdHJsX2ZpbGwodTMyIGlkLCBj b25zdCBjaGFyICoqbmFtZSwgZW51bSB2NGwyX2N0cmxfdHlwZSAqdHlwZSwKPiA+ICAJY2FzZSBW NEwyX0NJRF9NUEVHX1ZJREVPX0ZXSFRfUEFSQU1TOgo+ID4gIAkJKnR5cGUgPSBWNEwyX0NUUkxf VFlQRV9GV0hUX1BBUkFNUzsKPiA+ICAJCWJyZWFrOwo+ID4gKwljYXNlIFY0TDJfQ0lEX01QRUdf VklERU9fSDI2NF9TUFM6Cj4gPiArCQkqdHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0gyNjRfU1BTOwo+ ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1BQUzoKPiA+ ICsJCSp0eXBlID0gVjRMMl9DVFJMX1RZUEVfSDI2NF9QUFM7Cj4gPiArCQlicmVhazsKPiA+ICsJ Y2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfU0NBTElOR19NQVRSSVg6Cj4gPiArCQkqdHlw ZSA9IFY0TDJfQ1RSTF9UWVBFX0gyNjRfU0NBTElOR19NQVRSSVg7Cj4gPiArCQlicmVhazsKPiA+ ICsJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfU0xJQ0VfUEFSQU1TOgo+ID4gKwkJKnR5 cGUgPSBWNEwyX0NUUkxfVFlQRV9IMjY0X1NMSUNFX1BBUkFNUzsKPiA+ICsJCWJyZWFrOwo+ID4g KwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9ERUNPREVfUEFSQU1TOgo+ID4gKwkJKnR5 cGUgPSBWNEwyX0NUUkxfVFlQRV9IMjY0X0RFQ09ERV9QQVJBTVM7Cj4gPiArCQlicmVhazsKPiA+ ICAJZGVmYXVsdDoKPiA+ICAJCSp0eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKPiA+ICAJ CWJyZWFrOwo+ID4gQEAgLTE2NzgsNiArMTY5OCwxMyBAQCBzdGF0aWMgaW50IHN0ZF92YWxpZGF0 ZShjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLCB1MzIgaWR4LAo+ID4gIAljYXNlIFY0TDJf Q1RSTF9UWVBFX0ZXSFRfUEFSQU1TOgo+ID4gIAkJcmV0dXJuIDA7Cj4gPiAgCj4gPiArCWNhc2Ug VjRMMl9DVFJMX1RZUEVfSDI2NF9TUFM6Cj4gPiArCWNhc2UgVjRMMl9DVFJMX1RZUEVfSDI2NF9Q UFM6Cj4gPiArCWNhc2UgVjRMMl9DVFJMX1RZUEVfSDI2NF9TQ0FMSU5HX01BVFJJWDoKPiA+ICsJ Y2FzZSBWNEwyX0NUUkxfVFlQRV9IMjY0X1NMSUNFX1BBUkFNUzoKPiA+ICsJY2FzZSBWNEwyX0NU UkxfVFlQRV9IMjY0X0RFQ09ERV9QQVJBTVM6Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICAJ ZGVmYXVsdDoKPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gIAl9Cj4gPiBAQCAtMjI2MSw2ICsy Mjg4LDIxIEBAIHN0YXRpYyBzdHJ1Y3QgdjRsMl9jdHJsICp2NGwyX2N0cmxfbmV3KHN0cnVjdCB2 NGwyX2N0cmxfaGFuZGxlciAqaGRsLAo+ID4gIAljYXNlIFY0TDJfQ1RSTF9UWVBFX0ZXSFRfUEFS QU1TOgo+ID4gIAkJZWxlbV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX2N0cmxfZndodF9wYXJh bXMpOwo+ID4gIAkJYnJlYWs7Cj4gPiArCWNhc2UgVjRMMl9DVFJMX1RZUEVfSDI2NF9TUFM6Cj4g PiArCQllbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfY3RybF9oMjY0X3Nwcyk7Cj4gPiAr CQlicmVhazsKPiA+ICsJY2FzZSBWNEwyX0NUUkxfVFlQRV9IMjY0X1BQUzoKPiA+ICsJCWVsZW1f c2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9jdHJsX2gyNjRfcHBzKTsKPiA+ICsJCWJyZWFrOwo+ ID4gKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0gyNjRfU0NBTElOR19NQVRSSVg6Cj4gPiArCQllbGVt X3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfY3RybF9oMjY0X3NjYWxpbmdfbWF0cml4KTsKPiA+ ICsJCWJyZWFrOwo+ID4gKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0gyNjRfU0xJQ0VfUEFSQU1TOgo+ ID4gKwkJZWxlbV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9zbGljZV9wYXJh bXMpOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgVjRMMl9DVFJMX1RZUEVfSDI2NF9ERUNPREVf UEFSQU1TOgo+ID4gKwkJZWxlbV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9k ZWNvZGVfcGFyYW1zKTsKPiA+ICsJCWJyZWFrOwo+ID4gIAlkZWZhdWx0Ogo+ID4gIAkJaWYgKHR5 cGUgPCBWNEwyX0NUUkxfQ09NUE9VTkRfVFlQRVMpCj4gPiAgCQkJZWxlbV9zaXplID0gc2l6ZW9m KHMzMik7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1pb2N0 bC5jIGIvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1pb2N0bC5jCj4gPiBpbmRleCBhYzg3 YzNlMzcyODAuLmY2ZTEyNTQwNjRkMiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEvdjRs Mi1jb3JlL3Y0bDItaW9jdGwuYwo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRs Mi1pb2N0bC5jCj4gPiBAQCAtMTMyNSw2ICsxMzI1LDcgQEAgc3RhdGljIHZvaWQgdjRsX2ZpbGxf Zm10ZGVzYyhzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCj4gPiAgCQljYXNlIFY0TDJfUElYX0ZN VF9IMjY0OgkJZGVzY3IgPSAiSC4yNjQiOyBicmVhazsKPiA+ICAJCWNhc2UgVjRMMl9QSVhfRk1U X0gyNjRfTk9fU0M6CWRlc2NyID0gIkguMjY0IChObyBTdGFydCBDb2RlcykiOyBicmVhazsKPiA+ ICAJCWNhc2UgVjRMMl9QSVhfRk1UX0gyNjRfTVZDOglkZXNjciA9ICJILjI2NCBNVkMiOyBicmVh azsKPiA+ICsJCWNhc2UgVjRMMl9QSVhfRk1UX0gyNjRfU0xJQ0VfUkFXOglkZXNjciA9ICJILjI2 NCBQYXJzZWQgU2xpY2UgRGF0YSI7IGJyZWFrOwo+ID4gIAkJY2FzZSBWNEwyX1BJWF9GTVRfSDI2 MzoJCWRlc2NyID0gIkguMjYzIjsgYnJlYWs7Cj4gPiAgCQljYXNlIFY0TDJfUElYX0ZNVF9NUEVH MToJZGVzY3IgPSAiTVBFRy0xIEVTIjsgYnJlYWs7Cj4gPiAgCQljYXNlIFY0TDJfUElYX0ZNVF9N UEVHMjoJZGVzY3IgPSAiTVBFRy0yIEVTIjsgYnJlYWs7Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9tZWRpYS9oMjY0LWN0cmxzLmggYi9pbmNsdWRlL21lZGlhL2gyNjQtY3RybHMuaAo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZTJmODNiM2NkYmVmCj4g PiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9pbmNsdWRlL21lZGlhL2gyNjQtY3RybHMuaAo+ID4g QEAgLTAsMCArMSwxOTIgQEAKPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCAqLwo+ID4gKy8qCj4gPiArICogVGhlc2UgYXJlIHRoZSBILjI2NCBzdGF0ZSBjb250cm9scyBm b3IgdXNlIHdpdGggc3RhdGVsZXNzIEguMjY0Cj4gPiArICogY29kZWMgZHJpdmVycy4KPiA+ICsg Kgo+ID4gKyAqIEl0IHR1cm5zIG91dCB0aGF0IHRoZXNlIHN0cnVjdHMgYXJlIG5vdCBzdGFibGUg eWV0IGFuZCB3aWxsIHVuZGVyZ28KPiA+ICsgKiBtb3JlIGNoYW5nZXMuIFNvIGtlZXAgdGhlbSBw cml2YXRlIHVudGlsIHRoZXkgYXJlIHN0YWJsZSBhbmQgcmVhZHkgdG8KPiA+ICsgKiBiZWNvbWUg cGFydCBvZiB0aGUgb2ZmaWNpYWwgcHVibGljIEFQSS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZu ZGVmIF9IMjY0X0NUUkxTX0hfCj4gPiArI2RlZmluZSBfSDI2NF9DVFJMU19IXwo+ID4gKwo+ID4g Ky8qCj4gPiArICogVGhpcyBpcyBwdXQgaW5zYW5lbHkgaGlnaCB0byBhdm9pZCBjb25mbGljdGlu ZyB3aXRoIGNvbnRyb2xzIHRoYXQKPiA+ICsgKiB3b3VsZCBiZSBhZGRlZCBkdXJpbmcgdGhlIHBo YXNlIHdoZXJlIHRob3NlIGNvbnRyb2xzIGFyZSBub3QKPiA+ICsgKiBzdGFibGUuIEl0IHNob3Vs ZCBiZSBmaXhlZCBldmVudHVhbGx5Lgo+ID4gKyAqLwo+ID4gKyNkZWZpbmUgVjRMMl9DSURfTVBF R19WSURFT19IMjY0X1NQUwkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDAwKQo+ID4gKyNkZWZpbmUg VjRMMl9DSURfTVBFR19WSURFT19IMjY0X1BQUwkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDAxKQo+ ID4gKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1NDQUxJTkdfTUFUUklYCShWNEwy X0NJRF9NUEVHX0JBU0UrMTAwMikKPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2 NF9TTElDRV9QQVJBTVMJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDAzKQo+ID4gKyNkZWZpbmUgVjRM Ml9DSURfTVBFR19WSURFT19IMjY0X0RFQ09ERV9QQVJBTVMJKFY0TDJfQ0lEX01QRUdfQkFTRSsx MDA0KQo+ID4gKwo+ID4gKy8qIGVudW0gdjRsMl9jdHJsX3R5cGUgdHlwZSB2YWx1ZXMgKi8KPiA+ ICsjZGVmaW5lIFY0TDJfQ1RSTF9UWVBFX0gyNjRfU1BTCQkJMHgwMTEwCj4gPiArI2RlZmluZSBW NEwyX0NUUkxfVFlQRV9IMjY0X1BQUwkJCTB4MDExMQo+ID4gKyNkZWZpbmUgVjRMMl9DVFJMX1RZ UEVfSDI2NF9TQ0FMSU5HX01BVFJJWAkweDAxMTIKPiA+ICsjZGVmaW5lIFY0TDJfQ1RSTF9UWVBF X0gyNjRfU0xJQ0VfUEFSQU1TCTB4MDExMwo+ID4gKyNkZWZpbmUgVjRMMl9DVFJMX1RZUEVfSDI2 NF9ERUNPREVfUEFSQU1TCTB4MDExNAo+ID4gKwo+ID4gKyNkZWZpbmUgVjRMMl9IMjY0X1NQU19D T05TVFJBSU5UX1NFVDBfRkxBRwkJCTB4MDEKPiA+ICsjZGVmaW5lIFY0TDJfSDI2NF9TUFNfQ09O U1RSQUlOVF9TRVQxX0ZMQUcJCQkweDAyCj4gPiArI2RlZmluZSBWNEwyX0gyNjRfU1BTX0NPTlNU UkFJTlRfU0VUMl9GTEFHCQkJMHgwNAo+ID4gKyNkZWZpbmUgVjRMMl9IMjY0X1NQU19DT05TVFJB SU5UX1NFVDNfRkxBRwkJCTB4MDgKPiA+ICsjZGVmaW5lIFY0TDJfSDI2NF9TUFNfQ09OU1RSQUlO VF9TRVQ0X0ZMQUcJCQkweDEwCj4gPiArI2RlZmluZSBWNEwyX0gyNjRfU1BTX0NPTlNUUkFJTlRf U0VUNV9GTEFHCQkJMHgyMAo+ID4gKwo+ID4gKyNkZWZpbmUgVjRMMl9IMjY0X1NQU19GTEFHX1NF UEFSQVRFX0NPTE9VUl9QTEFORQkJMHgwMQo+ID4gKyNkZWZpbmUgVjRMMl9IMjY0X1NQU19GTEFH X1FQUFJJTUVfWV9aRVJPX1RSQU5TRk9STV9CWVBBU1MJMHgwMgo+ID4gKyNkZWZpbmUgVjRMMl9I MjY0X1NQU19GTEFHX0RFTFRBX1BJQ19PUkRFUl9BTFdBWVNfWkVSTwkJMHgwNAo+ID4gKyNkZWZp bmUgVjRMMl9IMjY0X1NQU19GTEFHX0dBUFNfSU5fRlJBTUVfTlVNX1ZBTFVFX0FMTE9XRUQJMHgw OAo+ID4gKyNkZWZpbmUgVjRMMl9IMjY0X1NQU19GTEFHX0ZSQU1FX01CU19PTkxZCQkJMHgxMAo+ ID4gKyNkZWZpbmUgVjRMMl9IMjY0X1NQU19GTEFHX01CX0FEQVBUSVZFX0ZSQU1FX0ZJRUxECQkw eDIwCj4gPiArI2RlZmluZSBWNEwyX0gyNjRfU1BTX0ZMQUdfRElSRUNUXzhYOF9JTkZFUkVOQ0UJ CQkweDQwCj4gPiArCj4gPiArc3RydWN0IHY0bDJfY3RybF9oMjY0X3NwcyB7Cj4gPiArCV9fdTgg cHJvZmlsZV9pZGM7Cj4gPiArCV9fdTggY29uc3RyYWludF9zZXRfZmxhZ3M7Cj4gPiArCV9fdTgg bGV2ZWxfaWRjOwo+ID4gKwlfX3U4IHNlcV9wYXJhbWV0ZXJfc2V0X2lkOwo+ID4gKwlfX3U4IGNo cm9tYV9mb3JtYXRfaWRjOwo+ID4gKwlfX3U4IGJpdF9kZXB0aF9sdW1hX21pbnVzODsKPiA+ICsJ X191OCBiaXRfZGVwdGhfY2hyb21hX21pbnVzODsKPiA+ICsJX191OCBsb2cyX21heF9mcmFtZV9u dW1fbWludXM0Owo+ID4gKwlfX3U4IHBpY19vcmRlcl9jbnRfdHlwZTsKPiA+ICsJX191OCBsb2cy X21heF9waWNfb3JkZXJfY250X2xzYl9taW51czQ7Cj4gPiArCV9fdTggbWF4X251bV9yZWZfZnJh bWVzOwo+ID4gKwlfX3U4IG51bV9yZWZfZnJhbWVzX2luX3BpY19vcmRlcl9jbnRfY3ljbGU7Cj4g PiArCV9fczMyIG9mZnNldF9mb3JfcmVmX2ZyYW1lWzI1NV07Cj4gPiArCV9fczMyIG9mZnNldF9m b3Jfbm9uX3JlZl9waWM7Cj4gPiArCV9fczMyIG9mZnNldF9mb3JfdG9wX3RvX2JvdHRvbV9maWVs ZDsKPiA+ICsJX191MTYgcGljX3dpZHRoX2luX21ic19taW51czE7Cj4gPiArCV9fdTE2IHBpY19o ZWlnaHRfaW5fbWFwX3VuaXRzX21pbnVzMTsKPiA+ICsJX191MzIgZmxhZ3M7Cj4gPiArfTsKPiA+ ICsKPiA+ICsjZGVmaW5lIFY0TDJfSDI2NF9QUFNfRkxBR19FTlRST1BZX0NPRElOR19NT0RFCQkJ CTB4MDAwMQo+ID4gKyNkZWZpbmUgVjRMMl9IMjY0X1BQU19GTEFHX0JPVFRPTV9GSUVMRF9QSUNf T1JERVJfSU5fRlJBTUVfUFJFU0VOVAkweDAwMDIKPiA+ICsjZGVmaW5lIFY0TDJfSDI2NF9QUFNf RkxBR19XRUlHSFRFRF9QUkVECQkJCTB4MDAwNAo+ID4gKyNkZWZpbmUgVjRMMl9IMjY0X1BQU19G TEFHX0RFQkxPQ0tJTkdfRklMVEVSX0NPTlRST0xfUFJFU0VOVAkJMHgwMDA4Cj4gPiArI2RlZmlu ZSBWNEwyX0gyNjRfUFBTX0ZMQUdfQ09OU1RSQUlORURfSU5UUkFfUFJFRAkJCTB4MDAxMAo+ID4g KyNkZWZpbmUgVjRMMl9IMjY0X1BQU19GTEFHX1JFRFVOREFOVF9QSUNfQ05UX1BSRVNFTlQJCQkw eDAwMjAKPiA+ICsjZGVmaW5lIFY0TDJfSDI2NF9QUFNfRkxBR19UUkFOU0ZPUk1fOFg4X01PREUJ CQkJMHgwMDQwCj4gPiArI2RlZmluZSBWNEwyX0gyNjRfUFBTX0ZMQUdfUElDX1NDQUxJTkdfTUFU UklYX1BSRVNFTlQJCQkweDAwODAKPiA+ICsKPiA+ICtzdHJ1Y3QgdjRsMl9jdHJsX2gyNjRfcHBz IHsKPiA+ICsJX191OCBwaWNfcGFyYW1ldGVyX3NldF9pZDsKPiA+ICsJX191OCBzZXFfcGFyYW1l dGVyX3NldF9pZDsKPiA+ICsJX191OCBudW1fc2xpY2VfZ3JvdXBzX21pbnVzMTsKPiA+ICsJX191 OCBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czE7Cj4gPiArCV9fdTggbnVtX3Jl Zl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxOwo+ID4gKwlfX3U4IHdlaWdodGVkX2JpcHJl ZF9pZGM7Cj4gPiArCV9fczggcGljX2luaXRfcXBfbWludXMyNjsKPiA+ICsJX19zOCBwaWNfaW5p dF9xc19taW51czI2Owo+ID4gKwlfX3M4IGNocm9tYV9xcF9pbmRleF9vZmZzZXQ7Cj4gPiArCV9f czggc2Vjb25kX2Nocm9tYV9xcF9pbmRleF9vZmZzZXQ7Cj4gPiArCV9fdTE2IGZsYWdzOwo+ID4g K307Cj4gPiArCj4gPiArc3RydWN0IHY0bDJfY3RybF9oMjY0X3NjYWxpbmdfbWF0cml4IHsKPiA+ ICsJX191OCBzY2FsaW5nX2xpc3RfNHg0WzZdWzE2XTsKPiA+ICsJX191OCBzY2FsaW5nX2xpc3Rf OHg4WzZdWzY0XTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCB2NGwyX2gyNjRfd2VpZ2h0X2Zh Y3RvcnMgewo+ID4gKwlfX3MxNiBsdW1hX3dlaWdodFszMl07Cj4gPiArCV9fczE2IGx1bWFfb2Zm c2V0WzMyXTsKPiA+ICsJX19zMTYgY2hyb21hX3dlaWdodFszMl1bMl07Cj4gPiArCV9fczE2IGNo cm9tYV9vZmZzZXRbMzJdWzJdOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IHY0bDJfaDI2NF9w cmVkX3dlaWdodF90YWJsZSB7Cj4gPiArCV9fdTE2IGx1bWFfbG9nMl93ZWlnaHRfZGVub207Cj4g PiArCV9fdTE2IGNocm9tYV9sb2cyX3dlaWdodF9kZW5vbTsKPiA+ICsJc3RydWN0IHY0bDJfaDI2 NF93ZWlnaHRfZmFjdG9ycyB3ZWlnaHRfZmFjdG9yc1syXTsKPiA+ICt9Owo+ID4gKwo+ID4gKyNk ZWZpbmUgVjRMMl9IMjY0X1NMSUNFX1RZUEVfUAkJCQkwCj4gPiArI2RlZmluZSBWNEwyX0gyNjRf U0xJQ0VfVFlQRV9CCQkJCTEKPiA+ICsjZGVmaW5lIFY0TDJfSDI2NF9TTElDRV9UWVBFX0kJCQkJ Mgo+ID4gKyNkZWZpbmUgVjRMMl9IMjY0X1NMSUNFX1RZUEVfU1AJCQkJMwo+ID4gKyNkZWZpbmUg VjRMMl9IMjY0X1NMSUNFX1RZUEVfU0kJCQkJNAo+ID4gKwo+ID4gKyNkZWZpbmUgVjRMMl9IMjY0 X1NMSUNFX0ZMQUdfRklFTERfUElDCQkJMHgwMQo+ID4gKyNkZWZpbmUgVjRMMl9IMjY0X1NMSUNF X0ZMQUdfQk9UVE9NX0ZJRUxECQkweDAyCj4gPiArI2RlZmluZSBWNEwyX0gyNjRfU0xJQ0VfRkxB R19ESVJFQ1RfU1BBVElBTF9NVl9QUkVECTB4MDQKPiA+ICsjZGVmaW5lIFY0TDJfSDI2NF9TTElD RV9GTEFHX1NQX0ZPUl9TV0lUQ0gJCTB4MDgKPiA+ICsKPiA+ICtzdHJ1Y3QgdjRsMl9jdHJsX2gy NjRfc2xpY2VfcGFyYW1zIHsKPiA+ICsJLyogU2l6ZSBpbiBieXRlcywgaW5jbHVkaW5nIGhlYWRl ciAqLwo+ID4gKwlfX3UzMiBzaXplOwo+ID4gKwkvKiBPZmZzZXQgaW4gYml0cyB0byBzbGljZV9k YXRhKCkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc2xpY2UuICovCj4gPiArCV9fdTMyIGhl YWRlcl9iaXRfc2l6ZTsKPiA+ICsKPiA+ICsJX191MTYgZmlyc3RfbWJfaW5fc2xpY2U7Cj4gPiAr CV9fdTggc2xpY2VfdHlwZTsKPiA+ICsJX191OCBwaWNfcGFyYW1ldGVyX3NldF9pZDsKPiA+ICsJ X191OCBjb2xvdXJfcGxhbmVfaWQ7Cj4gPiArCV9fdTggcmVkdW5kYW50X3BpY19jbnQ7Cj4gPiAr CV9fdTE2IGZyYW1lX251bTsKPiA+ICsJX191MTYgaWRyX3BpY19pZDsKPiA+ICsJX191MTYgcGlj X29yZGVyX2NudF9sc2I7Cj4gPiArCV9fczMyIGRlbHRhX3BpY19vcmRlcl9jbnRfYm90dG9tOwo+ ID4gKwlfX3MzMiBkZWx0YV9waWNfb3JkZXJfY250MDsKPiA+ICsJX19zMzIgZGVsdGFfcGljX29y ZGVyX2NudDE7Cj4gPiArCj4gPiArCXN0cnVjdCB2NGwyX2gyNjRfcHJlZF93ZWlnaHRfdGFibGUg cHJlZF93ZWlnaHRfdGFibGU7Cj4gPiArCS8qIFNpemUgaW4gYml0cyBvZiBkZWNfcmVmX3BpY19t YXJraW5nKCkgc3ludGF4IGVsZW1lbnQuICovCj4gPiArCV9fdTMyIGRlY19yZWZfcGljX21hcmtp bmdfYml0X3NpemU7Cj4gPiArCS8qIFNpemUgaW4gYml0cyBvZiBwaWMgb3JkZXIgY291bnQgc3lu dGF4LiAqLwo+ID4gKwlfX3UzMiBwaWNfb3JkZXJfY250X2JpdF9zaXplOwo+ID4gKwo+ID4gKwlf X3U4IGNhYmFjX2luaXRfaWRjOwo+ID4gKwlfX3M4IHNsaWNlX3FwX2RlbHRhOwo+ID4gKwlfX3M4 IHNsaWNlX3FzX2RlbHRhOwo+ID4gKwlfX3U4IGRpc2FibGVfZGVibG9ja2luZ19maWx0ZXJfaWRj Owo+ID4gKwlfX3M4IHNsaWNlX2FscGhhX2MwX29mZnNldF9kaXYyOwo+ID4gKwlfX3M4IHNsaWNl X2JldGFfb2Zmc2V0X2RpdjI7Cj4gPiArCV9fdTggbnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVz MTsKPiA+ICsJX191OCBudW1fcmVmX2lkeF9sMV9hY3RpdmVfbWludXMxOwo+ID4gKwlfX3UzMiBz bGljZV9ncm91cF9jaGFuZ2VfY3ljbGU7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIEVudHJpZXMg b24gZWFjaCBsaXN0IGFyZSBpbmRpY2VzIGludG8KPiA+ICsJICogdjRsMl9jdHJsX2gyNjRfZGVj b2RlX3BhcmFtcy5kcGJbXS4KPiA+ICsJICovCj4gPiArCV9fdTggcmVmX3BpY19saXN0MFszMl07 Cj4gPiArCV9fdTggcmVmX3BpY19saXN0MVszMl07Cj4gPiArCj4gPiArCV9fdTMyIGZsYWdzOwo+ ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSBWNEwyX0gyNjRfRFBCX0VOVFJZX0ZMQUdfVkFMSUQJ CTB4MDEKPiA+ICsjZGVmaW5lIFY0TDJfSDI2NF9EUEJfRU5UUllfRkxBR19BQ1RJVkUJCTB4MDIK PiA+ICsjZGVmaW5lIFY0TDJfSDI2NF9EUEJfRU5UUllfRkxBR19MT05HX1RFUk0JMHgwNAo+ID4g Kwo+ID4gK3N0cnVjdCB2NGwyX2gyNjRfZHBiX2VudHJ5IHsKPiA+ICsJX191NjQgcmVmZXJlbmNl X3RzOwo+ID4gKwlfX3UxNiBmcmFtZV9udW07Cj4gPiArCV9fdTE2IHBpY19udW07Cj4gPiArCS8q IE5vdGUgdGhhdCBmaWVsZCBpcyBpbmRpY2F0ZWQgYnkgdjRsMl9idWZmZXIuZmllbGQgKi8KPiA+ ICsJX19zMzIgdG9wX2ZpZWxkX29yZGVyX2NudDsKPiA+ICsJX19zMzIgYm90dG9tX2ZpZWxkX29y ZGVyX2NudDsKPiA+ICsJX191MzIgZmxhZ3M7IC8qIFY0TDJfSDI2NF9EUEJfRU5UUllfRkxBR18q ICovCj4gPiArfTsKPiA+ICsKPiA+ICsjZGVmaW5lIFY0TDJfSDI2NF9ERUNPREVfUEFSQU1fRkxB R19JRFJfUElDCTB4MDEKPiA+ICsKPiA+ICtzdHJ1Y3QgdjRsMl9jdHJsX2gyNjRfZGVjb2RlX3Bh cmFtcyB7Cj4gPiArCXN0cnVjdCB2NGwyX2gyNjRfZHBiX2VudHJ5IGRwYlsxNl07Cj4gPiArCV9f dTE2IG51bV9zbGljZXM7Cj4gPiArCV9fdTE2IG5hbF9yZWZfaWRjOwo+ID4gKwlfX3U4IHJlZl9w aWNfbGlzdF9wMFszMl07Cj4gPiArCV9fdTggcmVmX3BpY19saXN0X2IwWzMyXTsKPiA+ICsJX191 OCByZWZfcGljX2xpc3RfYjFbMzJdOwo+ID4gKwlfX3MzMiB0b3BfZmllbGRfb3JkZXJfY250Owo+ ID4gKwlfX3MzMiBib3R0b21fZmllbGRfb3JkZXJfY250Owo+ID4gKwlfX3UzMiBmbGFnczsgLyog VjRMMl9IMjY0X0RFQ09ERV9QQVJBTV9GTEFHXyogKi8KPiA+ICt9Owo+ID4gKwo+ID4gKyNlbmRp Zgo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oIGIvaW5jbHVkZS9t ZWRpYS92NGwyLWN0cmxzLmgKPiA+IGluZGV4IGJkNjIxY2VjNjVhNS4uZGNlNmYzM2ZkNzQ5IDEw MDY0NAo+ID4gLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWN0cmxzLmgKPiA+ICsrKyBiL2luY2x1 ZGUvbWVkaWEvdjRsMi1jdHJscy5oCj4gPiBAQCAtMjMsMTEgKzIzLDEyIEBACj4gPiAgI2luY2x1 ZGUgPG1lZGlhL21lZGlhLXJlcXVlc3QuaD4KPiA+ICAKPiA+ICAvKgo+ID4gLSAqIEluY2x1ZGUg dGhlIG1wZWcyIGFuZCBmd2h0IHN0YXRlbGVzcyBjb2RlYyBjb21wb3VuZCBjb250cm9sIGRlZmlu aXRpb25zLgo+ID4gKyAqIEluY2x1ZGUgdGhlIHN0YXRlbGVzcyBjb2RlYyBjb21wb3VuZCBjb250 cm9sIGRlZmluaXRpb25zLgo+ID4gICAqIFRoaXMgd2lsbCBtb3ZlIHRvIHRoZSBwdWJsaWMgaGVh ZGVycyBvbmNlIHRoaXMgQVBJIGlzIGZ1bGx5IHN0YWJsZS4KPiA+ICAgKi8KPiA+ICAjaW5jbHVk ZSA8bWVkaWEvbXBlZzItY3RybHMuaD4KPiA+ICAjaW5jbHVkZSA8bWVkaWEvZndodC1jdHJscy5o Pgo+ID4gKyNpbmNsdWRlIDxtZWRpYS9oMjY0LWN0cmxzLmg+Cj4gPiAgCj4gPiAgLyogZm9yd2Fy ZCByZWZlcmVuY2VzICovCj4gPiAgc3RydWN0IGZpbGU7Cj4gPiBAQCAtNTEsNiArNTIsMTEgQEAg c3RydWN0IHBvbGxfdGFibGVfc3RydWN0Owo+ID4gICAqIEBwX21wZWcyX3NsaWNlX3BhcmFtczoJ UG9pbnRlciB0byBhIE1QRUcyIHNsaWNlIHBhcmFtZXRlcnMgc3RydWN0dXJlLgo+ID4gICAqIEBw X21wZWcyX3F1YW50aXphdGlvbjoJUG9pbnRlciB0byBhIE1QRUcyIHF1YW50aXphdGlvbiBkYXRh IHN0cnVjdHVyZS4KPiA+ICAgKiBAcF9md2h0X3BhcmFtczoJCVBvaW50ZXIgdG8gYSBGV0hUIHN0 YXRlbGVzcyBwYXJhbWV0ZXJzIHN0cnVjdHVyZS4KPiA+ICsgKiBAcF9oMjY0X3NwczoJCQlQb2lu dGVyIHRvIGEgc3RydWN0IHY0bDJfY3RybF9oMjY0X3Nwcy4KPiA+ICsgKiBAcF9oMjY0X3BwczoJ CQlQb2ludGVyIHRvIGEgc3RydWN0IHY0bDJfY3RybF9oMjY0X3Bwcy4KPiA+ICsgKiBAcF9oMjY0 X3NjYWxpbmdfbWF0cml4OglQb2ludGVyIHRvIGEgc3RydWN0IHY0bDJfY3RybF9oMjY0X3NjYWxp bmdfbWF0cml4Lgo+ID4gKyAqIEBwX2gyNjRfc2xpY2VfcGFyYW06CQlQb2ludGVyIHRvIGEgc3Ry dWN0IHY0bDJfY3RybF9oMjY0X3NsaWNlX3BhcmFtcy4KPiA+ICsgKiBAcF9oMjY0X2RlY29kZV9w YXJhbToJUG9pbnRlciB0byBhIHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9kZWNvZGVfcGFyYW1zLgo+ ID4gICAqIEBwOgkJCQlQb2ludGVyIHRvIGEgY29tcG91bmQgdmFsdWUuCj4gPiAgICovCj4gPiAg dW5pb24gdjRsMl9jdHJsX3B0ciB7Cj4gPiBAQCAtNjMsNiArNjksMTEgQEAgdW5pb24gdjRsMl9j dHJsX3B0ciB7Cj4gPiAgCXN0cnVjdCB2NGwyX2N0cmxfbXBlZzJfc2xpY2VfcGFyYW1zICpwX21w ZWcyX3NsaWNlX3BhcmFtczsKPiA+ICAJc3RydWN0IHY0bDJfY3RybF9tcGVnMl9xdWFudGl6YXRp b24gKnBfbXBlZzJfcXVhbnRpemF0aW9uOwo+ID4gIAlzdHJ1Y3QgdjRsMl9jdHJsX2Z3aHRfcGFy YW1zICpwX2Z3aHRfcGFyYW1zOwo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJsX2gyNjRfc3BzICpwX2gy NjRfc3BzOwo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJsX2gyNjRfcHBzICpwX2gyNjRfcHBzOwo+ID4g KwlzdHJ1Y3QgdjRsMl9jdHJsX2gyNjRfc2NhbGluZ19tYXRyaXggKnBfaDI2NF9zY2FsaW5nX21h dHJpeDsKPiA+ICsJc3RydWN0IHY0bDJfY3RybF9oMjY0X3NsaWNlX3BhcmFtcyAqcF9oMjY0X3Ns aWNlX3BhcmFtOwo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJsX2gyNjRfZGVjb2RlX3BhcmFtcyAqcF9o MjY0X2RlY29kZV9wYXJhbTsKPiA+ICAJdm9pZCAqcDsKPiA+ICB9Owo+ID4gIAo+ID4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvdWFwaS9saW51 eC92aWRlb2RldjIuaAo+ID4gaW5kZXggNDk2ZTY0NTM0NTBjLi44Mzg3MzJhY2RlZmMgMTAwNjQ0 Cj4gPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKPiA+ICsrKyBiL2luY2x1 ZGUvdWFwaS9saW51eC92aWRlb2RldjIuaAo+ID4gQEAgLTY1Nyw2ICs2NTcsNyBAQCBzdHJ1Y3Qg djRsMl9waXhfZm9ybWF0IHsKPiA+ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9IMjY0ICAgICB2NGwy X2ZvdXJjYygnSCcsICcyJywgJzYnLCAnNCcpIC8qIEgyNjQgd2l0aCBzdGFydCBjb2RlcyAqLwo+ ID4gICNkZWZpbmUgVjRMMl9QSVhfRk1UX0gyNjRfTk9fU0MgdjRsMl9mb3VyY2MoJ0EnLCAnVics ICdDJywgJzEnKSAvKiBIMjY0IHdpdGhvdXQgc3RhcnQgY29kZXMgKi8KPiA+ICAjZGVmaW5lIFY0 TDJfUElYX0ZNVF9IMjY0X01WQyB2NGwyX2ZvdXJjYygnTScsICcyJywgJzYnLCAnNCcpIC8qIEgy NjQgTVZDICovCj4gPiArI2RlZmluZSBWNEwyX1BJWF9GTVRfSDI2NF9TTElDRV9SQVcgdjRsMl9m b3VyY2MoJ1MnLCAnMicsICc2JywgJzQnKSAvKiBIMjY0IHBhcnNlZCBzbGljZXMgKi8KPiA+ICAj ZGVmaW5lIFY0TDJfUElYX0ZNVF9IMjYzICAgICB2NGwyX2ZvdXJjYygnSCcsICcyJywgJzYnLCAn MycpIC8qIEgyNjMgICAgICAgICAgKi8KPiA+ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHMSAg ICB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0cnLCAnMScpIC8qIE1QRUctMSBFUyAgICAgKi8KPiA+ ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHMiAgICB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0cn LCAnMicpIC8qIE1QRUctMiBFUyAgICAgKi8KLS0gClBhdWwgS29jaWFsa293c2tpLCBCb290bGlu CkVtYmVkZGVkIExpbnV4IGFuZCBrZXJuZWwgZW5naW5lZXJpbmcKaHR0cHM6Ly9ib290bGluLmNv bQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFy bS1rZXJuZWwK