Re: [spring] How CRH support SFC/Segment Endpoint option?

Ron Bonica <rbonica@juniper.net> Mon, 25 May 2020 04:29 UTC

Return-Path: <rbonica@juniper.net>
X-Original-To: spring@ietfa.amsl.com
Delivered-To: spring@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C25BC3A0B32; Sun, 24 May 2020 21:29:01 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.1
X-Spam-Level:
X-Spam-Status: No, score=-2.1 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=juniper.net header.b=EsGu56EO; dkim=pass (1024-bit key) header.d=juniper.net header.b=VWu8prVi
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pc1pJP6JfOxJ; Sun, 24 May 2020 21:28:58 -0700 (PDT)
Received: from mx0b-00273201.pphosted.com (mx0b-00273201.pphosted.com [67.231.152.164]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 605B33A0A55; Sun, 24 May 2020 21:28:58 -0700 (PDT)
Received: from pps.filterd (m0108163.ppops.net [127.0.0.1]) by mx0b-00273201.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 04P4MiAR013779; Sun, 24 May 2020 21:28:51 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juniper.net; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=PPS1017; bh=D+6dfRf85SjcLLb9K07l/7Uv/QWsZy7BzvGGbPiVJj0=; b=EsGu56EOd1FC1ctAG3xlBMh5ONIIBS8+wBZZ+aTvCW9sljWDH2i2xnWNtpKWu5tU6bPh SlqYYuD8ACTilwmVS318fPTKNucYDyldFJZtXsl30n06QAp5zBCapbIi9yXGviTqUZ2H TnTdH/k6/ZrP+enXGql8KyRVMM1Uy8+u8uK5iem8OCiG7uAQxYYC4SsINoVjSIdPBx4y YZmwwRxbwfM2Y/wnTNWwXj1nuPg8zmsf+Eh5ZWNlHnmzg0gQVHfytCK86skvtkT99oz4 8V4Ll1U+0OwcqKdQbWt34xTMNi4VVWdvsyaZ773gfPr0cfpWRzpc1Y1WSWU4meRl9Ya6 ig==
Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2171.outbound.protection.outlook.com [104.47.55.171]) by mx0b-00273201.pphosted.com with ESMTP id 316y2s28er-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 24 May 2020 21:28:51 -0700
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ImY6R62FQfxLB+beNkmh/p+TYv+le7DjrZka6wXcqIwCKYQpZbLAk9u53O+AIPJT0KgHEa3C0kTMaKYW8Jy70lG3UQrj8cU2/EfH52G9CkC0jGeQ+p0lrUISg1j61qs0VJ+gmeMeFJgmALkVgqG2WoGJzf+XyMmixHQIMv7MxswHYjkFYYXCdOHQt9IZLb0LHf+lBPDdSopQvTzqdeRRvMSEZ2RV3l82rUU3b6q+vdV1bdvoqxkLSkfLO3vbFyDfKNdrD5jDW8nEgM7OG6DoGdM6I/o1N8RrsEsZdE8eAMoZ1Waodu0PpoqFboqCGhCsUMddXix40FomPsCnNP5ojQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D+6dfRf85SjcLLb9K07l/7Uv/QWsZy7BzvGGbPiVJj0=; b=coBjTecjntPg9L4oeaELjomeKC3p41OcS65ECocbSRa3YR8DuWYxh/SR9QM+MadoAIRVnxW/YCDLdzo0UcROGKxrX5aLdN8XfWAQgaPoV1u5dZmhp55XRQ5AZ1uOzJ/Pmff31vOhWGxXnDR6BXZqpW/IJNcafZmilRbOGpRgHeDZujP6IOlgpxAP5OsGSQffOlLX3XRXYZEl2+1a8k8UD8aBt9wFkKq7ojuVQCnTn0Ihvl+GhjuJwwxg44GBYbUWhAf+5JzCirRoot8zxhLXK2iO+idIHKJnEe+2uqQhiLJa++OtXZffcfDatR+siQM81e8k1xoJlAF+kXjCpKyn7w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=juniper.net; dmarc=pass action=none header.from=juniper.net; dkim=pass header.d=juniper.net; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juniper.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D+6dfRf85SjcLLb9K07l/7Uv/QWsZy7BzvGGbPiVJj0=; b=VWu8prViQS4WT0y8/J/tfYXpHdjlJmDZTwc7F/AlpPePRzowG4cUkyHwH+oRw18mYP6X/ko75TC2ONCaVd30ZcqaepxUJvRucfhm+GoVgPGs1iovFYnmsZz1yFrTANGkV/ruVMLtoftW6AYEdcTqa+XJ7QnqO0yGE1SMq5kLT5k=
Received: from DM6PR05MB6348.namprd05.prod.outlook.com (2603:10b6:5:122::15) by DM6PR05MB4682.namprd05.prod.outlook.com (2603:10b6:5:17::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3045.8; Mon, 25 May 2020 04:28:48 +0000
Received: from DM6PR05MB6348.namprd05.prod.outlook.com ([fe80::c020:3bf5:7230:75e3]) by DM6PR05MB6348.namprd05.prod.outlook.com ([fe80::c020:3bf5:7230:75e3%4]) with mapi id 15.20.3045.014; Mon, 25 May 2020 04:28:48 +0000
From: Ron Bonica <rbonica@juniper.net>
To: "Chengli (Cheng Li)" <c.l@huawei.com>, Tom Herbert <tom@herbertland.com>, Brian E Carpenter <brian.e.carpenter@gmail.com>
CC: "spring@ietf.org" <spring@ietf.org>, 6man <6man@ietf.org>
Thread-Topic: [spring] How CRH support SFC/Segment Endpoint option?
Thread-Index: AdYwBYkgTau2vInrR6WP+x+iqlpN9gAPJDmwADf+cOAAEX/LgAATRtiAABaWjIAAAXdcAAAEWnWAAAYAivAAAf2wgAABeFCw
Date: Mon, 25 May 2020 04:28:48 +0000
Message-ID: <DM6PR05MB63480B3675B878B3E0981A48AEB30@DM6PR05MB6348.namprd05.prod.outlook.com>
References: <C7C2E1C43D652C4E9E49FE7517C236CB02A2CD12@dggeml529-mbx.china.huawei.com> <DM6PR05MB63482CFA4D5AB938D5A4B818AEB40@DM6PR05MB6348.namprd05.prod.outlook.com> <C7C2E1C43D652C4E9E49FE7517C236CB02A37DC6@dggeml509-mbs.china.huawei.com> <DM6PR05MB63489256A7C8357BEF526EE2AEB20@DM6PR05MB6348.namprd05.prod.outlook.com> <CAOj+MMGLj9OgFCcsB21oWXbcCqHZ7B4qTvCcrK9LXuKDYVu_vQ@mail.gmail.com> <CALx6S36yJ5CS6ykQhd_sW3T6=PjVJNOqewtg2joUtHnbsZPxSA@mail.gmail.com> <15815a80-7fe3-7d85-61a8-f7168a99cabb@gmail.com> <CALx6S35j=c9BUyyf1qs+As-51YVR6DTQAP+Xkc4zS05CGVJCHQ@mail.gmail.com> <DM6PR05MB63484B690AF323ACE5853D79AEB30@DM6PR05MB6348.namprd05.prod.outlook.com> <C7C2E1C43D652C4E9E49FE7517C236CB02A494F3@dggeml529-mbx.china.huawei.com>
In-Reply-To: <C7C2E1C43D652C4E9E49FE7517C236CB02A494F3@dggeml529-mbx.china.huawei.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels: MSIP_Label_0633b888-ae0d-4341-a75f-06e04137d755_Enabled=true; MSIP_Label_0633b888-ae0d-4341-a75f-06e04137d755_SetDate=2020-05-25T04:28:43Z; MSIP_Label_0633b888-ae0d-4341-a75f-06e04137d755_Method=Standard; MSIP_Label_0633b888-ae0d-4341-a75f-06e04137d755_Name=0633b888-ae0d-4341-a75f-06e04137d755; MSIP_Label_0633b888-ae0d-4341-a75f-06e04137d755_SiteId=bea78b3c-4cdb-4130-854a-1d193232e5f4; MSIP_Label_0633b888-ae0d-4341-a75f-06e04137d755_ActionId=955d262c-6b20-47d2-91d1-c0f36fd11ec7; MSIP_Label_0633b888-ae0d-4341-a75f-06e04137d755_ContentBits=2
dlp-product: dlpe-windows
dlp-version: 11.4.0.45
dlp-reaction: no-action
authentication-results: huawei.com; dkim=none (message not signed) header.d=none;huawei.com; dmarc=none action=none header.from=juniper.net;
x-originating-ip: [108.28.233.91]
x-ms-publictraffictype: Email
x-ms-office365-filtering-ht: Tenant
x-ms-office365-filtering-correlation-id: 6ee080ef-37e9-4d7d-1f75-08d800641edb
x-ms-traffictypediagnostic: DM6PR05MB4682:
x-microsoft-antispam-prvs: <DM6PR05MB468206C46B6A925DC97B84F3AEB30@DM6PR05MB4682.namprd05.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:9508;
x-forefront-prvs: 0414DF926F
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: 4p9eC9tqnHwIE8bw23a6D/W/q27PMQkI+hQkx8HZUEcIdEbjQ1mJEAzzXtfaXVrC++nmlQbsTUxbbw7E40lheHrDLkMPdNE6EZZrPCDjTOJd154ZD/uuArcpbTGoq/4A1zDXbBIM6ezFW1Qv8x7WxOXOQqL2rL054eeJLiRdjf9jKq3gDOClnXRptILZhFWQKhVz0/gXN6L34BqkM200NztU8plpVcsTMVsEwvoU3oFVx7RII+JLOFP6S1r4o8WnQinJlPtlxoV0Cxm4Nab+laPN2CVfJgpy3AYknQW1VW85npZwUL9hJ5yPdAEMqgNUOqG8aPSRi3ayEUuTk30auo+U9LCYe/BE3WQ5M6IjVpPq6ATgXzkan6IOEs2OgBzwGdyqJUUgxU2hhcW0JOL0Fg==
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR05MB6348.namprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39860400002)(366004)(346002)(136003)(396003)(376002)(7696005)(5660300002)(33656002)(26005)(186003)(478600001)(53546011)(66556008)(66476007)(64756008)(966005)(66446008)(76116006)(110136005)(316002)(66946007)(6506007)(54906003)(55016002)(71200400001)(86362001)(4326008)(9686003)(52536014)(2906002)(8936002)(8676002); DIR:OUT; SFP:1102;
x-ms-exchange-antispam-messagedata: aX9JXPVUE0L22xfWGMFpmbhMXttq7yCh6pZtNlu5WI7YP0WkV5wjr53EQjNifca9TCgdcNUDsN0KXOgn1yvC3cdFqKRvmjBCnUtl0S1cwUZqSjy2Si7vGafaWx5URlA4P5ptlh1vFjYZfNXjMnBLQcqL0bXkF/n8AprGHgqQBPX7vJB/dBiQ3QPIm7mviA/b0vJbNCx+DN5IAH2BxYw0nh6c8bhyitHp7mcmDpXJG73hSjhaAR+SHpgT5Bo4/SMeH+BvoMiMspkQReViqLY5Oq4Ft/D1sdJ9nyAbbyX/bFVEZ9WTjQofnP1NaBz/E5VeGDEevmW3xzgoB2muPLeA07kS1myEjH8xmlm8XColSHcc2vB97qpc4hsE5agOr0RmMb42E12StvKddnL/ucDMk63tC+nsgSziOvmU4K9l7ytmn9gMeZKWRgMs3B2NMqJjKWU5Z4jeCiS9U0oZ+xt99hlw0CjPJa7xbV9k53bYgLnxtUTq0H18/SAW37e3HBlb
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: juniper.net
X-MS-Exchange-CrossTenant-Network-Message-Id: 6ee080ef-37e9-4d7d-1f75-08d800641edb
X-MS-Exchange-CrossTenant-originalarrivaltime: 25 May 2020 04:28:48.5652 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: bea78b3c-4cdb-4130-854a-1d193232e5f4
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: iMOx+1TuIxUKak3ng0s/83d81pVXoZy1URgAjm7FtY0rD8zVanHjR/7jhssl9J7lMLs+NCkmRTK98/fnp0jlmw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR05MB4682
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216, 18.0.676 definitions=2020-05-24_11:2020-05-22, 2020-05-24 signatures=0
X-Proofpoint-Spam-Details: rule=outbound_spam_notspam policy=outbound_spam score=0 mlxscore=0 adultscore=0 impostorscore=0 cotscore=-2147483648 suspectscore=0 clxscore=1015 mlxlogscore=999 bulkscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2005250034
Archived-At: <https://mailarchive.ietf.org/arch/msg/spring/cm2pT-VFjWWeKhyYtiRmx_VEnvc>
Subject: Re: [spring] How CRH support SFC/Segment Endpoint option?
X-BeenThere: spring@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Source Packet Routing in NetworkinG \(SPRING\)" <spring.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/spring>, <mailto:spring-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/spring/>
List-Post: <mailto:spring@ietf.org>
List-Help: <mailto:spring-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/spring>, <mailto:spring-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 25 May 2020 04:29:03 -0000

Cheng,

The CRH doesn't attempt the address SFC. That is beyond the scope or a routing header.

                                                                  Ron


Juniper Business Use Only

-----Original Message-----
From: Chengli (Cheng Li) <c.l@huawei.com> 
Sent: Sunday, May 24, 2020 11:44 PM
To: Ron Bonica <rbonica@juniper.net>; Tom Herbert <tom@herbertland.com>; Brian E Carpenter <brian.e.carpenter@gmail.com>
Cc: spring@ietf.org; 6man <6man@ietf.org>
Subject: RE: [spring] How CRH support SFC/Segment Endpoint option?

[External Email. Be cautious of content]


Hi Ron,

Thank you to share the facts of RFC8200.

Could you please explain how CRH supports SFC by the first Destination Options header as you mentioned in you previous email?

Or how to support performing a specific behavior at a specify node along the path by using CRH?

You know, when we add an option in the first DOH, it will be processed by all the nodes listed in the RH.

Best Regards,
Cheng




-----Original Message-----
From: ipv6 [mailto:ipv6-bounces@ietf.org] On Behalf Of Ron Bonica
Sent: Monday, May 25, 2020 11:09 AM
To: Tom Herbert <tom@herbertland.com>; Brian E Carpenter <brian.e.carpenter@gmail.com>
Cc: spring@ietf.org; 6man <6man@ietf.org>
Subject: RE: [spring] How CRH support SFC/Segment Endpoint option?

Folks,

I think that we are all talking past one another. RFC 8200 recommends specific ordering of extension headers for a reason.

IPv6 extension header are ordered as follows:

- Headers processed at every node along the delivery path
        - Hop-by-hop
- Headers processed at every segment endpoint
        - Destination options
        - Routing header
- Headers processed at the ultimate destination only
        - Fragment header
        - Authentication header
        - ESP header
        - Destination Options header

Note that the Destination Options header is the only extension header that can appear twice in a packet. The Destination Options header must immediately precede the Routing header or the upper-0layer header.

 If a packet contains a destination options header, a routing header, a fragment header, and another destination options header:

- the destination options header that precedes the routing header appears in each fragment
- the destination options header that precedes the routing header Is processed on each segment endpoint, before the packet is reassembled
- the destination options header that precedes the upper layer header appears in the first fragment only
- the destination options header that precedes the upper layer header Is processed on the ultimate destination node, after the packet has been reassembled

                                                                      ROn


Juniper Business Use Only

-----Original Message-----
From: Tom Herbert <tom@herbertland.com>
Sent: Sunday, May 24, 2020 7:56 PM
To: Brian E Carpenter <brian.e.carpenter@gmail.com>
Cc: Robert Raszuk <robert@raszuk.net>; Ron Bonica <rbonica@juniper.net>; spring@ietf.org; 6man <6man@ietf.org>
Subject: Re: [spring] How CRH support SFC/Segment Endpoint option?

[External Email. Be cautious of content]


On Sun, May 24, 2020 at 2:51 PM Brian E Carpenter <brian.e.carpenter@gmail.com> wrote:
>
> On 25-May-20 09:08, Tom Herbert wrote:
> > On Sun, May 24, 2020 at 3:23 AM Robert Raszuk <robert@raszuk.net> wrote:
> >>
> >> Hi Ron,
> >>
> >> I have one small question on the Destination Option Header you keep referencing to carry for example VPN demux instructions.
> >>
> >> As DOH follows Fragment Header it is indeed inspected before CRH.
> >>
> >> So please kindly clarify what is there in the IPv6 packet header which would stop each segment endpoint (during the transit over SR anchors)  which destination is obviously in DA of the arriving packet not to inspect DOH and not trying to execute it ?
> >>
> >> If you could please also provide reference to RFC8200 defining it.
> >>
> > Robert,
> >
> > Look at Destination Options before the routing header in RFC8200.
> > These are intended to be processed at every intermediate destination 
> > in the routing header
>
> That intention is not specified in the text, and IMHO cannot be deduced from the text. Hence my comment on draft-bonica-6man-ext-hdr-update.
>
Brian,

I think it can be deduced. Extension headers need to be processed in order, so destination options before the routing header must be processed before the routing header. If the destination options before the routing were only to be processed at the final destination, then we would need to process the routing header before processing the destination options in order to determine if the destination address is indeed the final destination. More practically, if destination options were only to be processed at the final destination then it doesn't seem like there would be any material between destination options before and those after the routing header (or maybe there was some other intent to have two flavors of destination options?)..

I agree that the text could be clarified, It seems like another case of potential ambiguity in RFC8200 among the terms destination, destination address, final destination, an intermediate destination.
https://urldefense.com/v3/__https://tools.ietf.org/html/draft-herbert-ipv6-update-dest-ops-00__;!!NEt6yMaO-gk!XLLXuigXPE8uDwP4SF5HfRZ1NBlH1w24-GVBjHk_rvCmqCueDLaELLoTDx-wnEK6$  was an attempt to calirfy this, at least to clarify the significance of a modifiable destination option (before the routing header).

Tom

>    Brian
>
> > and precede any fragment header.
> >
> > Tom
> >
> >> Keep in mind that in number of networks P routers are also PE routers so executing DOH even if CRH still contains many hops to go may result in very unexpected behaviours. I am sure you recall that L3VPN labels are locally significant and there is no mechanism in place to assure uniqueness of VPN demux values across PEs..
> >>
> >> Why is this important here - because CRH by design is decoupled from any functions or network application handling.
> >>
> >> Many thx,
> >> Robert.
> >>
> >>
> >> On Sun, May 24, 2020 at 3:24 AM Ron Bonica <rbonica=40juniper.net@dmarc.ietf.org> wrote:
> >>>
> >>> Cheng,
> >>>
> >>>
> >>>
> >>> The CRH is a building block. It has exactly one function. That is, to steer a packet along its delivery path.
> >>>
> >>>
> >>>
> >>> The CRH does not attempt to deliver parameters or metadata to service function instances. It relies on other mechanisms. One possibility is a destination options header that precedes the CRH. I am sure that there are other mechanisms. CRH should be compatible with all of them.
> >>>
> >>>
> >>>
> >>> Personally, I am not an NSH expert. Maybe someone who is can speak up...
> >>>
> >>>
> >>>
> >>>
> >>> Ron
> >>
> >> -------------------------------------------------------------------
> >> - IETF IPv6 working group mailing list ipv6@ietf.org Administrative
> >> Requests:
> >> https://urldefense.com/v3/__https://www.ietf.org/mailman/listinfo/i
> >> pv6__;!!NEt6yMaO-gk!XLLXuigXPE8uDwP4SF5HfRZ1NBlH1w24-GVBjHk_rvCmqCu
> >> eDLaELLoTD0hgsR60$
> >> -------------------------------------------------------------------
> >> -
> >
> > --------------------------------------------------------------------
> > IETF IPv6 working group mailing list ipv6@ietf.org Administrative
> > Requests:
> > https://urldefense.com/v3/__https://www.ietf.org/mailman/listinfo/ip
> > v6__;!!NEt6yMaO-gk!XLLXuigXPE8uDwP4SF5HfRZ1NBlH1w24-GVBjHk_rvCmqCueD
> > LaELLoTD0hgsR60$
> > --------------------------------------------------------------------
> >
--------------------------------------------------------------------
IETF IPv6 working group mailing list
ipv6@ietf.org
Administrative Requests: https://urldefense.com/v3/__https://www.ietf.org/mailman/listinfo/ipv6__;!!NEt6yMaO-gk!XdMQFD54OnmS_ELU3qQMHcVZZnhEpDqi6DlUjZBbErP9_6b9aReoEWXxfz3ztST_$
--------------------------------------------------------------------