No subject


Wed Jan 27 21:05:54 CET 2016


be done in 2.1 version.
Is it possible to change in asynchronous mode in 1.11 version?
If not, is there a way to achieve asynchronous REST calls for the version o=
f opensips what we are using?

Also I see from documentation,

The following functions may also be called asynchronously:

  *   avp_db_query<http://www.opensips.org/html/docs/modules/2.1.x/avpops.h=
tml#id294986>
  *   rest_get<http://www.opensips.org/html/docs/modules/2.1.x/rest_client.=
html#id293741>
  *   rest_post<http://www.opensips.org/html/docs/modules/2.1.x/rest_client=
.html#id293886>
  *   exec<http://www.opensips.org/html/docs/modules/2.1.x/exec#id294052>
Can rest_put can also be called asynchronously if we use 2.1 version ?
Please clarify.

Regards,
Agalya




_______________________________________________

Users mailing list

Users at lists.opensips.org<mailto:Users at lists.opensips.org>

http://lists.opensips.org/cgi-bin/mailman/listinfo/users


--_000_b87dda888e6f43a5a6cf143481c27b6bCOPDCEX28cablecomcastco_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Consolas;
	panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
	{font-family:"Trebuchet MS \,sans-serif";}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;
	color:black;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:#0563C1;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:#954F72;
	text-decoration:underline;}
p
	{mso-style-priority:99;
	mso-margin-top-alt:auto;
	margin-right:0in;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	font-size:12.0pt;
	font-family:"Times New Roman",serif;
	color:black;}
pre
	{mso-style-priority:99;
	mso-style-link:"HTML Preformatted Char";
	margin:0in;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Courier New";
	color:black;}
tt
	{mso-style-priority:99;
	font-family:"Courier New";}
span.HTMLPreformattedChar
	{mso-style-name:"HTML Preformatted Char";
	mso-style-priority:99;
	mso-style-link:"HTML Preformatted";
	font-family:Consolas;
	color:black;}
span.EmailStyle21
	{mso-style-type:personal;
	font-family:"Calibri",sans-serif;
	color:windowtext;}
span.EmailStyle22
	{mso-style-type:personal;
	font-family:"Calibri",sans-serif;
	color:#1F497D;}
span.EmailStyle23
	{mso-style-type:personal-compose;
	font-family:"Calibri",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:10.0pt;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
/* List Definitions */
@list l0
	{mso-list-id:920869609;
	mso-list-template-ids:-1225891966;}
@list l0:level1
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:.5in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l0:level2
	{mso-level-number-format:bullet;
	mso-level-text:o;
	mso-level-tab-stop:1.0in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:"Courier New";
	mso-bidi-font-family:"Times New Roman";}
@list l0:level3
	{mso-level-number-format:bullet;
	mso-level-text:\F0A7;
	mso-level-tab-stop:1.5in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Wingdings;}
@list l0:level4
	{mso-level-number-format:bullet;
	mso-level-text:\F0A7;
	mso-level-tab-stop:2.0in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Wingdings;}
@list l0:level5
	{mso-level-number-format:bullet;
	mso-level-text:\F0A7;
	mso-level-tab-stop:2.5in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Wingdings;}
@list l0:level6
	{mso-level-number-format:bullet;
	mso-level-text:\F0A7;
	mso-level-tab-stop:3.0in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Wingdings;}
@list l0:level7
	{mso-level-number-format:bullet;
	mso-level-text:\F0A7;
	mso-level-tab-stop:3.5in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Wingdings;}
@list l0:level8
	{mso-level-number-format:bullet;
	mso-level-text:\F0A7;
	mso-level-tab-stop:4.0in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Wingdings;}
@list l0:level9
	{mso-level-number-format:bullet;
	mso-level-text:\F0A7;
	mso-level-tab-stop:4.5in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Wingdings;}
@list l1
	{mso-list-id:1413894460;
	mso-list-template-ids:2029389960;}
@list l1:level1
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:.5in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level2
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:1.0in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level3
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:1.5in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level4
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:2.0in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level5
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:2.5in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level6
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:3.0in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level7
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:3.5in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level8
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:4.0in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level9
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:4.5in;
	mso-level-number-position:left;
	text-indent:-.25in;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
ol
	{margin-bottom:0in;}
ul
	{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor=3D"white" lang=3D"EN-US" link=3D"#0563C1" vlink=3D"#954F72">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><span style=3D"color:blue">Hi Bogdan/Liviu,<o:p></o:=
p></span></p>
<p class=3D"MsoNormal"><span style=3D"color:blue"><o:p>&nbsp;</o:p></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"color:blue">I have downloaded 2.1.4 v=
ersion if opensips and trying to use rest_put call in async mode.
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"color:blue"><o:p>&nbsp;</o:p></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"color:blue">I have added the necessar=
y code for rest_put () similar to rest_post() in rest_methods.c, rest_metho=
ds.h and rest_client.c
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">If I just call, rest_put =
from config file, without async it works fine. I could see rest_put() is ca=
lled and do the necessary steps.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"color:blue"><o:p>&nbsp;</o:p></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"color:blue">And am trying to call asy=
nc from config file as,
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><b><span style=3D"color:blue">&nbsp;async(rest_put(&=
quot;<a href=3D"http://***url***%20"><span style=3D"color:blue">http://***u=
rl***
</span></a>&quot;, &quot;$fU,$tU,$ci &quot;, &quot;application/json&quot;, =
&quot;$var(body)&quot;, &quot;$var(ct)&quot;, &quot;$var(rcode)&quot;),resu=
me_put);<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><span style=3D"color:#1F497D"><o:p>&nbsp;</o:p></spa=
n></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Further debugging I got s=
ome info that I can share with you so that you can help me out easily.
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Instead of calling <b>res=
t_put asynchronously</b> I have tried to call
<b>rest_post async</b> . I could able to see that HTTP request went out(fro=
m wireshark traces) and I got 4xx response for the same.<o:p></o:p></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"color:blue"><o:p>&nbsp;</o:p></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"color:blue">With my code changes in p=
lace and when I call rest_put, am not seeing HTTP request sent out.<o:p></o=
:p></span></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Assuming <b>rest_put</b> =
only is not working, there should be some libcurl stuffs not handled proper=
ly in &#8216;<b>start_async_http_req</b>&#8217; for &#8216;<b>REST_CLIENT_P=
UT</b>&#8217; case.
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"color:blue"><o:p>&nbsp;</o:p></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Am attaching the files. I=
t contains code for rest_put only. I have removed other code to reduce the =
file size. Can you please take a look guide me here.
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Please let me know if you=
 need more information on this.
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"color:blue"><o:p>&nbsp;</o:p></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Regards,<br>
Agalya<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"color:#1F497D"><o:p>&nbsp;</o:p></spa=
n></p>
<p class=3D"MsoNormal"><span style=3D"color:#1F497D"><o:p>&nbsp;</o:p></spa=
n></p>
<div>
<div style=3D"border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in =
0in 0in">
<p class=3D"MsoNormal"><b><span style=3D"color:windowtext">From:</span></b>=
<span style=3D"color:windowtext"> users-bounces at lists.opensips.org [mailto:=
users-bounces at lists.opensips.org]
<b>On Behalf Of </b>Liviu Chircu<br>
<b>Sent:</b> Friday, August 05, 2016 4:47 AM<br>
<b>To:</b> users at lists.opensips.org<br>
<b>Subject:</b> Re: [OpenSIPS-Users] Asynchronous operation for REST querie=
s<o:p></o:p></span></p>
</div>
</div>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><tt><span style=3D"font-size:10.0pt">Hi Agalya,</spa=
n></tt><span style=3D"font-size:10.0pt;font-family:&quot;Courier New&quot;"=
><br>
<br>
<tt>1.11 has no async support at core level. If you need that, you will hav=
e to use 2.1&#43;</tt><br>
<br>
<tt>Async rest_put() is currently not implemented, but its logic would be f=
airly similar to the GET and POST counterparts.</tt></span><br>
<br>
<span style=3D"font-size:12.0pt"><o:p></o:p></span></p>
<pre>Liviu Chircu<o:p></o:p></pre>
<pre>OpenSIPS Developer<o:p></o:p></pre>
<pre><a href=3D"http://www.opensips-solutions.com">http://www.opensips-solu=
tions.com</a><o:p></o:p></pre>
<div>
<p class=3D"MsoNormal">On 04.08.2016 23:14, Ramachandran, Agalya (Contracto=
r) wrote:<o:p></o:p></p>
</div>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<p class=3D"MsoNormal"><span style=3D"color:blue">Hi team,</span><o:p></o:p=
></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">&nbsp;</span><o:p></o:p><=
/p>
<p class=3D"MsoNormal"><span style=3D"color:blue">We are using opensips1.11=
.3 version for our project.
</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">I have a question here. R=
ight now we are using a REST API call from config file for our project requ=
irement and it is in synchronous mode currently.</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">From the opensips documen=
t, I see asynchronous support at script level can be done in 2.1 version.</=
span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Is it possible to change =
in asynchronous mode in 1.11 version?</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">If not, is there a way to=
 achieve asynchronous REST calls for the version of opensips what we are us=
ing?
</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">&nbsp;</span><o:p></o:p><=
/p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Also I see from documenta=
tion,</span><o:p></o:p></p>
<p style=3D"margin:0in;margin-bottom:.0001pt;line-height:16.2pt;background:=
white"><span style=3D"font-size:10.0pt">The following functions may also be=
 called asynchronously:</span><o:p></o:p></p>
<ul type=3D"disc">
<li class=3D"MsoNormal" style=3D"color:#666666;mso-margin-top-alt:auto;mso-=
margin-bottom-alt:auto;line-height:16.2pt;mso-list:l0 level1 lfo3;backgroun=
d:white">
<span style=3D"font-size:10.0pt;font-family:&quot;Trebuchet MS \,sans-serif=
&quot;"><a href=3D"http://www.opensips.org/html/docs/modules/2.1.x/avpops.h=
tml#id294986"><b><span style=3D"color:#185662;text-decoration:none">avp_db_=
query</span></b></a></span><o:p></o:p></li><li class=3D"MsoNormal" style=3D=
"color:#666666;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;line-heig=
ht:16.2pt;mso-list:l0 level1 lfo3;background:white">
<span style=3D"font-size:10.0pt;font-family:&quot;Trebuchet MS \,sans-serif=
&quot;"><a href=3D"http://www.opensips.org/html/docs/modules/2.1.x/rest_cli=
ent.html#id293741"><b><span style=3D"color:#185662;text-decoration:none">re=
st_get</span></b></a></span><o:p></o:p></li><li class=3D"MsoNormal" style=
=3D"color:#666666;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;line-h=
eight:16.2pt;mso-list:l0 level1 lfo3;background:white">
<span style=3D"font-size:10.0pt;font-family:&quot;Trebuchet MS \,sans-serif=
&quot;"><a href=3D"http://www.opensips.org/html/docs/modules/2.1.x/rest_cli=
ent.html#id293886"><b><span style=3D"color:#185662;text-decoration:none">re=
st_post</span></b></a></span><o:p></o:p></li><li class=3D"MsoNormal" style=
=3D"color:#666666;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;line-h=
eight:16.2pt;mso-list:l0 level1 lfo3;background:white">
<span style=3D"font-size:10.0pt;font-family:&quot;Trebuchet MS \,sans-serif=
&quot;"><a href=3D"http://www.opensips.org/html/docs/modules/2.1.x/exec#id2=
94052"><b><span style=3D"color:#185662;text-decoration:none">exec</span></b=
></a></span><o:p></o:p></li></ul>
<p class=3D"MsoNormal"><span style=3D"color:blue">Can rest_put can also be =
called asynchronously if we use 2.1 version ?
</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Please clarify.</span><o:=
p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">&nbsp;</span><o:p></o:p><=
/p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Regards,</span><o:p></o:p=
></p>
<p class=3D"MsoNormal"><span style=3D"color:blue">Agalya</span><o:p></o:p><=
/p>
<p class=3D"MsoNormal"><span style=3D"font-size:12.0pt;font-family:&quot;Ti=
mes New Roman&quot;,serif"><br>
<br>
<br>
<o:p></o:p></span></p>
<pre>_______________________________________________<o:p></o:p></pre>
<pre>Users mailing list<o:p></o:p></pre>
<pre><a href=3D"mailto:Users at lists.opensips.org">Users at lists.opensips.org</=
a><o:p></o:p></pre>
<pre><a href=3D"http://lists.opensips.org/cgi-bin/mailman/listinfo/users">h=
ttp://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><o:p></o:p></pre=
>
</blockquote>
<p class=3D"MsoNormal"><span style=3D"font-size:12.0pt;font-family:&quot;Ti=
mes New Roman&quot;,serif"><o:p>&nbsp;</o:p></span></p>
</div>
</body>
</html>

--_000_b87dda888e6f43a5a6cf143481c27b6bCOPDCEX28cablecomcastco_--

--_006_b87dda888e6f43a5a6cf143481c27b6bCOPDCEX28cablecomcastco_
Content-Type: text/plain; name="rest_client.c"
Content-Description: rest_client.c
Content-Disposition: attachment; filename="rest_client.c"; size=12290;
	creation-date="Mon, 15 Aug 2016 20:27:58 GMT";
	modification-date="Tue, 16 Aug 2016 14:21:25 GMT"
Content-Transfer-Encoding: base64

LyoKICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgT3BlblNJUFMgU29sdXRpb25zCiAqCiAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIG9wZW5zaXBzLCBhIGZyZWUgU0lQIHNlcnZlci4KICoKICogb3Bl
bnNpcHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uCiAqCiAqIG9wZW5zaXBzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAwMjExMC0xMzAxICBVU0EKICoKICogSGlzdG9yeToKICogLS0tLS0tLQogKiAyMDEzLTAyLTI4
OiBDcmVhdGVkIChMaXZpdSkKICovCgoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRs
aWIuaD4KI2luY2x1ZGUgPGN1cmwvY3VybC5oPgoKI2luY2x1ZGUgIi4uLy4uL2FzeW5jLmgiCiNp
bmNsdWRlICIuLi8uLi9zcl9tb2R1bGUuaCIKI2luY2x1ZGUgIi4uLy4uL2RwcmludC5oIgojaW5j
bHVkZSAiLi4vLi4vbWVtL21lbS5oIgojaW5jbHVkZSAiLi4vLi4vbWVtL3NobV9tZW0uaCIKI2lu
Y2x1ZGUgIi4uLy4uL21vZF9maXguaCIKCiNpbmNsdWRlICJyZXN0X21ldGhvZHMuaCIKCi8qCiAq
IE1vZHVsZSBwYXJhbWV0ZXJzCiAqLwpsb25nIGNvbm5lY3Rpb25fdGltZW91dCA9IDIwOwpsb25n
IGNvbm5lY3Rpb25fdGltZW91dF9tczsKbG9uZyBjdXJsX3RpbWVvdXQgPSAyMDsKCmNoYXIgKnNz
bF9jYXBhdGg7CgovKiBsaWJjdXJsIGVuYWJsZXMgdGhlc2UgYnkgZGVmYXVsdCAqLwppbnQgc3Ns
X3ZlcmlmeXBlZXIgPSAxOwppbnQgc3NsX3ZlcmlmeWhvc3QgPSAxOwoKLyoKICogTW9kdWxlIGlu
aXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwCiAqLwpzdGF0aWMgaW50IG1vZF9pbml0KHZvaWQpOwpz
dGF0aWMgaW50IGNoaWxkX2luaXQoaW50IHJhbmspOwpzdGF0aWMgdm9pZCBtb2RfZGVzdHJveSh2
b2lkKTsKCi8qCiAqIEZpeHVwIGZ1bmN0aW9ucwogKi8Kc3RhdGljIGludCBmaXh1cF9yZXN0X2dl
dCh2b2lkICoqcGFyYW0sIGludCBwYXJhbV9ubyk7CnN0YXRpYyBpbnQgZml4dXBfcmVzdF9wb3N0
KHZvaWQgKipwYXJhbSwgaW50IHBhcmFtX25vKTsKc3RhdGljIGludCBmaXh1cF9yZXN0X3B1dCh2
b2lkICoqcGFyYW0sIGludCBwYXJhbV9ubyk7CgovKgogKiBGdW5jdGlvbiBoZWFkZXJzCiAqLwpz
dGF0aWMgaW50IHdfcmVzdF9nZXQoc3RydWN0IHNpcF9tc2cgKm1zZywgY2hhciAqZ3BfdXJsLCBj
aGFyICpib2R5X3B2LAoJCQkJY2hhciAqY3R5cGVfcHYsIGNoYXIgKmNvZGVfcHYpOwpzdGF0aWMg
aW50IHdfcmVzdF9wb3N0KHN0cnVjdCBzaXBfbXNnICptc2csIGNoYXIgKmdwX3VybCwgY2hhciAq
Z3BfYm9keSwKCQkJCWNoYXIgKmdwX2N0eXBlLCBjaGFyICpib2R5X3B2LCBjaGFyICpjdHlwZV9w
diwgY2hhciAqY29kZV9wdik7CnN0YXRpYyBpbnQgd19yZXN0X3B1dChzdHJ1Y3Qgc2lwX21zZyAq
bXNnLCBjaGFyICpncF91cmwsIGNoYXIgKmdwX2JvZHksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqZ3BfY3R5cGUsIGNoYXIgKmJvZHlfcHYsIGNoYXIgKmN0eXBlX3B2LCBj
aGFyICpjb2RlX3B2KTsKCnN0YXRpYyBpbnQgd19hc3luY19yZXN0X2dldChzdHJ1Y3Qgc2lwX21z
ZyAqbXNnLCBhc3luY19yZXN1bWVfbW9kdWxlICoqcmVzdW1lX2YsCgkJCQkJCQl2b2lkICoqcmVz
dW1lX3BhcmFtLCBjaGFyICpncF91cmwsCgkJCQkJCQljaGFyICpib2R5X3B2LCBjaGFyICpjdHlw
ZV9wdiwgY2hhciAqY29kZV9wdik7CnN0YXRpYyBpbnQgd19hc3luY19yZXN0X3Bvc3Qoc3RydWN0
IHNpcF9tc2cgKm1zZywgYXN5bmNfcmVzdW1lX21vZHVsZSAqKnJlc3VtZV9mLAoJCQkJCSB2b2lk
ICoqcmVzdW1lX3BhcmFtLCBjaGFyICpncF91cmwsIGNoYXIgKmdwX2JvZHksCgkJCQkJIGNoYXIg
KmdwX2N0eXBlLCBjaGFyICpib2R5X3B2LCBjaGFyICpjdHlwZV9wdiwgY2hhciAqY29kZV9wdik7
CnN0YXRpYyBpbnQgd19hc3luY19yZXN0X3B1dChzdHJ1Y3Qgc2lwX21zZyAqbXNnLCBhc3luY19y
ZXN1bWVfbW9kdWxlICoqcmVzdW1lX2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqKnJlc3VtZV9wYXJhbSwgY2hhciAqZ3BfdXJsLCBjaGFyICpncF9ib2R5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmdwX2N0eXBl
LCBjaGFyICpib2R5X3B2LCBjaGFyICpjdHlwZV9wdiwgY2hhciAqY29kZV9wdik7CgoKCnN0YXRp
YyBhY21kX2V4cG9ydF90IGFjbWRzW10gPSB7Cgl7ICJyZXN0X2dldCIsICAoYWNtZF9mdW5jdGlv
bil3X2FzeW5jX3Jlc3RfZ2V0LCAgMiwgZml4dXBfcmVzdF9nZXQgfSwKCXsgInJlc3RfZ2V0Iiwg
IChhY21kX2Z1bmN0aW9uKXdfYXN5bmNfcmVzdF9nZXQsICAzLCBmaXh1cF9yZXN0X2dldCB9LAoJ
eyAicmVzdF9nZXQiLCAgKGFjbWRfZnVuY3Rpb24pd19hc3luY19yZXN0X2dldCwgIDQsIGZpeHVw
X3Jlc3RfZ2V0IH0sCgl7ICJyZXN0X3Bvc3QiLCAoYWNtZF9mdW5jdGlvbil3X2FzeW5jX3Jlc3Rf
cG9zdCwgNCwgZml4dXBfcmVzdF9wb3N0IH0sCgl7ICJyZXN0X3Bvc3QiLCAoYWNtZF9mdW5jdGlv
bil3X2FzeW5jX3Jlc3RfcG9zdCwgNSwgZml4dXBfcmVzdF9wb3N0IH0sCgl7ICJyZXN0X3Bvc3Qi
LCAoYWNtZF9mdW5jdGlvbil3X2FzeW5jX3Jlc3RfcG9zdCwgNiwgZml4dXBfcmVzdF9wb3N0IH0s
Cgl7ICJyZXN0X3B1dCIsICAoYWNtZF9mdW5jdGlvbil3X2FzeW5jX3Jlc3RfcHV0LCAgNCwgZml4
dXBfcmVzdF9wdXQgfSwKCXsgInJlc3RfcHV0IiwgIChhY21kX2Z1bmN0aW9uKXdfYXN5bmNfcmVz
dF9wdXQsICA1LCBmaXh1cF9yZXN0X3B1dCB9LAoJeyAicmVzdF9wdXQiLCAgKGFjbWRfZnVuY3Rp
b24pd19hc3luY19yZXN0X3B1dCwgIDYsIGZpeHVwX3Jlc3RfcHV0IH0sCgl7IDAsIDAsIDAsIDAg
fQp9OwoKLyoKICogRXhwb3J0ZWQgZnVuY3Rpb25zCiAqLwpzdGF0aWMgY21kX2V4cG9ydF90IGNt
ZHNbXSA9IHsKCXsgInJlc3RfZ2V0IiwoY21kX2Z1bmN0aW9uKXdfcmVzdF9nZXQsIDIsIGZpeHVw
X3Jlc3RfZ2V0LCAwLAoJCVJFUVVFU1RfUk9VVEV8RkFJTFVSRV9ST1VURXxCUkFOQ0hfUk9VVEV8
CgkJT05SRVBMWV9ST1VURXxTVEFSVFVQX1JPVVRFfFRJTUVSX1JPVVRFIH0sCgl7ICJyZXN0X2dl
dCIsKGNtZF9mdW5jdGlvbil3X3Jlc3RfZ2V0LCAzLCBmaXh1cF9yZXN0X2dldCwgMCwKCQlSRVFV
RVNUX1JPVVRFfE9OUkVQTFlfUk9VVEV8RkFJTFVSRV9ST1VURXxCUkFOQ0hfUk9VVEV8CgkJT05S
RVBMWV9ST1VURXxTVEFSVFVQX1JPVVRFfFRJTUVSX1JPVVRFIH0sCgl7ICJyZXN0X2dldCIsKGNt
ZF9mdW5jdGlvbil3X3Jlc3RfZ2V0LCA0LCBmaXh1cF9yZXN0X2dldCwgMCwKCQlSRVFVRVNUX1JP
VVRFfE9OUkVQTFlfUk9VVEV8RkFJTFVSRV9ST1VURXxCUkFOQ0hfUk9VVEV8CgkJT05SRVBMWV9S
T1VURXxTVEFSVFVQX1JPVVRFfFRJTUVSX1JPVVRFIH0sCgl7ICJyZXN0X3Bvc3QiLChjbWRfZnVu
Y3Rpb24pd19yZXN0X3Bvc3QsIDQsIGZpeHVwX3Jlc3RfcG9zdCwgMCwKCQlSRVFVRVNUX1JPVVRF
fE9OUkVQTFlfUk9VVEV8RkFJTFVSRV9ST1VURXxCUkFOQ0hfUk9VVEV8CgkJT05SRVBMWV9ST1VU
RXxTVEFSVFVQX1JPVVRFfFRJTUVSX1JPVVRFIH0sCgl7ICJyZXN0X3Bvc3QiLChjbWRfZnVuY3Rp
b24pd19yZXN0X3Bvc3QsIDUsIGZpeHVwX3Jlc3RfcG9zdCwgMCwKCQlSRVFVRVNUX1JPVVRFfE9O
UkVQTFlfUk9VVEV8RkFJTFVSRV9ST1VURXxCUkFOQ0hfUk9VVEV8CgkJT05SRVBMWV9ST1VURXxT
VEFSVFVQX1JPVVRFfFRJTUVSX1JPVVRFIH0sCgl7ICJyZXN0X3Bvc3QiLChjbWRfZnVuY3Rpb24p
d19yZXN0X3Bvc3QsIDYsIGZpeHVwX3Jlc3RfcG9zdCwgMCwKCQlSRVFVRVNUX1JPVVRFfE9OUkVQ
TFlfUk9VVEV8RkFJTFVSRV9ST1VURXxCUkFOQ0hfUk9VVEV8CgkJT05SRVBMWV9ST1VURXxTVEFS
VFVQX1JPVVRFfFRJTUVSX1JPVVRFIH0sCgkgeyAicmVzdF9wdXQiLChjbWRfZnVuY3Rpb24pd19y
ZXN0X3B1dCwgNCwgZml4dXBfcmVzdF9wdXQsIDAsCiAgICAgICAgICAgICAgICBSRVFVRVNUX1JP
VVRFfE9OUkVQTFlfUk9VVEV8RkFJTFVSRV9ST1VURXxCUkFOQ0hfUk9VVEV8CiAgICAgICAgICAg
ICAgICBPTlJFUExZX1JPVVRFfFNUQVJUVVBfUk9VVEV8VElNRVJfUk9VVEUgfSwKICAgICAgICB7
ICJyZXN0X3B1dCIsKGNtZF9mdW5jdGlvbil3X3Jlc3RfcHV0LCA1LCBmaXh1cF9yZXN0X3B1dCwg
MCwKICAgICAgICAgICAgICAgIFJFUVVFU1RfUk9VVEV8T05SRVBMWV9ST1VURXxGQUlMVVJFX1JP
VVRFfEJSQU5DSF9ST1VURXwKICAgICAgICAgICAgICAgIE9OUkVQTFlfUk9VVEV8U1RBUlRVUF9S
T1VURXxUSU1FUl9ST1VURSB9LAogICAgICAgIHsgInJlc3RfcHV0IiwoY21kX2Z1bmN0aW9uKXdf
cmVzdF9wdXQsIDYsIGZpeHVwX3Jlc3RfcHV0LCAwLAogICAgICAgICAgICAgICAgUkVRVUVTVF9S
T1VURXxPTlJFUExZX1JPVVRFfEZBSUxVUkVfUk9VVEV8QlJBTkNIX1JPVVRFfAogICAgICAgICAg
ICAgICAgT05SRVBMWV9ST1VURXxTVEFSVFVQX1JPVVRFfFRJTUVSX1JPVVRFIH0sCgoJeyAwLCAw
LCAwLCAwLCAwLCAwIH0KfTsKCgovKgogKiBFeHBvcnRlZCBwYXJhbWV0ZXJzCiAqLwpzdGF0aWMg
cGFyYW1fZXhwb3J0X3QgcGFyYW1zW10gPSB7Cgl7ICJjb25uZWN0aW9uX3RpbWVvdXQiLAlJTlRf
UEFSQU0sICZjb25uZWN0aW9uX3RpbWVvdXQJfSwKCXsgImN1cmxfdGltZW91dCIsCQlJTlRfUEFS
QU0sICZjdXJsX3RpbWVvdXQJCX0sCgl7ICJzc2xfY2FwYXRoIiwJCQlTVFJfUEFSQU0sICZzc2xf
Y2FwYXRoCQkJfSwKCXsgInNzbF92ZXJpZnlwZWVyIiwJCUlOVF9QQVJBTSwgJnNzbF92ZXJpZnlw
ZWVyCQl9LAoJeyAic3NsX3ZlcmlmeWhvc3QiLAkJSU5UX1BBUkFNLCAmc3NsX3ZlcmlmeWhvc3QJ
CX0sCgl7IDAsIDAsIDAgfQp9OwoKCi8qCiAqIE1vZHVsZSBwYXJhbWV0ZXIgdmFyaWFibGVzCiAq
LwpzdHJ1Y3QgbW9kdWxlX2V4cG9ydHMgZXhwb3J0cyA9IHsKCSJyZXN0X2NsaWVudCIsCglNT0Rf
VFlQRV9ERUZBVUxULC8qIGNsYXNzIG9mIHRoaXMgbW9kdWxlICovCglNT0RVTEVfVkVSU0lPTiwg
IC8qIG1vZHVsZSB2ZXJzaW9uICovCglERUZBVUxUX0RMRkxBR1MsIC8qIGRsb3BlbiBmbGFncyAq
LwoJTlVMTCwgICAgICAgICAgICAvKiBPcGVuU0lQUyBtb2R1bGUgZGVwZW5kZW5jaWVzICovCglj
bWRzLCAgICAgLyogRXhwb3J0ZWQgZnVuY3Rpb25zICovCglhY21kcywgICAgLyogRXhwb3J0ZWQg
YXN5bmMgZnVuY3Rpb25zICovCglwYXJhbXMsICAgLyogRXhwb3J0ZWQgcGFyYW1ldGVycyAqLwoJ
TlVMTCwgICAgIC8qIGV4cG9ydGVkIHN0YXRpc3RpY3MgKi8KCU5VTEwsICAgICAvKiBleHBvcnRl
ZCBNSSBmdW5jdGlvbnMgKi8KCU5VTEwsICAgICAvKiBleHBvcnRlZCBwc2V1ZG8tdmFyaWFibGVz
ICovCglOVUxMLCAgICAgLyogZXh0cmEgcHJvY2Vzc2VzICovCgltb2RfaW5pdCwgLyogbW9kdWxl
IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uICovCglOVUxMLCAgICAgLyogcmVzcG9uc2UgZnVuY3Rp
b24qLwoJbW9kX2Rlc3Ryb3ksCgljaGlsZF9pbml0LC8qIHBlci1jaGlsZCBpbml0IGZ1bmN0aW9u
ICovCn07CgpzdGF0aWMgdm9pZCAqb3NpcHNfbWFsbG9jKHNpemVfdCBzaXplKQp7Cgl2b2lkICpw
ID0gcGtnX21hbGxvYyhzaXplKTsKCglyZXR1cm4gcDsKfQoKc3RhdGljIHZvaWQgKm9zaXBzX2Nh
bGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKQp7Cgl2b2lkICpwID0gcGtnX21hbGxvYyhu
bWVtYiAqIHNpemUpOwoJaWYgKHApCgkJbWVtc2V0KHAsICdcMCcsIG5tZW1iICogc2l6ZSk7CgoJ
cmV0dXJuIHA7Cn0KCnN0YXRpYyB2b2lkICpvc2lwc19yZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90
IHNpemUpCnsKCXZvaWQgKnAgPSBwa2dfcmVhbGxvYyhwdHIsIHNpemUpOwoKCXJldHVybiBwOwp9
CgpzdGF0aWMgY2hhciAqb3NpcHNfc3RyZHVwKGNvbnN0IGNoYXIgKmNwKQp7CgljaGFyICpydmFs
OwoJaW50IGxlbjsKCglsZW4gPSBzdHJsZW4oY3ApICsgMTsKCXJ2YWwgPSBwa2dfbWFsbG9jKGxl
bik7CglpZiAoIXJ2YWwpCgkJcmV0dXJuIE5VTEw7CgoJbWVtY3B5KHJ2YWwsIGNwLCBsZW4pOwoJ
cmV0dXJuIHJ2YWw7Cn0KCnN0YXRpYyB2b2lkIG9zaXBzX2ZyZWUodm9pZCAqcHRyKQp7CglpZiAo
cHRyKQoJCXBrZ19mcmVlKHB0cik7Cn0KCnN0YXRpYyBpbnQgbW9kX2luaXQodm9pZCkKewoJTE1f
REJHKCJJbml0aWFsaXppbmcuLi5cbiIpOwoKCWNvbm5lY3Rpb25fdGltZW91dF9tcyA9IGNvbm5l
Y3Rpb25fdGltZW91dCAqIDEwMDBMOwoKCWN1cmxfZ2xvYmFsX2luaXRfbWVtKENVUkxfR0xPQkFM
X0FMTCwKCQkJCQkJIG9zaXBzX21hbGxvYywKCQkJCQkJIG9zaXBzX2ZyZWUsCgkJCQkJCSBvc2lw
c19yZWFsbG9jLAoJCQkJCQkgb3NpcHNfc3RyZHVwLAoJCQkJCQkgb3NpcHNfY2FsbG9jKTsKCglt
dWx0aV9oYW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsKCglMTV9JTkZPKCJNb2R1bGUgaW5pdGlh
bGl6ZWQhXG4iKTsKCglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBjaGlsZF9pbml0KGludCByYW5r
KQp7CglpZiAocmFuayA8PSBQUk9DX01BSU4pCgkJcmV0dXJuIDA7CgoJbXVsdGlfaGFuZGxlID0g
Y3VybF9tdWx0aV9pbml0KCk7CglpZiAoIW11bHRpX2hhbmRsZSkgewoJCUxNX0VSUigiZmFpbGVk
IHRvIGluaXQgQ1VSTE0gaGFuZGxlXG4iKTsKCQlyZXR1cm4gLTE7Cgl9CgoJcmV0dXJuIDA7Cn0K
CnN0YXRpYyB2b2lkIG1vZF9kZXN0cm95KHZvaWQpCnsKCWN1cmxfZ2xvYmFsX2NsZWFudXAoKTsK
fQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogRml4dXAgZnVuY3Rpb25zICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCgpzdGF0aWMgaW50IGZpeHVwX3Jlc3RfcHV0KHZvaWQg
KipwYXJhbSwgaW50IHBhcmFtX25vKQp7CiAgICAgICAgc3dpdGNoIChwYXJhbV9ubykgewogICAg
ICAgIGNhc2UgMToKICAgICAgICBjYXNlIDI6CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAg
ICAgcmV0dXJuIGZpeHVwX3NwdmUocGFyYW0pOwogICAgICAgIGNhc2UgNDoKICAgICAgICBjYXNl
IDU6CiAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgcmV0dXJuIGZpeHVwX3B2YXIocGFy
YW0pOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgTE1fRVJSKCJUb28gbWFueSBw
YXJhbWV0ZXJzIVxuIik7CiAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQp9CgoK
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogTW9kdWxlIGZ1bmN0aW9ucyAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwoKCnN0YXRpYyBpbnQgd19yZXN0X3B1dChzdHJ1Y3Qgc2lw
X21zZyAqbXNnLCBjaGFyICpncF91cmwsIGNoYXIgKmdwX2JvZHksCiAgICAgICAgICAgICAgICAg
ICBjaGFyICpncF9jdHlwZSwgY2hhciAqYm9keV9wdiwgY2hhciAqY3R5cGVfcHYsIGNoYXIgKmNv
ZGVfcHYpCnsKICAgICAgICBzdHIgdXJsLCBib2R5LCBjdHlwZSA9IHsgTlVMTCwgMCB9OwoKICAg
ICAgICBpZiAoZml4dXBfZ2V0X3N2YWx1ZShtc2csIChncGFyYW1fcClncF91cmwsICZ1cmwpICE9
IDApIHsKICAgICAgICAgICAgICAgIExNX0VSUigiSW52YWxpZCBIVFRQIFVSTCBwc2V1ZG8gdmFy
aWFibGUhXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAg
IGlmIChmaXh1cF9nZXRfc3ZhbHVlKG1zZywgKGdwYXJhbV9wKWdwX2JvZHksICZib2R5KSAhPSAw
KSB7CiAgICAgICAgICAgICAgICBMTV9FUlIoIkludmFsaWQgSFRUUCBQT1NUIGJvZHkgcHNldWRv
IHZhcmlhYmxlIVxuIik7CiAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQoKICAg
ICAgICBpZiAoZ3BfY3R5cGUgJiYgZml4dXBfZ2V0X3N2YWx1ZShtc2csIChncGFyYW1fcClncF9j
dHlwZSwgJmN0eXBlKSAhPSAwKSB7CiAgICAgICAgICAgICAgICBMTV9FUlIoIkludmFsaWQgSFRU
UCBQT1NUIGNvbnRlbnQgdHlwZSBwc2V1ZG8gdmFyaWFibGUhXG4iKTsKICAgICAgICAgICAgICAg
IHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXN0X3B1dF9tZXRob2QobXNn
LCB1cmwucywgYm9keS5zLCBjdHlwZS5zLCAocHZfc3BlY19wKWJvZHlfcHYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHB2X3NwZWNfcCljdHlwZV9wdiwgKHB2X3NwZWNfcCljb2Rl
X3B2KTsKfQoKCnN0YXRpYyB2b2lkIHNldF9vdXRwdXRfcHZfcGFyYW1zKHN0cnVjdCBzaXBfbXNn
ICptc2csIHN0ciAqYm9keV9pbiwgcHZfc3BlY19wIGJvZHlfcHYsIHN0ciAqY3R5cGVfaW4sCgkJ
CQkJCQkJIHB2X3NwZWNfcCBjdHlwZV9wdiwgQ1VSTCAqaGFuZGxlLCBwdl9zcGVjX3AgY29kZV9w
dikKewoJcHZfdmFsdWVfdCB2YWw7Cglsb25nIGh0dHBfcmM7CglDVVJMY29kZSByYzsKCgl2YWwu
ZmxhZ3MgPSBQVl9WQUxfU1RSOwoJdmFsLnJzID0gKmJvZHlfaW47CgoJaWYgKHB2X3NldF92YWx1
ZShtc2csIChwdl9zcGVjX3ApYm9keV9wdiwgMCwgJnZhbCkgIT0gMCkKCQlMTV9FUlIoImZhaWxl
ZCB0byBzZXQgb3V0cHV0IGJvZHkgcHZcbiIpOwoKCWlmIChjdHlwZV9wdikgewoJCXZhbC5ycyA9
ICpjdHlwZV9pbjsKCQlpZiAocHZfc2V0X3ZhbHVlKG1zZywgKHB2X3NwZWNfcCljdHlwZV9wdiwg
MCwgJnZhbCkgIT0gMCkKCQkJTE1fRVJSKCJmYWlsZWQgdG8gc2V0IG91dHB1dCBjdHlwZSBwdlxu
Iik7Cgl9CgoJaWYgKGNvZGVfcHYpIHsKCQlyYyA9IGN1cmxfZWFzeV9nZXRpbmZvKGhhbmRsZSwg
Q1VSTElORk9fUkVTUE9OU0VfQ09ERSwgJmh0dHBfcmMpOwoJCWlmIChyYyAhPSBDVVJMRV9PSykK
CQkJTE1fRVJSKCJjdXJsX2Vhc3lfZ2V0aW5mbzogJXNcbiIsIGN1cmxfZWFzeV9zdHJlcnJvcihy
YykpOwoKCQlMTV9EQkcoIkxhc3QgcmVzcG9uc2UgY29kZTogJWxkXG4iLCBodHRwX3JjKTsKCgkJ
dmFsLmZsYWdzID0gUFZfVkFMX0lOVHxQVl9UWVBFX0lOVDsKCQl2YWwucmkgPSAoaW50KWh0dHBf
cmM7CgkJaWYgKHB2X3NldF92YWx1ZShtc2csIChwdl9zcGVjX3ApY29kZV9wdiwgMCwgJnZhbCkg
IT0gMCkKCQkJTE1fRVJSKCJmYWlsZWQgdG8gc2V0IG91dHB1dCBjb2RlIHB2XG4iKTsKCX0KfQoK
CgpzdGF0aWMgaW50IHdfYXN5bmNfcmVzdF9wdXQoc3RydWN0IHNpcF9tc2cgKm1zZywgYXN5bmNf
cmVzdW1lX21vZHVsZSAqKnJlc3VtZV9mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKipyZXN1bWVfcGFyYW0sIGNoYXIgKmdwX3VybCwgY2hhciAqZ3BfYm9k
eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpncF9jdHlw
ZSwgY2hhciAqYm9keV9wdiwgY2hhciAqY3R5cGVfcHYsIGNoYXIgKmNvZGVfcHYpCnsKICAgICAg
ICByZXN0X2FzeW5jX3BhcmFtICpwYXJhbTsKICAgICAgICBzdHIgdXJsLCBib2R5LCBjdHlwZSA9
IHsgTlVMTCwgMCB9OwogICAgICAgIGludCByZWFkX2ZkOwoKICAgICAgICBpZiAoZml4dXBfZ2V0
X3N2YWx1ZShtc2csIChncGFyYW1fcClncF91cmwsICZ1cmwpICE9IDApIHsKICAgICAgICAgICAg
ICAgIExNX0VSUigiSW52YWxpZCBIVFRQIFVSTCBwc2V1ZG8gdmFyaWFibGUhXG4iKTsKICAgICAg
ICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIGlmIChmaXh1cF9nZXRfc3Zh
bHVlKG1zZywgKGdwYXJhbV9wKWdwX2JvZHksICZib2R5KSAhPSAwKSB7CiAgICAgICAgICAgICAg
ICBMTV9FUlIoIkludmFsaWQgSFRUUCBQT1NUIGJvZHkgcHNldWRvIHZhcmlhYmxlIVxuIik7CiAg
ICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQoKICAgICAgICBpZiAoZ3BfY3R5cGUg
JiYgZml4dXBfZ2V0X3N2YWx1ZShtc2csIChncGFyYW1fcClncF9jdHlwZSwgJmN0eXBlKSAhPSAw
KSB7CiAgICAgICAgICAgICAgICBMTV9FUlIoIkludmFsaWQgSFRUUCBQT1NUIGNvbnRlbnQgdHlw
ZSBwc2V1ZG8gdmFyaWFibGUhXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAg
ICB9CgogICAgICAgIExNX0RCRygiYXN5bmMgcmVzdCBwdXQgJyUuKnMnICVwICVwICVwXG4iLCB1
cmwubGVuLCB1cmwucywgYm9keV9wdiwgY3R5cGVfcHYsIGNvZGVfcHYpOwoJIHBhcmFtID0gcGtn
X21hbGxvYyhzaXplb2YgKnBhcmFtKTsKICAgICAgICBpZiAoIXBhcmFtKSB7CiAgICAgICAgICAg
ICAgICBMTV9FUlIoIm5vIG1vcmUgc2htXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsK
ICAgICAgICB9CiAgICAgICAgbWVtc2V0KHBhcmFtLCAnXDAnLCBzaXplb2YgKnBhcmFtKTsKCiAg
ICAgICAgcmVhZF9mZCA9IHN0YXJ0X2FzeW5jX2h0dHBfcmVxKG1zZywgUkVTVF9DTElFTlRfUFVU
LCB1cmwucywgYm9keS5zLCBjdHlwZS5zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZwYXJhbS0+aGFuZGxlLCAmcGFyYW0tPmJvZHksIGN0eXBlX3B2ID8gJnBhcmFtLT5jdHlwZSA6
IE5VTEwpOwoKICAgICAgICAvKiBlcnJvciBvY2N1cnJlZDsgbm8gdHJhbnNmZXIgZG9uZSAqLwog
ICAgICAgIGlmIChyZWFkX2ZkID09IEFTWU5DX05PX0lPKSB7CiAgICAgICAgICAgICAgICAqcmVz
dW1lX3BhcmFtID0gTlVMTDsKICAgICAgICAgICAgICAgICpyZXN1bWVfZiA9IE5VTEw7CiAgICAg
ICAgICAgICAgICAvKiBrZWVwIGRlZmF1bHQgYXN5bmMgc3RhdHVzIG9mIE5PX0lPICovCiAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIC8qIG5vIG5lZWQgZm9yIGFzeW5jIC0gdHJh
bnNmZXIgYWxyZWFkeSBjb21wbGV0ZWQhICovCiAgICAgICAgfSBlbHNlIGlmIChyZWFkX2ZkID09
IEFTWU5DX1NZTkMpIHsKICAgICAgICAgICAgICAgIHNldF9vdXRwdXRfcHZfcGFyYW1zKG1zZywg
JnBhcmFtLT5ib2R5LCAocHZfc3BlY19wKWJvZHlfcHYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbS0+Y3R5cGUsIChwdl9zcGVj
X3ApY3R5cGVfcHYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtLT5oYW5kbGUsIChwdl9zcGVjX3ApY29kZV9wdik7CgogICAgICAg
ICAgICAgICAgcGtnX2ZyZWUocGFyYW0tPmJvZHkucyk7CiAgICAgICAgICAgICAgICBpZiAoY3R5
cGVfcHYgJiYgcGFyYW0tPmN0eXBlLnMpCiAgICAgICAgICAgICAgICAgICAgICAgIHBrZ19mcmVl
KHBhcmFtLT5jdHlwZS5zKTsKICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKHBhcmFt
LT5oYW5kbGUpOwogICAgICAgICAgICAgICAgcGtnX2ZyZWUocGFyYW0pOwoKICAgICAgICAgICAg
ICAgIHJldHVybiBBU1lOQ19TWU5DOwogICAgICAgIH0KCiAgICAgICAgKnJlc3VtZV9mID0gcmVz
dW1lX2FzeW5jX2h0dHBfcmVxOwoKICAgICAgICBwYXJhbS0+bWV0aG9kID0gUkVTVF9DTElFTlRf
UFVUOwogICAgICAgIHBhcmFtLT5ib2R5X3B2ID0gKHB2X3NwZWNfcClib2R5X3B2OwogICAgICAg
IHBhcmFtLT5jdHlwZV9wdiA9IChwdl9zcGVjX3ApY3R5cGVfcHY7CgoJcGFyYW0tPmNvZGVfcHYg
PSAocHZfc3BlY19wKWNvZGVfcHY7CiAgICAgICAgKnJlc3VtZV9wYXJhbSA9IHBhcmFtOwogICAg
ICAgIC8qIGFzeW5jIHN0YXJ0ZWQgd2l0aCBzdWNjZXNzICovCiAgICAgICAgYXN5bmNfc3RhdHVz
ID0gcmVhZF9mZDsKCiAgICAgICAgcmV0dXJuIDE7Cn0KCgo=

--_006_b87dda888e6f43a5a6cf143481c27b6bCOPDCEX28cablecomcastco_
Content-Type: text/plain; name="rest_methods.c"
Content-Description: rest_methods.c
Content-Disposition: attachment; filename="rest_methods.c"; size=15158;
	creation-date="Mon, 15 Aug 2016 20:27:57 GMT";
	modification-date="Tue, 16 Aug 2016 14:19:38 GMT"
Content-Transfer-Encoding: base64

LyoKICogQ29weXJpZ2h0IChDKSAyMDEzIE9wZW5TSVBTIFNvbHV0aW9ucwogKgogKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiBvcGVuc2lwcywgYSBmcmVlIFNJUCBzZXJ2ZXIuCiAqCiAqIG9wZW5zaXBz
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbgogKgogKiBvcGVuc2lwcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSAgVVNBCiAqCiAqIEhpc3Rvcnk6CiAqIC0tLS0tLS0KICogMjAxMy0wMi0yODogQ3Jl
YXRlZCAoTGl2aXUpCiAqLwoKI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3RkaW8uaD4K
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8Y3VybC9jdXJsLmg+CgojaW5jbHVkZSAiLi4v
Li4vbWVtL3NobV9tZW0uaCIKI2luY2x1ZGUgIi4uLy4uL2FzeW5jLmgiCiNpbmNsdWRlICJyZXN0
X21ldGhvZHMuaCIKI2luY2x1ZGUgInJlc3RfY2IuaCIKCnN0YXRpYyBjaGFyIHByaW50X2J1ZmZb
TUFYX0NPTlRFTlRfVFlQRV9MRU5dOwoKQ1VSTE0gKm11bHRpX2hhbmRsZTsKCi8qIHNpbXVsdGFu
ZW91cyBvbmdvaW5nIHRyYW5zZmVycyB3aXRoaW4gdGhpcyBwcm9jZXNzICovCnN0YXRpYyBpbnQg
dHJhbnNmZXJzOwpzdGF0aWMgaW50IHJlYWRfZmRzW0ZEX1NFVFNJWkVdOwoKLyogbGliY3VybCdz
IHJlcG9ydGVkIHJ1bm5pbmcgaGFuZGxlcyAqLwpzdGF0aWMgaW50IHJ1bm5pbmdfaGFuZGxlczsK
CnN0YXRpYyBsb25nIHNsZWVwX29uX2JhZF90aW1lb3V0ID0gNTAwOyAvKiBtcyAqLwoKCiNkZWZp
bmUgY2xlYW5faGVhZGVyX2xpc3QobGlzdCkgXAoJZG8geyBcCgkJaWYgKGxpc3QpIHsgXAoJCQlj
dXJsX3NsaXN0X2ZyZWVfYWxsKGxpc3QpOyBcCgkJCWxpc3QgPSBOVUxMOyBcCgkJfSBcCgl9IHdo
aWxlICgwKQoKI2RlZmluZSB3X2N1cmxfZWFzeV9zZXRvcHQoaCwgb3B0LCB2YWx1ZSkgXAoJZG8g
eyBcCgkJcmMgPSBjdXJsX2Vhc3lfc2V0b3B0KGgsIG9wdCwgdmFsdWUpOyBcCgkJaWYgKHJjICE9
IENVUkxFX09LKSB7IFwKCQkJTE1fRVJSKCJjdXJsX2Vhc3lfc2V0b3B0KCVkKTogKCVzKVxuIiwg
b3B0LCBjdXJsX2Vhc3lfc3RyZXJyb3IocmMpKTsgXAoJCQlnb3RvIGNsZWFudXA7IFwKCQl9IFwK
CX0gd2hpbGUgKDApCgpzdGF0aWMgaW5saW5lIGNoYXIgaXNfbmV3X3RyYW5zZmVyKGludCBmZCkK
ewoJaW50IGl0OwoKCWZvciAoaXQgPSAwOyBpdCA8IHRyYW5zZmVyczsgaXQrKykgewoJCWlmIChm
ZCA9PSByZWFkX2Zkc1tpdF0pCgkJCXJldHVybiAwOwoJfQoKCXJldHVybiAxOwp9CgpzdGF0aWMg
aW5saW5lIHZvaWQgYWRkX3RyYW5zZmVyKGludCBmZCkKewoJcmVhZF9mZHNbdHJhbnNmZXJzKytd
ID0gZmQ7Cn0KCnN0YXRpYyBpbmxpbmUgY2hhciBkZWxfdHJhbnNmZXIoaW50IGZkKQp7CglpbnQg
aXQ7CgoJTE1fREJHKCJkZWwgZmQgJWRcbiIsIGZkKTsKCglmb3IgKGl0ID0gMDsgaXQgPCB0cmFu
c2ZlcnM7IGl0KyspIHsKCQlpZiAoZmQgPT0gcmVhZF9mZHNbaXRdKSB7CgkJCXRyYW5zZmVycy0t
OwoJCQlmb3IgKDsgaXQgPCB0cmFuc2ZlcnM7IGl0KyspCgkJCQlyZWFkX2Zkc1tpdF0gPSByZWFk
X2Zkc1tpdCArIDFdOwoKCQkJcmV0dXJuIDA7CgkJfQoJfQoKCXJldHVybiAtMTsKfQoKaW50IGdl
bmVyYXRlUmFuZG9tTnVtYmVyKCkKewogICBzcmFuZCAoIHRpbWUoTlVMTCkgKTsKICAgaW50IHJh
bmRvbV9udW1iZXIgPSByYW5kKCk7CiAgIGludCByYW5kX2NhcHBlZCA9IHJhbmRvbV9udW1iZXIg
JSAxMDAwOwogICAvL0xNX0lORk8oIlJhbmRvbSBOdW1iZXIgR2VuZXJhdGVkOiAlZFxuIiwgcmFu
ZF9jYXBwZWQpOwogICByZXR1cm4gcmFuZF9jYXBwZWQ7Cn0KCgovKioKICogc3RhcnRfYXN5bmNf
aHR0cF9yZXEgLSBwZXJmb3JtcyBhbiBIVFRQIHJlcXVlc3QsIHN0b3JlcyByZXN1bHRzIGluIHB2
YXJzCiAqCQktIFRDUCBjb25uZWN0IHBoYXNlIGlzIHN5bmNocm9ub3VzLCBkdWUgdG8gbGliY3Vy
bCBsaW1pdGF0aW9ucwogKgkJLSBUQ1AgcmVhZCBwaGFzZSBpcyBhc3luY2hyb25vdXMsIHRoYW5r
cyB0byB0aGUgbGliY3VybCBtdWx0aSBpbnRlcmZhY2UKICoKICogQG1zZzoJCXNpcCBtZXNzYWdl
IHN0cnVjdAogKiBAbWV0aG9kOgkJSFRUUCB2ZXJiCiAqIEB1cmw6CQlIVFRQIFVSTCB0byBiZSBx
dWVyaWVkCiAqIEByZXFfYm9keToJQm9keSBvZiB0aGUgcmVxdWVzdCAoTlVMTCBpZiBub3QgbmVl
ZGVkKQogKiBAcmVxX2N0eXBlOglWYWx1ZSBmb3IgdGhlICJDb250ZW50LVR5cGU6ICIgaGVhZGVy
IG9mIHRoZSByZXF1ZXN0IChzYW1lIGFzIF4pCiAqIEBvdXRfaGFuZGxlOiBDVVJMIGVhc3kgaGFu
ZGxlIHVzZWQgdG8gcGVyZm9ybSB0aGUgdHJhbnNmZXIKICogQGJvZHk6CSAgICByZXBseSBib2R5
OyBncmFkdWFsbHkgcmVhbGxvY2F0ZWQgYXMgZGF0YSBhcnJpdmVzCiAqIEBjdHlwZToJICAgIHdp
bGwgZXZlbnR1YWxseSBob2xkIHRoZSBsYXN0ICJDb250ZW50LVR5cGUiIGhlYWRlciBvZiB0aGUg
cmVwbHkKICovCmludCBzdGFydF9hc3luY19odHRwX3JlcShzdHJ1Y3Qgc2lwX21zZyAqbXNnLCBl
bnVtIHJlc3RfY2xpZW50X21ldGhvZCBtZXRob2QsCgkJCQkJICAgICBjaGFyICp1cmwsIGNoYXIg
KnJlcV9ib2R5LCBjaGFyICpyZXFfY3R5cGUsCgkJCQkJICAgICBDVVJMICoqb3V0X2hhbmRsZSwg
c3RyICpib2R5LCBzdHIgKmN0eXBlKQp7CglDVVJMICpoYW5kbGU7CglDVVJMY29kZSByYzsKCUNV
UkxNY29kZSBtcmM7CglzdHJ1Y3QgY3VybF9zbGlzdCAqbGlzdCA9IE5VTEw7CglmZF9zZXQgcnNl
dCwgd3NldCwgZXNldDsKCWludCBtYXhfZmQsIGZkLCBpOwoJbG9uZyBidXN5X3dhaXQsIHRpbWVv
dXQ7Cglsb25nIHJldHJ5X3RpbWUsIGNoZWNrX3RpbWUgPSA1OyAvKiA1bXMgbG9vcGluZyB0aW1l
ICovCglpbnQgbXNnc19pbl9xdWV1ZTsKCUNVUkxNc2cgKmNtc2c7CgoJaWYgKHRyYW5zZmVycyA9
PSBGRF9TRVRTSVpFKSB7CgkJTE1fRVJSKCJ0b28gbWFueSBvbmdvaW5nIHRyYW5mZXJzOiAlZFxu
IiwgRkRfU0VUU0laRSk7CgkJY2xlYW5faGVhZGVyX2xpc3QobGlzdCk7CgkJcmV0dXJuIEFTWU5D
X05PX0lPOwoJfQoKCWhhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7CglpZiAoIWhhbmRsZSkgewoJ
CUxNX0VSUigiSW5pdCBjdXJsIGhhbmRsZSBmYWlsZWQhXG4iKTsKCQljbGVhbl9oZWFkZXJfbGlz
dChsaXN0KTsKCQlyZXR1cm4gQVNZTkNfTk9fSU87Cgl9CgoJd19jdXJsX2Vhc3lfc2V0b3B0KGhh
bmRsZSwgQ1VSTE9QVF9VUkwsIHVybCk7CgoJc3dpdGNoIChtZXRob2QpIHsKCWNhc2UgUkVTVF9D
TElFTlRfUE9TVDoKCQl3X2N1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1BPU1QsIDEp
OwoJCXdfY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfUE9TVEZJRUxEUywgcmVxX2Jv
ZHkpOwoKCQlpZiAocmVxX2N0eXBlKSB7CgkJCXNwcmludGYocHJpbnRfYnVmZiwgIkNvbnRlbnQt
VHlwZTogJXMiLCByZXFfY3R5cGUpOwoJCQlsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQobGlzdCwg
cHJpbnRfYnVmZik7CgkJCXdfY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfSFRUUEhF
QURFUiwgbGlzdCk7CgkJfQoJCWJyZWFrOwoJY2FzZSBSRVNUX0NMSUVOVF9QVVQ6CiAgICAgICAg
ICAgICAgICB3X2N1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1BVVCwgMSk7CiAgICAg
ICAgICAgICAgICB3X2N1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1BPU1RGSUVMRFMs
IHJlcV9ib2R5KTsKCiAgICAgICAgICAgICAgICBpZiAocmVxX2N0eXBlKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHNwcmludGYocHJpbnRfYnVmZiwgIkNvbnRlbnQtVHlwZTogJXMiLCByZXFf
Y3R5cGUpOwogICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQo
bGlzdCwgcHJpbnRfYnVmZik7CiAgICAgICAgICAgICAgICAgICAgICAgIHdfY3VybF9lYXN5X3Nl
dG9wdChoYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgbGlzdCk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICBicmVhazsKCWNhc2UgUkVTVF9DTElFTlRfR0VUOgoJCWJyZWFrOwoK
CWRlZmF1bHQ6CgkJTE1fRVJSKCJVbnN1cHBvcnRlZCByZXN0X2NsaWVudF9tZXRob2Q6ICVkLCBk
ZWZhdWx0aW5nIHRvIEdFVFxuIiwgbWV0aG9kKTsKCX0KCgl3X2N1cmxfZWFzeV9zZXRvcHQoaGFu
ZGxlLCBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCBjb25uZWN0aW9uX3RpbWVvdXQpOwoJd19jdXJs
X2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9USU1FT1VULCBjdXJsX3RpbWVvdXQpOwoKCXdf
Y3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfVkVSQk9TRSwgMSk7Cgl3X2N1cmxfZWFz
eV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKCXdfY3VybF9lYXN5X3Nl
dG9wdChoYW5kbGUsIENVUkxPUFRfU1RERVJSLCBzdGRvdXQpOwoKCXdfY3VybF9lYXN5X3NldG9w
dChoYW5kbGUsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVfZnVuYyk7Cgl3X2N1cmxfZWFz
eV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1dSSVRFREFUQSwgYm9keSk7CgoJaWYgKGN0eXBlKSB7
CgkJd19jdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9IRUFERVJGVU5DVElPTiwgaGVh
ZGVyX2Z1bmMpOwoJCXdfY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfSEVBREVSREFU
QSwgY3R5cGUpOwoJfQoKCWlmIChzc2xfY2FwYXRoKQoJCXdfY3VybF9lYXN5X3NldG9wdChoYW5k
bGUsIENVUkxPUFRfQ0FQQVRILCBzc2xfY2FwYXRoKTsKCglpZiAoIXNzbF92ZXJpZnlwZWVyKQoJ
CXdfY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDBMKTsK
CglpZiAoIXNzbF92ZXJpZnlob3N0KQoJCXdfY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxP
UFRfU1NMX1ZFUklGWUhPU1QsIDBMKTsKCgljdXJsX211bHRpX2FkZF9oYW5kbGUobXVsdGlfaGFu
ZGxlLCBoYW5kbGUpOwoKCXRpbWVvdXQgPSBjb25uZWN0aW9uX3RpbWVvdXRfbXM7CgkvKiBvYnRh
aW4gYSByZWFkIGZkIGluICJjb25uZWN0aW9uX3RpbWVvdXQiIHNlY29uZHMgYXQgd29yc3QgKi8K
CWZvciAodGltZW91dCA9IGNvbm5lY3Rpb25fdGltZW91dF9tczsgdGltZW91dCA+IDA7IHRpbWVv
dXQgLT0gYnVzeV93YWl0KSB7CgkJbXJjID0gY3VybF9tdWx0aV9wZXJmb3JtKG11bHRpX2hhbmRs
ZSwgJnJ1bm5pbmdfaGFuZGxlcyk7CgkJaWYgKG1yYyAhPSBDVVJMTV9PSykgewoJCQlMTV9FUlIo
ImN1cmxfbXVsdGlfcGVyZm9ybTogJXNcbiIsIGN1cmxfbXVsdGlfc3RyZXJyb3IobXJjKSk7CgkJ
CWdvdG8gZXJyb3I7CgkJfQoKCQltcmMgPSBjdXJsX211bHRpX3RpbWVvdXQobXVsdGlfaGFuZGxl
LCAmcmV0cnlfdGltZSk7CgkJaWYgKG1yYyAhPSBDVVJMTV9PSykgewoJCQlMTV9FUlIoImN1cmxf
bXVsdGlfdGltZW91dDogJXNcbiIsIGN1cmxfbXVsdGlfc3RyZXJyb3IobXJjKSk7CgkJCWdvdG8g
ZXJyb3I7CgkJfQoKCQlpZiAocmV0cnlfdGltZSA9PSAtMSkgewoJCQlMTV9JTkZPKCJjdXJsX211
bHRpX3RpbWVvdXQoKSByZXR1cm5lZCAtMSwgcGF1c2luZyAlbGRtcy4uLlxuIiwKCQkJCQlzbGVl
cF9vbl9iYWRfdGltZW91dCk7CgkJCWJ1c3lfd2FpdCA9IHNsZWVwX29uX2JhZF90aW1lb3V0OwoJ
CQl1c2xlZXAoMTAwMFVMICogYnVzeV93YWl0KTsKCQkJY29udGludWU7CgkJfQoKCQlidXN5X3dh
aXQgPSByZXRyeV90aW1lIDwgdGltZW91dCA/IHJldHJ5X3RpbWUgOiB0aW1lb3V0OwoKCQkvKioK
CQkgKiBsaWJjdXJsIGlzIGN1cnJlbnRseSBzdHVjayBpbiBpbnRlcm5hbCBvcGVyYXRpb25zIChj
b25uZWN0KQoJCSAqICAgIHdlIGhhdmUgdG8gd2FpdCBhIGJpdCB1bnRpbCB3ZSByZWNlaXZlIGEg
cmVhZCBmZAoJCSAqLwoJCWZvciAoaSA9IDA7IGkgPCBidXN5X3dhaXQ7IGkgKz0gY2hlY2tfdGlt
ZSkgewoJCQkvKiB0cmFuc2ZlciBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcGxldGVkISEgKi8K
CQkJd2hpbGUgKChjbXNnID0gY3VybF9tdWx0aV9pbmZvX3JlYWQobXVsdGlfaGFuZGxlLCAmbXNn
c19pbl9xdWV1ZSkpKSB7CgkJCQlpZiAoY21zZy0+ZWFzeV9oYW5kbGUgPT0gaGFuZGxlICYmIGNt
c2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKCQkJCQlMTV9EQkcoImRvbmUsIG5vIG5lZWQgZm9y
IGFzeW5jIVxuIik7CgoJCQkJCWNsZWFuX2hlYWRlcl9saXN0KGxpc3QpOwoJCQkJCSpvdXRfaGFu
ZGxlID0gaGFuZGxlOwoJCQkJCXJldHVybiBBU1lOQ19TWU5DOwoJCQkJfQoJCQl9CgoJCQlGRF9a
RVJPKCZyc2V0KTsKCQkJbXJjID0gY3VybF9tdWx0aV9mZHNldChtdWx0aV9oYW5kbGUsICZyc2V0
LCAmd3NldCwgJmVzZXQsICZtYXhfZmQpOwoJCQlpZiAobXJjICE9IENVUkxNX09LKSB7CgkJCQlM
TV9FUlIoImN1cmxfbXVsdGlfZmRzZXQ6ICVzXG4iLCBjdXJsX211bHRpX3N0cmVycm9yKG1yYykp
OwoJCQkJZ290byBlcnJvcjsKCQkJfQoKCQkJaWYgKG1heF9mZCAhPSAtMSkgewoJCQkJZm9yIChm
ZCA9IDA7IGZkIDw9IG1heF9mZDsgZmQrKykgewoJCQkJCWlmIChGRF9JU1NFVChmZCwgJnJzZXQp
KSB7CgoJCQkJCQlMTV9EQkcoIiA+Pj4+Pj4+Pj4+IGZkICVkIElTU0VUKHJlYWQpXG4iLCBmZCk7
CgkJCQkJCWlmIChpc19uZXdfdHJhbnNmZXIoZmQpKSB7CgkJCQkJCQlMTV9EQkcoImFkZCBmZCB0
byByZWFkIGxpc3Q6ICVkXG4iLCBmZCk7CgkJCQkJCQlhZGRfdHJhbnNmZXIoZmQpOwoJCQkJCQkJ
Z290byBzdWNjZXNzOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQl1c2xlZXAoMTAwMFVM
ICogY2hlY2tfdGltZSk7CgkJfQoJfQoKCUxNX0VSUigidGltZW91dCB3aGlsZSBjb25uZWN0aW5n
IHRvICclcycgKCVsZCBzZWMpXG4iLCB1cmwsIGNvbm5lY3Rpb25fdGltZW91dCk7Cglnb3RvIGVy
cm9yOwoKc3VjY2VzczoKCWNsZWFuX2hlYWRlcl9saXN0KGxpc3QpOwoJKm91dF9oYW5kbGUgPSBo
YW5kbGU7CglyZXR1cm4gZmQ7CgplcnJvcjoKCW1yYyA9IGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRs
ZShtdWx0aV9oYW5kbGUsIGhhbmRsZSk7CglpZiAobXJjICE9IENVUkxNX09LKQoJCUxNX0VSUigi
Y3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlOiAlc1xuIiwgY3VybF9tdWx0aV9zdHJlcnJvcihtcmMp
KTsKCmNsZWFudXA6CgljbGVhbl9oZWFkZXJfbGlzdChsaXN0KTsKCWN1cmxfZWFzeV9jbGVhbnVw
KGhhbmRsZSk7CglyZXR1cm4gQVNZTkNfTk9fSU87Cn0KCgovKioKICogcmVzdF9wdXRfbWV0aG9k
IC0gcGVyZm9ybXMgYW4gSFRUUCBQT1NUIHJlcXVlc3QsIHN0b3JlcyByZXN1bHRzIGluIHB2YXJz
CiAqIEBtc2c6ICAgICAgICAgICAgICAgIHNpcCBtZXNzYWdlIHN0cnVjdAogKiBAdXJsOiAgICAg
ICAgICAgICAgICBIVFRQIFVSTCB0byBiZSBxdWVyaWVkCiAqIEBjdHlwZTogICAgICAgICAgICAg
IFZhbHVlIGZvciB0aGUgIkNvbnRlbnQtVHlwZTogIiBoZWFkZXIgb2YgdGhlIHJlcXVlc3QKICog
QGJvZHk6ICAgICAgICAgICAgICAgQm9keSBvZiB0aGUgcmVxdWVzdAogKiBAYm9keV9wdjogICAg
cHNldWRvIHZhciB3aGljaCB3aWxsIGhvbGQgdGhlIHJlc3VsdCBib2R5CiAqIEBjdHlwZV9wdjog
ICBwdmFyIHdoaWNoIHdpbGwgaG9sZCB0aGUgcmVzdWx0IGNvbnRlbnQgdHlwZQogKiBAY29kZV9w
djogICAgcHZhciB0byBob2xkIHRoZSBIVFRQIHJldHVybiBjb2RlCiAqLwppbnQgcmVzdF9wdXRf
bWV0aG9kKHN0cnVjdCBzaXBfbXNnICptc2csIGNoYXIgKnVybCwgY2hhciAqYm9keSwgY2hhciAq
Y3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIHB2X3NwZWNfcCBib2R5X3B2LCBwdl9zcGVjX3Ag
Y3R5cGVfcHYsIHB2X3NwZWNfcCBjb2RlX3B2KQp7CiAgICAgICAgTE1fSU5GTygiVVJMIDogJXMi
LCB1cmwpOwogICAgICAgIENVUkxjb2RlIHJjOwogICAgICAgIENVUkwgKmhhbmRsZSA9IE5VTEw7
CiAgICAgICAgbG9uZyBodHRwX3JjOwogICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0ICpsaXN0ID0g
TlVMTDsKICAgICAgICBzdHIgc3QgPSB7IDAsIDAgfTsKICAgICAgICBzdHIgcmVzX2JvZHkgPSB7
IE5VTEwsIDAgfSwgdGJvZHk7CglzdHIgZHN0X3VyaSA9IHsgMCwgMCB9OwogICAgICAgIHB2X3Zh
bHVlX3QgcHZfdmFsOwoJY2hhciByZXFib2R5WzEwMDBdID0gIiI7CiAgICAgICAgY2hhciB0ZW1w
X2J1ZmZbMTAwMF0gPSAiIjsKICAgICAgICBjaGFyIHJlc3R1cmxbMTAwMF0gPSAiIjsKICAgICAg
ICBjaGFyICpmcm9tdXJpPU5VTEwsICp0b3VyaT1OVUxMLCAqaW5zdGFuY2VJZD1OVUxMOwogICAg
ICAgIGludCByYW5kVmFsdWU9MDsKICAgICAgICBjaGFyICp0ZW1wX3N0ciA9IE5VTEw7CgoKICAg
ICAgICBoYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOwogICAgICAgIGlmICghaGFuZGxlKSB7CiAg
ICAgICAgICAgICAgICBMTV9FUlIoIkluaXQgY3VybCBoYW5kbGUgZmFpbGVkIVxuIik7CiAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQoKCWNoYXIgQm9keVsxMDAwXSA9ICIiOwog
ICAgICAgIHNwcmludGYoQm9keSwgIiVzIiwgYm9keSk7CgogICAgICAgIGNoYXIgQ3R5cGVbMTAw
MF0gPSAiIjsKICAgICAgICBzcHJpbnRmKEN0eXBlLCAiJXMiLCBjdHlwZSk7CgoKICAgICAgICBm
cm9tdXJpID0gc3RydG9rKEJvZHksICIsIik7CiAgICAgICAgdG91cmkgPSBzdHJ0b2soTlVMTCwg
IiwiKTsKICAgICAgICBpbnN0YW5jZUlkID0gc3RydG9rKE5VTEwsICIsIik7CgogICAgICAgIHRl
bXBfc3RyID0gInRyYWNlLWlkPSI7CiAgICAgICAgY2hhciAqeHRyYWNlID0gKGNoYXIqKW1hbGxv
YygxK3N0cmxlbih0ZW1wX3N0cikrc3RybGVuKGluc3RhbmNlSWQpKTsKICAgICAgICBzdHJjcHko
eHRyYWNlLHRlbXBfc3RyKTsKICAgICAgICBzdHJjYXQoeHRyYWNlLGluc3RhbmNlSWQpOwoKICAg
ICAgICBpZiAoY3R5cGUpIHsKCQlzcHJpbnRmKHRlbXBfYnVmZiwgIkNvbnRlbnQtVHlwZTogJXMi
LCBDdHlwZSk7CiAgICAgICAgICAgICAgICBsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQobGlzdCwg
dGVtcF9idWZmKTsKICAgICAgICAgICAgICAgIHNwcmludGYodGVtcF9idWZmLCAiVWlkOiAlcyIs
ICZmcm9tdXJpWzJdKTsKICAgICAgICAgICAgICAgIGxpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChs
aXN0LCB0ZW1wX2J1ZmYpOwogICAgICAgICAgICAgICAgc3ByaW50Zih0ZW1wX2J1ZmYsICJzZXJ2
aWNlSWQ6IHRlbCIpOwogICAgICAgICAgICAgICAgbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKGxp
c3QsIHRlbXBfYnVmZik7CiAgICAgICAgICAgICAgICBzcHJpbnRmKHRlbXBfYnVmZiwgImN1c3Rn
dWlkOiAlcyIsIGluc3RhbmNlSWQpOwogICAgICAgICAgICAgICAgbGlzdCA9IGN1cmxfc2xpc3Rf
YXBwZW5kKGxpc3QsIHRlbXBfYnVmZik7CiAgICAgICAgICAgICAgICByYW5kVmFsdWUgPSBnZW5l
cmF0ZVJhbmRvbU51bWJlcigpOwogICAgICAgICAgICAgICAgc3ByaW50Zih0ZW1wX2J1ZmYsICJ4
LXRyYWNraW5nLWlkOiAlZCIsIHJhbmRWYWx1ZSApOwogICAgICAgICAgICAgICAgbGlzdCA9IGN1
cmxfc2xpc3RfYXBwZW5kKGxpc3QsIHRlbXBfYnVmZik7CiAgICAgICAgICAgICAgICBzcHJpbnRm
KHRlbXBfYnVmZiwgIlgtVHJhY2U6ICVzIiwgeHRyYWNlICk7CiAgICAgICAgICAgICAgICBsaXN0
ID0gY3VybF9zbGlzdF9hcHBlbmQobGlzdCwgdGVtcF9idWZmKTsKICAgICAgICAgICAgICAgIGxp
c3QgPSBjdXJsX3NsaXN0X2FwcGVuZChsaXN0LCAieC1zZXJ2ZXItbmFtZTogUlRDR1NNIik7CiAg
ICAgICAgICAgICAgICBsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQobGlzdCwgIngtY2xpZW50LW5h
bWU6IElNUyIpOwogICAgICAgICAgICAgICAgbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKGxpc3Qs
ICJ4LXNvdXJjZS1pZDogT3BlblNJUCIpOwogICAgICAgICAgICAgICAgbGlzdCA9IGN1cmxfc2xp
c3RfYXBwZW5kKGxpc3QsICJ1c2VyLWFnZW50OiBPcGVuU0lQdjEuMTEuMyIpOwogICAgICAgICAg
ICAgICAgc3ByaW50Zih0ZW1wX2J1ZmYsICJkZXZpY2UtaWQ6ICVzIiwgaW5zdGFuY2VJZCApOwog
ICAgICAgICAgICAgICAgbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKGxpc3QsIHRlbXBfYnVmZik7
CiAgICAgICAgICAgICAgICB3X2N1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX0hUVFBI
RUFERVIsIGxpc3QpOwoKCX0KCglzcHJpbnRmKHJlc3R1cmwsICIlc3VpZD0lcyZjdXN0Z3VpZD0l
cyIsIHVybCwgJmZyb211cmlbMl0sICBpbnN0YW5jZUlkKTsKCgogICAgICAgIExNX0lORk8oIioq
ZnJvbXVyaTogJXMsIHRvdXJpOiAlcywgaW5zdGFuY2VJZDogJXMsIFh0cmFjZTogJXMsIFJFU1Qg
cmVxdWVzdCB1cmw6ICVzIiwgJmZyb211cmlbMl0sICZ0b3VyaVsyXSwgaW5zdGFuY2VJZCwgICAg
ICAgICAgICAgICB4dHJhY2UscmVzdHVybCk7CiAgICAgICAgd19jdXJsX2Vhc3lfc2V0b3B0KGhh
bmRsZSwgQ1VSTE9QVF9VUkwsIHJlc3R1cmwpOwogICAgICAgIHdfY3VybF9lYXN5X3NldG9wdCho
YW5kbGUsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgIlBVVCIpOwoKCS8qUG9wdWxhdGluZyByZXF1
ZXN0IHBheWxvYWQqLwogICAgICAgIHNwcmludGYocmVxYm9keSwgIntcInBhcnRpY2lwYW50c0lu
Zm9cIjpbXCIlc1wiXSxcImNhbGxUeXBlXCI6XCJhdWRpb1wiLFwiaW5zdGFuY2VJZFwiOlwiJXNc
IixcImZyb21VSURcIjpcIiVzXCIsXCJmcm9tVE5cIjpcIiVzXCIsXCJpc09wZW5TaXBSZXF1ZXN0
XCI6JXMsXCJkaXNwbGF5TmFtZVwiOlwiQ2FsbCBGcm9tIElNU1wiLFwiZGV2aWNlVHlwZVwiOlwi
QW5kcm9pZC9pT1MvU1RCL0lNU1wifSIsJnRvdXJpWzJdLGluc3RhbmNlSWQsJmZyb211cmlbMl0s
JmZyb211cmlbMl0sInRydWUiKTsKCiAgICAgICAgTE1fSU5GTygiKkFjdHVhbCByZXN0IHJlcXVl
c3QgcGF5bG9hZCAoSlNPTik6anNvblBheWxvYWQ9ICVzXG4iLHJlcWJvZHkpOwoKCiAgICAgICAg
d19jdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9QT1NURklFTERTLCByZXFib2R5KTsK
CSB3X2N1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCBjb25u
ZWN0aW9uX3RpbWVvdXQpOwogICAgICAgIHdfY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxP
UFRfVElNRU9VVCwgY3VybF90aW1lb3V0KTsKCiAgICAgICAgd19jdXJsX2Vhc3lfc2V0b3B0KGhh
bmRsZSwgQ1VSTE9QVF9WRVJCT1NFLCAxKTsKICAgICAgICB3X2N1cmxfZWFzeV9zZXRvcHQoaGFu
ZGxlLCBDVVJMT1BUX1NUREVSUiwgc3Rkb3V0KTsKICAgICAgICB3X2N1cmxfZWFzeV9zZXRvcHQo
aGFuZGxlLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKCiAgICAgICAgd19jdXJsX2Vhc3lfc2V0
b3B0KGhhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZV9mdW5jKTsKICAgICAgICB3
X2N1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1dSSVRFREFUQSwgJnJlc19ib2R5KTsK
CiAgICAgICAgd19jdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9IRUFERVJGVU5DVElP
TiwgaGVhZGVyX2Z1bmMpOwogICAgICAgIHdfY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxP
UFRfSEVBREVSREFUQSwgJnN0KTsKCiAgICAgICAgaWYgKHNzbF9jYXBhdGgpCiAgICAgICAgICAg
ICAgICB3X2N1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX0NBUEFUSCwgc3NsX2NhcGF0
aCk7CgogICAgICAgIGlmICghc3NsX3ZlcmlmeXBlZXIpCiAgICAgICAgICAgICAgICB3X2N1cmxf
ZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAwTCk7CgogICAgICAg
IGlmICghc3NsX3ZlcmlmeWhvc3QpCiAgICAgICAgICAgICAgICB3X2N1cmxfZWFzeV9zZXRvcHQo
aGFuZGxlLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwTCk7CgogICAgICAgIHJjID0gY3VybF9l
YXN5X3BlcmZvcm0oaGFuZGxlKTsKICAgICAgICBjbGVhbl9oZWFkZXJfbGlzdChsaXN0KTsKCiAg
ICAgICAgaWYgKGNvZGVfcHYpIHsKICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGhh
bmRsZSwgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSwgJmh0dHBfcmMpOwogICAgICAgICAgICAgICAg
TE1fREJHKCJMYXN0IHJlc3BvbnNlIGNvZGU6ICVsZFxuIiwgaHR0cF9yYyk7CgogICAgICAgICAg
ICAgICAgcHZfdmFsLmZsYWdzID0gUFZfVkFMX0lOVHxQVl9UWVBFX0lOVDsKICAgICAgICAgICAg
ICAgIHB2X3ZhbC5yaSA9IChpbnQpaHR0cF9yYzsKCiAgICAgICAgICAgICAgICBpZiAocHZfc2V0
X3ZhbHVlKG1zZywgY29kZV9wdiwgMCwgJnB2X3ZhbCkgIT0gMCkgewogICAgICAgICAgICAgICAg
ICAgICAgICBMTV9FUlIoIlNldCBjb2RlIHB2IHZhbHVlIGZhaWxlZCFcbiIpOwogICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoK
CWlmIChyYyAhPSBDVVJMRV9PSykgewogICAgICAgICAgICAgICAgTE1fRVJSKCJjdXJsX2Vhc3lf
cGVyZm9ybTogJXNcbiIsIGN1cmxfZWFzeV9zdHJlcnJvcihyYykpOwogICAgICAgICAgICAgICAg
Z290byBjbGVhbnVwOwogICAgICAgIH0KCiAgICAgICAgdGJvZHkgPSByZXNfYm9keTsKICAgICAg
ICB0cmltKCZ0Ym9keSk7CgogICAgICAgIHB2X3ZhbC5mbGFncyA9IFBWX1ZBTF9TVFI7CiAgICAg
ICAgcHZfdmFsLnJzID0gdGJvZHk7CgoJTE1fSU5GTygiKjogQWN0dWFsIHJlc3VsdCBib2R5IGlz
OiBqc29uUGF5bG9hZD0gJXNcbiIsIHJlc19ib2R5LnMpOwoKCgkgY2hhciB0ZW1wc3RyaW5nWzEw
MDBdID0gIiI7CiAgICAgICAgc3ByaW50Zih0ZW1wc3RyaW5nLCAiJXMiLCByZXNfYm9keS5zKTsK
CiAgICAgICAgY2hhciAqdG9rZW4gPSBOVUxMOwoKICAgICAgICBjaGFyIHJlc3BzdHJpbmdbMTAw
MF0gPSAiIjsKICAgICAgICBzcHJpbnRmKHJlc3BzdHJpbmcsICIlcyIsIHJlc19ib2R5LnMpOwoK
CiAgICAgICAgdG9rZW4gPSBOVUxMOwoJdG9rZW4gPSBzdHJ0b2socmVzcHN0cmluZywgIiwiKTsK
ICAgICAgICB0b2tlbiA9IHN0cnRvayhOVUxMLCAiLCIpOwogICAgICAgIHRva2VuID0gc3RydG9r
KE5VTEwsICIsIik7CgogICAgICAgIGNoYXIgbXVjQW5kSmlnYXNzaVsxMDAwXSA9ICIiOwogICAg
ICAgIGNoYXIgbXVjWzEwMDBdID0gIiI7CiAgICAgICAgY2hhciBqaWdhc2lJcFsxMDAwXSA9ICIi
OwogICAgICAgIGNoYXIgamlnYXNpRlFETlsxMDAwXSA9ICIiOwoKICAgICAgICBzcHJpbnRmKG11
Y0FuZEppZ2Fzc2ksICIlcyIsIHRva2VuKTsKCiAgICAgICAgdG9rZW4gPSBOVUxMOwogICAgICAg
IHRva2VuID0gc3RydG9rKCZtdWNBbmRKaWdhc3NpWzldLCAiQCIpOwogICAgICAgIHNwcmludGYo
bXVjLCAiJXMiLCB0b2tlbik7CiAgICAgICAgdG9rZW4gPSBzdHJ0b2soTlVMTCwgIkAiKTsKICAg
ICAgICB0b2tlbiA9IHN0cnRvayh0b2tlbiwgIlwiIik7CiAgICAgICAgc3ByaW50ZihqaWdhc2lJ
cCwgIiVzIiwgdG9rZW4pOwoKICAgICAgICBzcHJpbnRmKGppZ2FzaUZRRE4sICJzaXA6JXM6NTA2
MCIsIGppZ2FzaUlwKTsKICAgICAgICBkc3RfdXJpLnMgPSBqaWdhc2lGUUROOwogICAgICAgIGRz
dF91cmkubGVuID0gc3RybGVuKGRzdF91cmkucyk7CgoKCiAgICAgICAgaWYgKHNldF9kc3RfdXJp
KG1zZywgJmRzdF91cmkpIDwgMCkgewogICAgICAgICAgICAgICAgTE1fRVJSKCJlcnJvciB3aGls
ZSBzZXR0aW5nIGRzdCB1cmlcbiIpOwogICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAg
ICAgIH0KCglzcHJpbnRmKHB2X3ZhbC5ycy5zLCAiJXMiLCBtdWMpOwogICAgICAgIHB2X3ZhbC5y
cy5sZW4gPSBzdHJsZW4ocHZfdmFsLnJzLnMpOwoKICAgICAgICBpZiAocHZfc2V0X3ZhbHVlKG1z
ZywgYm9keV9wdiwgMCwgJnB2X3ZhbCkgIT0gMCkgewogICAgICAgICAgICAgICAgTE1fRVJSKCJT
ZXQgYm9keSBwdiB2YWx1ZSBmYWlsZWQhXG4iKTsKICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51
cDsKICAgICAgICB9CgogICAgICAgIGlmIChyZXNfYm9keS5zKSB7CiAgICAgICAgICAgICAgICBw
a2dfZnJlZShyZXNfYm9keS5zKTsKICAgICAgICB9CgogICAgICAgIGlmIChjdHlwZV9wdikgewog
ICAgICAgICAgICAgICAgcHZfdmFsLnJzID0gc3Q7CgogICAgICAgICAgICAgICAgaWYgKHB2X3Nl
dF92YWx1ZShtc2csIGN0eXBlX3B2LCAwLCAmcHZfdmFsKSAhPSAwKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIExNX0VSUigiU2V0IGNvbnRlbnQgdHlwZSBwdiB2YWx1ZSBmYWlsZWQhXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIGlmIChzdC5zKQogICAgICAgICAgICAgICAgICAgICAgICBwa2dfZnJl
ZShzdC5zKTsKICAgICAgICB9CgogICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGhhbmRsZSk7CiAg
ICAgICAgcmV0dXJuIDE7CgpjbGVhbnVwOgogICAgICAgIGNsZWFuX2hlYWRlcl9saXN0KGxpc3Qp
OwoJICBjdXJsX2Vhc3lfY2xlYW51cChoYW5kbGUpOwogICAgICAgIHJldHVybiAtMTsKfQo=

--_006_b87dda888e6f43a5a6cf143481c27b6bCOPDCEX28cablecomcastco_
Content-Type: text/plain; name="rest_methods.h"
Content-Description: rest_methods.h
Content-Disposition: attachment; filename="rest_methods.h"; size=2283;
	creation-date="Mon, 15 Aug 2016 20:27:59 GMT";
	modification-date="Mon, 15 Aug 2016 20:27:59 GMT"
Content-Transfer-Encoding: base64

LyoKICogQ29weXJpZ2h0IChDKSAyMDEzIE9wZW5TSVBTIFNvbHV0aW9ucwogKgogKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiBvcGVuc2lwcywgYSBmcmVlIFNJUCBzZXJ2ZXIuCiAqCiAqIG9wZW5zaXBz
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbgogKgogKiBvcGVuc2lwcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSAgVVNBCiAqCiAqIEhpc3Rvcnk6CiAqIC0tLS0tLS0KICogMjAxMy0wMi0yODogQ3Jl
YXRlZCAoTGl2aXUpCiAqLwoKI2lmbmRlZiBfUkVTVF9NRVRIT0RTXwojZGVmaW5lIF9SRVNUX01F
VEhPRFNfCgojaW5jbHVkZSAiLi4vLi4vcHZhci5oIgojaW5jbHVkZSAiLi4vLi4vZHByaW50Lmgi
CiNpbmNsdWRlICIuLi8uLi9lcnJvci5oIgojaW5jbHVkZSAiLi4vLi4vbWVtL21lbS5oIgoKZXh0
ZXJuIENVUkxNICptdWx0aV9oYW5kbGU7CgpleHRlcm4gbG9uZyBjb25uZWN0aW9uX3RpbWVvdXQ7
CmV4dGVybiBsb25nIGNvbm5lY3Rpb25fdGltZW91dF9tczsKZXh0ZXJuIGxvbmcgY3VybF90aW1l
b3V0OwoKZXh0ZXJuIGNoYXIgKnNzbF9jYXBhdGg7CmV4dGVybiBpbnQgc3NsX3ZlcmlmeXBlZXI7
CmV4dGVybiBpbnQgc3NsX3ZlcmlmeWhvc3Q7CgovKiBDdXJyZW50bHkgc3VwcG9ydGVkIEhUVFAg
dmVyYnMgKi8KZW51bSByZXN0X2NsaWVudF9tZXRob2QgewoJUkVTVF9DTElFTlRfR0VULAoJUkVT
VF9DTElFTlRfUE9TVCwKCVJFU1RfQ0xJRU5UX1BVVAp9OwoKdHlwZWRlZiBzdHJ1Y3QgcmVzdF9h
c3luY19wYXJhbV8gewoJZW51bSByZXN0X2NsaWVudF9tZXRob2QgbWV0aG9kOwoJQ1VSTCAqaGFu
ZGxlOwoJc3RyIGJvZHk7CglzdHIgY3R5cGU7CgoJcHZfc3BlY19wIGJvZHlfcHY7Cglwdl9zcGVj
X3AgY3R5cGVfcHY7Cglwdl9zcGVjX3AgY29kZV9wdjsKfSByZXN0X2FzeW5jX3BhcmFtOwoKaW50
IHJlc3RfZ2V0X21ldGhvZChzdHJ1Y3Qgc2lwX21zZyAqbXNnLCBjaGFyICp1cmwsCiAgICAgICAg
ICAgICAgICAgICAgcHZfc3BlY19wIGJvZHlfcHYsIHB2X3NwZWNfcCBjdHlwZV9wdiwgcHZfc3Bl
Y19wIGNvZGVfcHYpOwppbnQgcmVzdF9wb3N0X21ldGhvZChzdHJ1Y3Qgc2lwX21zZyAqbXNnLCBj
aGFyICp1cmwsIGNoYXIgKmJvZHksIGNoYXIgKmN0eXBlLAogICAgICAgICAgICAgICAgICAgICBw
dl9zcGVjX3AgYm9keV9wdiwgcHZfc3BlY19wIGN0eXBlX3B2LCBwdl9zcGVjX3AgY29kZV9wdik7
CmludCByZXN0X3B1dF9tZXRob2Qoc3RydWN0IHNpcF9tc2cgKm1zZywgY2hhciAqdXJsLCBjaGFy
ICpib2R5LCBjaGFyICpjdHlwZSwKICAgICAgICAgICAgICAgICAgICAgcHZfc3BlY19wIGJvZHlf
cHYsIHB2X3NwZWNfcCBjdHlwZV9wdiwgcHZfc3BlY19wIGNvZGVfcHYpOwoKaW50IHN0YXJ0X2Fz
eW5jX2h0dHBfcmVxKHN0cnVjdCBzaXBfbXNnICptc2csIGVudW0gcmVzdF9jbGllbnRfbWV0aG9k
IG1ldGhvZCwKCQkJCQkgICAgIGNoYXIgKnVybCwgY2hhciAqcmVxX2JvZHksIGNoYXIgKnJlcV9j
dHlwZSwKCQkJCQkgICAgIENVUkwgKipvdXRfaGFuZGxlLCBzdHIgKmJvZHksIHN0ciAqY3R5cGUp
OwplbnVtIGFzeW5jX3JldF9jb2RlIHJlc3VtZV9hc3luY19odHRwX3JlcShpbnQgZmQsIHN0cnVj
dCBzaXBfbXNnICptc2csIHZvaWQgKnBhcmFtKTsKCiNlbmRpZiAvKiBfUkVTVF9NRVRIT0RTXyAq
LwoK

--_006_b87dda888e6f43a5a6cf143481c27b6bCOPDCEX28cablecomcastco_--



More information about the Users mailing list