[Patches] Cycle-GC patch, one more time
Charles G Waldman
cgw@fnal.gov
Tue, 25 Apr 2000 11:14:06 -0500 (CDT)
I don't know why these messages keep getting base-64 encoded. I
certainly didn't intend to send them that way!
The first message I sent had the wrong file attached. Please
disregard. Sorry for the confusion.
The problems I was having getting Neil's cyclic-gc stuff to work with
the latest CVS Python had nothing to do with Trashcan - sorry,
Christian! It was my own changes to tupleobject.c. It turned out to
be a little tricky to get the GC info handled correctly during
_PyTuple_Resize. Below is a version of Neil's patch that applies
cleanly to current CVS and seems to work correctly. All credit is due
to Neil, I just did a tiny amount of cleanup work in a few places.
Differences:
(1) The above-mentioned _PyTuple_Resize fix
(2) A few problems were exposed by building with Py_TRACE_REFS
defined. Specifially, PyObject_New and PyObject_NewVar already do a
_Py_NewReference internally, but in a few places PyObject_New is
used to create a new object which is then _Py_NewReference'd. If
Py_TRACE_REFS is not set, this is merely redundant; with
Py_TRACE_REFS set it causes serious problems because the object is
added to the reference chain twice.
Here's a patch against Neil's patch.
Please disregard the earlier messages on this topic.
I confirm that, to the best of my knowledge and belief, this
contribution is free of any claims of third parties under
copyright, patent or other rights or interests ("claims"). To
the extent that I have any such claims, I hereby grant to CNRI a
nonexclusive, irrevocable, royalty-free, worldwide license to
reproduce, distribute, perform and/or display publicly, prepare
derivative versions, and otherwise use this contribution as part
of the Python software and its related documentation, or any
derivative versions thereof, at no cost to CNRI or its licensed
users, and to authorize others to do so.
I acknowledge that CNRI may, at its sole discretion, decide
whether or not to incorporate this contribution in the Python
software and its related documentation. I further grant CNRI
permission to use my name and other identifying information
provided to CNRI by me for use in connection with the Python
software and its related documentation.
--- gc-cycle.diff.neil Mon Apr 24 20:54:44 2000
+++ gc-cycle.diff.cgw Tue Apr 25 10:50:41 2000
@@ -857,7 +857,7 @@
+}
+
--- Python-cvs/Objects/classobject.c Tue Feb 29 14:55:15 2000
-+++ Python-gc/Objects/classobject.c Sat Apr 8 02:01:35 2000
++++ Python-gc/Objects/classobject.c Mon Apr 24 21:19:18 2000
@@ -110,7 +110,7 @@
}
Py_INCREF(bases);
@@ -947,16 +947,22 @@
if (inst->in_dict == NULL) {
Py_DECREF(inst);
return NULL;
-@@ -498,6 +528,9 @@
+@@ -498,11 +528,14 @@
PyObject *error_type, *error_value, *error_traceback;
PyObject *del;
static PyObject *delstr;
++ extern long _Py_RefTotal;
+#ifdef WITH_CYCLE_GC
+ PyGC_Remove((PyObject *)inst);
+#endif
/* Call the __del__ method if it exists. First temporarily
revive the object and save the current exception, if any. */
#ifdef Py_TRACE_REFS
+ /* much too complicated if Py_TRACE_REFS defined */
+- extern long _Py_RefTotal;
+ inst->ob_type = &PyInstance_Type;
+ _Py_NewReference((PyObject *)inst);
+ _Py_RefTotal--; /* compensate for increment in NEWREF */
@@ -550,6 +583,9 @@
#ifdef COUNT_ALLOCS
inst->ob_type->tp_free--;
@@ -967,7 +973,11 @@
return; /* __del__ added a reference; don't delete now */
}
#ifdef Py_TRACE_REFS
-@@ -561,7 +597,7 @@
+@@ -557,11 +593,10 @@
+ inst->ob_type->tp_free--; /* compensate for increment in UNREF */
+ #endif
+ _Py_ForgetReference((PyObject *)inst);
+- inst->ob_type = NULL;
#endif /* Py_TRACE_REFS */
Py_DECREF(inst->in_class);
Py_XDECREF(inst->in_dict);
@@ -976,7 +986,7 @@
}
static PyObject *
-@@ -837,6 +873,16 @@
+@@ -840,6 +875,16 @@
return outcome;
}
@@ -993,7 +1003,7 @@
static PyObject *getitemstr, *setitemstr, *delitemstr, *lenstr;
static int
-@@ -1460,7 +1506,11 @@
+@@ -1463,7 +1508,11 @@
(getattrofunc)instance_getattr, /*tp_getattro*/
(setattrofunc)instance_setattr, /*tp_setattro*/
0, /* tp_as_buffer */
@@ -1006,7 +1016,7 @@
};
-@@ -1490,7 +1540,7 @@
+@@ -1493,7 +1542,7 @@
_Py_NewReference((PyObject *)im);
}
else {
@@ -1182,8 +1192,8 @@
+#endif
};
--- Python-cvs/Objects/listobject.c Fri Mar 24 22:32:30 2000
-+++ Python-gc/Objects/listobject.c Sat Apr 8 02:02:36 2000
-@@ -61,34 +61,38 @@
++++ Python-gc/Objects/listobject.c Mon Apr 24 21:14:42 2000
+@@ -61,34 +61,37 @@
int i;
PyListObject *op;
size_t nbytes;
@@ -1231,14 +1241,14 @@
+ op->ob_item = item;
for (i = 0; i < size; i++)
op->ob_item[i] = NULL;
- _Py_NewReference((PyObject *)op);
+- _Py_NewReference((PyObject *)op);
+#ifdef WITH_CYCLE_GC
+ PyGC_Insert((PyObject *)op);
+#endif
return (PyObject *) op;
}
-@@ -216,6 +220,9 @@
+@@ -216,6 +219,9 @@
{
int i;
Py_TRASHCAN_SAFE_BEGIN(op)
@@ -1248,7 +1258,7 @@
if (op->ob_item != NULL) {
/* Do it backwards, for Christian Tismer.
There's a simple test case where somehow this reduces
-@@ -227,7 +234,7 @@
+@@ -227,7 +233,7 @@
}
free((ANY *)op->ob_item);
}
@@ -1257,7 +1267,7 @@
Py_TRASHCAN_SAFE_END(op)
}
-@@ -1399,6 +1406,29 @@
+@@ -1399,6 +1405,29 @@
return NULL;
}
@@ -1287,7 +1297,7 @@
static char append_doc[] =
"L.append(object) -- append object to end";
static char extend_doc[] =
-@@ -1464,6 +1494,18 @@
+@@ -1464,6 +1493,18 @@
0, /*tp_as_number*/
&list_as_sequence, /*tp_as_sequence*/
0, /*tp_as_mapping*/
@@ -1306,7 +1316,7 @@
};
-@@ -1532,5 +1574,16 @@
+@@ -1532,5 +1573,16 @@
0, /*tp_as_number*/
&immutable_list_as_sequence, /*tp_as_sequence*/
0, /*tp_as_mapping*/
@@ -1440,8 +1450,18 @@
int
--- Python-cvs/Objects/tupleobject.c Fri Mar 24 22:32:30 2000
-+++ Python-gc/Objects/tupleobject.c Sat Apr 8 02:11:45 2000
-@@ -91,12 +91,10 @@
++++ Python-gc/Objects/tupleobject.c Mon Apr 24 21:21:59 2000
+@@ -82,8 +82,8 @@
+ #endif
+ #ifdef Py_TRACE_REFS
+ op->ob_type = &PyTuple_Type;
+- op->ob_size = size;
+ #endif
++ _Py_NewReference((PyObject *)op);
+ }
+ else
+ #endif
+@@ -97,23 +97,23 @@
return PyErr_NoMemory();
}
;
@@ -1455,7 +1475,12 @@
}
for (i = 0; i < size; i++)
op->ob_item[i] = NULL;
-@@ -107,6 +105,9 @@
+- _Py_NewReference((PyObject *)op);
++
+ #if MAXSAVESIZE > 0
+ if (size == 0) {
+ free_tuples[0] = op;
+- ++num_free_tuples[0];
Py_INCREF(op); /* extra INCREF so that this is never freed */
}
#endif
@@ -1465,17 +1490,17 @@
return (PyObject *) op;
}
-@@ -173,6 +174,9 @@
+@@ -180,6 +180,9 @@
register int i;
-
+ register int len = op->ob_size;
Py_TRASHCAN_SAFE_BEGIN(op)
+#ifdef WITH_CYCLE_GC
+ PyGC_Remove((PyObject *)op);
+#endif
- if (op->ob_size > 0) {
- i = op->ob_size;
+ if (len > 0) {
+ i = len;
while (--i >= 0)
-@@ -185,7 +189,7 @@
+@@ -193,7 +196,7 @@
}
#endif
}
@@ -1484,7 +1509,7 @@
done:
Py_TRASHCAN_SAFE_END(op)
}
-@@ -393,6 +397,22 @@
+@@ -401,6 +404,22 @@
return (PyObject *) np;
}
@@ -1507,7 +1532,7 @@
static PySequenceMethods tuple_as_sequence = {
(inquiry)tuplelength, /*sq_length*/
(binaryfunc)tupleconcat, /*sq_concat*/
-@@ -419,6 +439,16 @@
+@@ -427,6 +446,16 @@
&tuple_as_sequence, /*tp_as_sequence*/
0, /*tp_as_mapping*/
(hashfunc)tuplehash, /*tp_hash*/
@@ -1524,43 +1549,49 @@
};
/* The following function breaks the notion that tuples are immutable:
-@@ -441,6 +471,10 @@
+@@ -449,6 +478,9 @@
int i;
int sizediff;
+#ifdef WITH_CYCLE_GC
+ PyGCInfo *g = PY_GCINFO(*pv);
-+ PyGC_Remove(*pv);
+#endif
v = (PyTupleObject *) *pv;
if (v == NULL || !PyTuple_Check(v) || v->ob_refcnt != 1) {
*pv = 0;
-@@ -469,16 +503,29 @@
- Py_XDECREF(v->ob_item[i]);
- v->ob_item[i] = NULL;
- }
-- sv = (PyTupleObject *)
-- realloc((char *)v,
-- sizeof(PyTupleObject) + newsize * sizeof(PyObject *));
+@@ -479,7 +511,6 @@
+ }
+ #if MAXSAVESIZE > 0
+ if (newsize == 0 && free_tuples[0]) {
+- num_free_tuples[0]--;
+ sv = free_tuples[0];
+ sv->ob_size = 0;
+ Py_INCREF(sv);
+@@ -511,9 +542,22 @@
+ } else
+ #endif
+ {
+#ifdef WITH_CYCLE_GC
-+ g = (PyGCInfo *) realloc((char *)g, sizeof(*g) +
++ PyGC_Remove((PyObject *)v);
++
++ g = (PyGCInfo *) realloc((char *)g, sizeof(*g) +
+ sizeof(PyTupleObject) +
+ newsize * sizeof(PyObject *));
-+ if (g == NULL) {
-+ sv == NULL;
-+ } else {
-+ sv = (PyTupleObject *) PY_GCOBJ(g);
-+ }
++ if (g == NULL) {
++ sv == NULL;
++ } else {
++ sv = (PyTupleObject *) PY_GCOBJ(g);
++ }
+#else
-+ sv = (PyTupleObject *) realloc((char *)v, sizeof(PyTupleObject) +
-+ newsize * sizeof(PyObject *));
-+#endif
- *pv = (PyObject *) sv;
- if (sv == NULL) {
-- PyMem_DEL(v);
-+ PyObject_Del((PyObject *)v);
- PyErr_NoMemory();
- return -1;
+ sv = (PyTupleObject *)
+ realloc((char *)v,
+ sizeof(PyTupleObject) + newsize * sizeof(PyObject *));
++#endif
+ *pv = (PyObject *) sv;
+ if (sv == NULL) {
+ PyMem_DEL(v);
+@@ -522,6 +566,9 @@
+ }
}
_Py_NewReference((PyObject *)sv);
+#ifdef WITH_CYCLE_GC
@@ -1569,12 +1600,16 @@
for (i = sv->ob_size; i < newsize; i++)
sv->ob_item[i] = NULL;
if (last_is_sticky && sizediff > 0) {
-@@ -508,7 +555,7 @@
+@@ -551,7 +598,11 @@
while (p) {
q = p;
p = (PyTupleObject *)(p->ob_item[0]);
- PyMem_DEL(q);
++#ifdef Py_TRACE_REFS
++ q->ob_type = &PyTuple_Type;
++#endif
+ PyObject_Del((PyObject *)q);
++
}
}
#endif
> Send Patches mailing list submissions to
> patches@python.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
> http://www.python.org/mailman/listinfo/patches
> or, via email, send a message with subject or body 'help' to
> patches-request@python.org
>
> You can reach the person managing the list at
> patches-admin@python.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Patches digest..."
>
>
> Today's Topics:
>
> 1. Re: Slightly cleaned-up cycle-gc patch (Christian Tismer)
> 2. Sightly clean-up cycle-gc patch (Charles G Waldman)
>
> --__--__--
>
> Message: 1
> Date: Tue, 25 Apr 2000 18:07:00 +0200
> From: Christian Tismer <tismer@tismer.com>
> To: Charles G Waldman <cgw@alum.mit.edu>
> Cc: patches@python.org
> Subject: Re: [Patches] Slightly cleaned-up cycle-gc patch
>
>
>
> Charles G Waldman wrote:
> >
> > The problems I was having getting Neil's cyclic-gc stuff to work with
> > the latest CVS Python had nothing to do with Trashcan - sorry,
> > Christian!
>
> Tss tss - my poor little trashcan pet, now it's happy again :-)
>
> ciao - chris
>
> p.s.: Oh, did you look at the end of your patch?
> There appears to be some binary crap. Maybe your
> python16.dsp file is broekn?
>
> --
> Christian Tismer :^) <mailto:tismer@appliedbiometrics.com>
> Applied Biometrics GmbH : Have a break! Take a ride on Python's
> Kaunstr. 26 : *Starship* http://starship.python.net
> 14163 Berlin : PGP key -> http://wwwkeys.pgp.net
> PGP Fingerprint E182 71C7 1A9D 66E9 9D15 D3CC D4D7 93E2 1FAE F6DF
> where do you want to jump today? http://www.stackless.com
>
>
> --__--__--
>
> Message: 2
> From: Charles G Waldman <cgw@fnal.gov>
> Date: Tue, 25 Apr 2000 11:02:09 -0500 (CDT)
> To: patches@python.org
> Subject: [Patches] Sightly clean-up cycle-gc patch
>
> DQogSSBkb24ndCBrbm93IHdoYXQgaGFwcGVuZWQgd2l0aCB0aGF0IGxhc3QgbWVzc2FnZSAt
> IGl0IHNvbWVob3cgZ290DQpiYXNlLTY0IGVuY29kZWQgd2l0aG91dCBtZSBhc2tpbmcgZm9y
> IHRoYXQuICBTb3JyeSEgIFR1cm5zIG91dCB0aGF0DQpub3Qgb25seSB3YXMgdGhlIG1lc3Nh
> Z2UgdW5yZWFkYWJsZSwgYnV0IEkgYXR0YWNoZWQgdGhlIHdyb25nIGZpbGUuDQpEb3VibGUt
> b29wcyENCg0KDQpUaGUgcHJvYmxlbXMgSSB3YXMgaGF2aW5nIGdldHRpbmcgTmVpbCdzIGN5
> Y2xpYy1nYyBzdHVmZiB0byB3b3JrIHdpdGgNCnRoZSBsYXRlc3QgQ1ZTIFB5dGhvbiBoYWQg
> bm90aGluZyB0byBkbyB3aXRoIFRyYXNoY2FuIC0gc29ycnksDQpDaHJpc3RpYW4hICBJdCB3
> YXMgbXkgb3duIGNoYW5nZXMgdG8gdHVwbGVvYmplY3QuYy4gIEl0IHR1cm5lZCBvdXQgdG8N
> CmJlIGEgbGl0dGxlIHRyaWNreSB0byBnZXQgdGhlIEdDIGluZm8gaGFuZGxlZCBjb3JyZWN0
> bHkgZHVyaW5nDQpfUHlUdXBsZV9SZXNpemUuICBCZWxvdyBpcyBhIHZlcnNpb24gb2YgTmVp
> bCdzIHBhdGNoIHRoYXQgYXBwbGllcw0KY2xlYW5seSB0byBjdXJyZW50IENWUyBhbmQgc2Vl
> bXMgdG8gd29yayBjb3JyZWN0bHkuICBBbGwgY3JlZGl0IGlzIGR1ZQ0KdG8gTmVpbCwgSSBq
> dXN0IGRpZCBhIHRpbnkgYW1vdW50IG9mIGNsZWFudXAgd29yayBpbiBhIGZldyBwbGFjZXMu
> DQooSSB3YXMgdGhpbmtpbmcgb2YgcG9zdGluZyB0aGlzIGFzIGEgZGlmZiB0byBOZWlsJ3Mg
> ZGlmZiwgYnV0IHdhc24ndA0Kc3VyZSBob3cgdGhhdCB3b3VsZCBnbyBvdmVyLi4uICBJZiB0
> aGlzIGdldHMgY2hlY2tlZCBpbiBpdCB3aWxsIGJlIGENCmxvdCBlYXNpZXIgdG8gd29yayBv
> biBpdCBhbmQgc2VuZCBzbWFsbCBwYXRjaGVzLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8NCnJl
> Z2VuZXJhdGUgdGhlIHdob2xlIHRoaW5nIGVhY2ggdGltZSkuDQoNCg0KDQpEaWZmZXJlbmNl
> czogIA0KDQogICgxKSBUaGUgYWJvdmUtbWVudGlvbmVkIF9QeVR1cGxlX1Jlc2l6ZSBmaXgN
> Cg0KICAoMikgQSBmZXcgcHJvYmxlbXMgd2VyZSBleHBvc2VkIGJ5IGJ1aWxkaW5nIHdpdGgg
> UHlfVFJBQ0VfUkVGUw0KICBkZWZpbmVkLiAgU3BlY2lmaWFsbHksIFB5T2JqZWN0X05ldyBh
> bmQgUHlPYmplY3RfTmV3VmFyIGFscmVhZHkgZG8gYQ0KICBfUHlfTmV3UmVmZXJlbmNlIGlu
> dGVybmFsbHksIGJ1dCBpbiBhIGZldyBwbGFjZXMgKGUuZy4gUHlMaXN0X05ldyksDQogIFB5
> T2JqZWN0X05ldyB3YXMgYmVpbmcgdXNlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHdoaWNo
> IGlzIHRoZW4NCiAgX1B5X05ld1JlZmVyZW5jZSdkLiAgSWYgUHlfVFJBQ0VfUkVGUyBpcyBu
> b3Qgc2V0LCB0aGlzIGlzIG1lcmVseQ0KICByZWR1bmRhbnQ7IHdpdGggUHlfVFJBQ0VfUkVG
> UyBzZXQgaXQgY2F1c2VzIHNlcmlvdXMgcHJvYmxlbXMgYmVjYXVzZQ0KICB0aGUgb2JqZWN0
> IGlzIGFkZGVkIHRvIHRoZSByZWZlcmVuY2UgY2hhaW4gdHdpY2UuDQoNCg0KDQogICAgICAg
> ICAgICAgICAgICAgSSBjb25maXJtIHRoYXQsIHRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRn
> ZSBhbmQgYmVsaWVmLCB0aGlzDQogICAgICAgICAgICAgICAgICAgY29udHJpYnV0aW9uIGlz
> IGZyZWUgb2YgYW55IGNsYWltcyBvZiB0aGlyZCBwYXJ0aWVzIHVuZGVyDQogICAgICAgICAg
> ICAgICAgICAgY29weXJpZ2h0LCBwYXRlbnQgb3Igb3RoZXIgcmlnaHRzIG9yIGludGVyZXN0
> cyAoImNsYWltcyIpLiAgVG8NCiAgICAgICAgICAgICAgICAgICB0aGUgZXh0ZW50IHRoYXQg
> SSBoYXZlIGFueSBzdWNoIGNsYWltcywgSSBoZXJlYnkgZ3JhbnQgdG8gQ05SSSBhDQogICAg
> ICAgICAgICAgICAgICAgbm9uZXhjbHVzaXZlLCBpcnJldm9jYWJsZSwgcm95YWx0eS1mcmVl
> LCB3b3JsZHdpZGUgbGljZW5zZSB0bw0KICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjZSwg
> ZGlzdHJpYnV0ZSwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZQ0K
> ICAgICAgICAgICAgICAgICAgIGRlcml2YXRpdmUgdmVyc2lvbnMsIGFuZCBvdGhlcndpc2Ug
> dXNlIHRoaXMgY29udHJpYnV0aW9uIGFzIHBhcnQNCiAgICAgICAgICAgICAgICAgICBvZiB0
> aGUgUHl0aG9uIHNvZnR3YXJlIGFuZCBpdHMgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBvciBh
> bnkNCiAgICAgICAgICAgICAgICAgICBkZXJpdmF0aXZlIHZlcnNpb25zIHRoZXJlb2YsIGF0
> IG5vIGNvc3QgdG8gQ05SSSBvciBpdHMgbGljZW5zZWQNCiAgICAgICAgICAgICAgICAgICB1
> c2VycywgYW5kIHRvIGF1dGhvcml6ZSBvdGhlcnMgdG8gZG8gc28uDQoNCiAgICAgICAgICAg
> ICAgICAgICBJIGFja25vd2xlZGdlIHRoYXQgQ05SSSBtYXksIGF0IGl0cyBzb2xlIGRpc2Ny
> ZXRpb24sIGRlY2lkZQ0KICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IHRvIGlu
> Y29ycG9yYXRlIHRoaXMgY29udHJpYnV0aW9uIGluIHRoZSBQeXRob24NCiAgICAgICAgICAg
> ICAgICAgICBzb2Z0d2FyZSBhbmQgaXRzIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4gIEkgZnVy
> dGhlciBncmFudCBDTlJJDQogICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiB0byB1c2Ug
> bXkgbmFtZSBhbmQgb3RoZXIgaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24NCiAgICAgICAgICAg
> ICAgICAgICBwcm92aWRlZCB0byBDTlJJIGJ5IG1lIGZvciB1c2UgaW4gY29ubmVjdGlvbiB3
> aXRoIHRoZSBQeXRob24NCiAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBhbmQgaXRzIHJl
> bGF0ZWQgZG9jdW1lbnRhdGlvbi4NCg0KLS0tIFB5dGhvbi1jdnMvSW5jbHVkZS9vYmplY3Qu
> aAlGcmkgTWFyIDI0IDIyOjMyOjE2IDIwMDANCisrKyBQeXRob24tZ2MvSW5jbHVkZS9vYmpl
> Y3QuaAlTYXQgQXByICA4IDAxOjM4OjI1IDIwMDANCkBAIC0xNDUsNiArMTQ1LDEwIEBADQog
> dHlwZWRlZiBpbnQgKCpnZXRzZWdjb3VudHByb2MpIFB5X1BST1RPKChQeU9iamVjdCAqLCBp
> bnQgKikpOw0KIHR5cGVkZWYgaW50ICgqZ2V0Y2hhcmJ1ZmZlcnByb2MpIFB5X1BST1RPKChQ
> eU9iamVjdCAqLCBpbnQsIGNvbnN0IGNoYXIgKiopKTsNCiB0eXBlZGVmIGludCAoKm9iam9i
> anByb2MpIFB5X1BST1RPKChQeU9iamVjdCAqLCBQeU9iamVjdCAqKSk7DQorI2lmZGVmIFdJ
> VEhfQ1lDTEVfR0MNCit0eXBlZGVmIGludCAoKnZpc2l0cHJvYykgUHlfUFJPVE8oKFB5T2Jq
> ZWN0ICosIHZvaWQgKikpOw0KK3R5cGVkZWYgaW50ICgqcmVjdXJzZXByb2MpIFB5X1BST1RP
> KChQeU9iamVjdCAqLCB2aXNpdHByb2MsIHZvaWQgKikpOw0KKyNlbmRpZg0KIA0KIHR5cGVk
> ZWYgc3RydWN0IHsNCiAJYmluYXJ5ZnVuYyBuYl9hZGQ7DQpAQCAtMjQzLDkgKzI0NywxOCBA
> QA0KIA0KIAljaGFyICp0cF9kb2M7IC8qIERvY3VtZW50YXRpb24gc3RyaW5nICovDQogDQot
> CS8qIE1vcmUgc3BhcmVzICovDQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJLyogY2FsbCBm
> dW5jdGlvbiBmb3IgYWxsIGFjY2Vzc2libGUgb2JqZWN0cyAqLw0KKwlyZWN1cnNlcHJvYyB0
> cF9yZWN1cnNlOw0KKwkNCisJLyogZGVsZXRlIHJlZmVyZW5jZXMgdG8gY29udGFpbmVkIG9i
> amVjdHMgKi8NCisJaW5xdWlyeSB0cF9jbGVhcjsNCisjZWxzZQ0KIAlsb25nIHRwX3h4eDU7
> DQogCWxvbmcgdHBfeHh4NjsNCisjZW5kaWYNCisNCisJLyogTW9yZSBzcGFyZXMgKi8NCiAJ
> bG9uZyB0cF94eHg3Ow0KIAlsb25nIHRwX3h4eDg7DQogDQpAQCAtMzE1LDYgKzMyOCw5IEBA
> DQogDQogLyogUHlTZXF1ZW5jZU1ldGhvZHMgY29udGFpbnMgc3FfY29udGFpbnMgKi8NCiAj
> ZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TRVFVRU5DRV9JTiAoMUw8PDEpDQorDQorLyogT2Jq
> ZWN0cyB3aXRoIGEgR0MgaW5mbyBwcmVmaXggKGFsbG9jYXRlZCAqYmVmb3JlKiB0aGUgb2Jq
> ZWN0IGl0c2VsZiEpICovDQorI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfR0NJTkZPICgxTDw8
> MikNCiANCiAjZGVmaW5lIFB5X1RQRkxBR1NfREVGQVVMVCAgKFB5X1RQRkxBR1NfSEFWRV9H
> RVRDSEFSQlVGRkVSIHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFBG
> TEFHU19IQVZFX1NFUVVFTkNFX0lOKQ0KLS0tIFB5dGhvbi1jdnMvSW5jbHVkZS9vYmppbXBs
> LmgJVGh1IE1hciAgMiAxNzowMjoyMyAyMDAwDQorKysgUHl0aG9uLWdjL0luY2x1ZGUvb2Jq
> aW1wbC5oCVNhdCBBcHIgIDggMDM6MTg6MjIgMjAwMA0KQEAgLTM4LDggKzM4LDQyIEBADQog
> LyoNCiBBZGRpdGlvbmFsIG1hY3JvcyBmb3IgbW9kdWxlcyB0aGF0IGltcGxlbWVudCBuZXcg
> b2JqZWN0IHR5cGVzLg0KIFlvdSBtdXN0IGZpcnN0IGluY2x1ZGUgIm9iamVjdC5oIi4NCisq
> Lw0KKw0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDIA0KKw0KKy8qIFN0cnVjdHVyZSAqcHJlZml4
> ZWQqIHRvIGNvbnRhaW5lciBvYmplY3RzIHBhcnRpY2lwYXRpbmcgaW4gR0MgKi8gDQordHlw
> ZWRlZiBzdHJ1Y3QgX2djaW5mbyB7DQorCXN0cnVjdCBfZ2NpbmZvICpnY19uZXh0Ow0KKwlz
> dHJ1Y3QgX2djaW5mbyAqZ2NfcHJldjsNCisJaW50IGdjX3JlZnM7DQorfSBQeUdDSW5mbzsN
> CisNCisvKiBUZXN0IGlmIGEgdHlwZSBoYXMgR0MgaW5mbyAqLw0KKyNkZWZpbmUgUFlfVFlQ
> RUlTR0ModCkgUHlUeXBlX0hhc0ZlYXR1cmUoKHQpLCBQeV9UUEZMQUdTX0hBVkVfR0NJTkZP
> KQ0KKw0KKy8qIFRlc3QgaWYgYW4gb2JqZWN0IGhhcyBHQyBpbmZvICovDQorI2RlZmluZSBQ
> WV9JU0dDKG8pIFBZX1RZUEVJU0dDKChvKS0+b2JfdHlwZSkNCisNCisvKiBHZXQgYW4gb2Jq
> ZWN0J3MgR0MgaW5mbyAtLSBOVUxMIGlmIHRoZSBvYmplY3QgaGFzIG5vbmUgKi8NCisjZGVm
> aW5lIFBZX0dDSU5GTyhvKSAoUFlfSVNHQyhvKSA/ICgoUHlHQ0luZm8gKikobyktMSkgOiBO
> VUxMKQ0KKw0KKy8qIFVuc2FmZSB2ZXJzaW9uIG9mIFBZX0dDSU5GTygpIC0tIG9ubHkgY2Fs
> bCBpZiBQWV9JU0dDKHApIGlzIHRydWUgKi8NCisjZGVmaW5lIFBZX0dDSU5GT19VTlNBRkUo
> bykgKChQeUdDSW5mbyAqKShvKS0xKQ0KKw0KKy8qIEdldCB0aGUgb2JqZWN0IGdpdmVuIHRo
> ZSBQeUdDSW5mbyAqLw0KKyNkZWZpbmUgUFlfR0NPQkooZykgKChQeU9iamVjdCAqKSgoZykr
> MSkpDQogDQotUHlPYmplY3RfTkVXKHR5cGUsIHR5cGVvYmopIGFsbG9jYXRlcyBtZW1vcnkg
> Zm9yIGEgbmV3IG9iamVjdCBvZiB0aGUgZ2l2ZW4NCisvKiBBZGQgdGhlIG9iamVjdCBpbnRv
> IHRoZSBjb250YWluZXIgc2V0ICovDQorZXh0ZXJuIERMX0lNUE9SVCh2b2lkKSBQeUdDX0lu
> c2VydCBQeV9QUk9UTygoUHlPYmplY3QgKikpOw0KKw0KKy8qIFJlbW92ZSB0aGUgb2JqZWN0
> IGZyb20gdGhlIGNvbnRhaW5lciBzZXQgKi8NCitleHRlcm4gRExfSU1QT1JUKHZvaWQpIFB5
> R0NfUmVtb3ZlIFB5X1BST1RPKChQeU9iamVjdCAqKSk7DQorDQorI2VuZGlmDQorDQorLyoN
> CitQeU9iamVjdF9OZXcodHlwZSwgdHlwZW9iaikgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBu
> ZXcgb2JqZWN0IG9mIHRoZSBnaXZlbg0KIHR5cGU7IGhlcmUgJ3R5cGUnIG11c3QgYmUgdGhl
> IEMgc3RydWN0dXJlIHR5cGUgdXNlZCB0byByZXByZXNlbnQgdGhlDQogb2JqZWN0IGFuZCAn
> dHlwZW9iaicgdGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBvYmplY3Qu
> DQogUmVmZXJlbmNlIGNvdW50IGFuZCB0eXBlIHBvaW50ZXIgYXJlIGZpbGxlZCBpbjsgdGhl
> IHJlc3Qgb2YgdGhlIGJ5dGVzIG9mDQpAQCAtNDcsMzAgKzgxLDI5IEBADQogVGhlIHNpemUg
> b2YgdGhlIG9iamVjdCBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSB0cF9iYXNpY3Np
> emUgZmllbGQNCiBvZiB0aGUgdHlwZSBvYmplY3QuDQogDQotUHlPYmplY3RfTkVXX1ZBUih0
> eXBlLCB0eXBlb2JqLCBuKSBpcyBzaW1pbGFyIGJ1dCBhbGxvY2F0ZXMgYSB2YXJpYWJsZS1z
> aXplDQorUHlPYmplY3RfTmV3VmFyKHR5cGUsIHR5cGVvYmosIG4pIGlzIHNpbWlsYXIgYnV0
> IGFsbG9jYXRlcyBhIHZhcmlhYmxlLXNpemUNCiBvYmplY3Qgd2l0aCBuIGV4dHJhIGl0ZW1z
> LiAgVGhlIHNpemUgaXMgY29tcHV0ZWQgYXMgdHBfYmFzaWNzaXplIHBsdXMNCiBuICogdHBf
> aXRlbXNpemUuICBUaGlzIGZpbGxzIGluIHRoZSBvYl9zaXplIGZpZWxkIGFzIHdlbGwuDQog
> Ki8NCiANCi0jaWZuZGVmIE1TX0NPUkVETEwNCiBleHRlcm4gRExfSU1QT1JUKFB5T2JqZWN0
> ICopIF9QeU9iamVjdF9OZXcgUHlfUFJPVE8oKFB5VHlwZU9iamVjdCAqKSk7DQogZXh0ZXJu
> IERMX0lNUE9SVChQeVZhck9iamVjdCAqKSBfUHlPYmplY3RfTmV3VmFyIFB5X1BST1RPKChQ
> eVR5cGVPYmplY3QgKiwgaW50KSk7DQorZXh0ZXJuIERMX0lNUE9SVCh2b2lkKSBQeU9iamVj
> dF9EZWwgUHlfUFJPVE8oKFB5T2JqZWN0ICopKTsNCiANCi0jZGVmaW5lIFB5T2JqZWN0X05F
> Vyh0eXBlLCB0eXBlb2JqKSAoKHR5cGUgKikgX1B5T2JqZWN0X05ldyh0eXBlb2JqKSkNCi0j
> ZGVmaW5lIFB5T2JqZWN0X05FV19WQVIodHlwZSwgdHlwZW9iaiwgbikgKCh0eXBlICopIF9Q
> eU9iamVjdF9OZXdWYXIodHlwZW9iaiwgbikpDQotDQotI2Vsc2UNCi0vKiBGb3IgYW4gTVMt
> V2luZG93cyBETEwsIHdlIGNoYW5nZSB0aGUgd2F5IGFuIG9iamVjdCBpcyBjcmVhdGVkLCBz
> byB0aGF0IHRoZQ0KLSAgIGV4dGVuc2lvbiBtb2R1bGUncyBtYWxsb2MgaXMgdXNlZCwgcmF0
> aGVyIHRoYW4gdGhlIGNvcmUgRExMIG1hbGxvYywgYXMgdGhlcmUgaXMNCi0gICBubyBndWFy
> YW50ZWUgdGhleSB3aWxsIHVzZSB0aGUgc2FtZSBoZWFwDQotKi8NCi1leHRlcm4gRExfSU1Q
> T1JUKFB5T2JqZWN0ICopIF9QeU9iamVjdF9OZXcgUHlfUFJPVE8oKFB5VHlwZU9iamVjdCAq
> LCBQeU9iamVjdCAqKSk7DQotZXh0ZXJuIERMX0lNUE9SVChQeVZhck9iamVjdCAqKSBfUHlP
> YmplY3RfTmV3VmFyIFB5X1BST1RPKChQeVR5cGVPYmplY3QgKiwgaW50LCBQeVZhck9iamVj
> dCAqKSk7DQotDQotI2RlZmluZSBQeU9iamVjdF9ORVcodHlwZSwgdHlwZW9iaikgKCh0eXBl
> ICopIF9QeU9iamVjdF9OZXcodHlwZW9iaiwoUHlPYmplY3QgKiltYWxsb2MoKHR5cGVvYmop
> LT50cF9iYXNpY3NpemUpKSkNCi0jZGVmaW5lIFB5T2JqZWN0X05FV19WQVIodHlwZSwgdHlw
> ZW9iaiwgbikgKCh0eXBlICopIF9QeU9iamVjdF9OZXdWYXIodHlwZW9iaiwgbiwgKFB5VmFy
> T2JqZWN0ICopbWFsbG9jKCh0eXBlb2JqKS0+dHBfYmFzaWNzaXplICsgbiAqICh0eXBlb2Jq
> KS0+dHBfaXRlbXNpemUpKSkNCi0NCi0jZW5kaWYgLyogTVNfQ09SRURMTCAqLw0KKy8qIEZ1
> bmN0aW9ucyAqLw0KKyNkZWZpbmUgUHlPYmplY3RfTmV3KHR5cGUsIHR5cGVvYmopIFwNCisJ
> CSgodHlwZSAqKSBfUHlPYmplY3RfTmV3KHR5cGVvYmopKQ0KKyNkZWZpbmUgUHlPYmplY3Rf
> TmV3VmFyKHR5cGUsIHR5cGVvYmosIG4pIFwNCisgICAgICAgICAgICAgICAgKCh0eXBlICop
> IF9QeU9iamVjdF9OZXdWYXIoKHR5cGVvYmopLCAobikpKQ0KKw0KKw0KK2V4dGVybiBETF9J
> TVBPUlQoUHlPYmplY3QgKikgX1B5T2JqZWN0X0Zyb21UeXBlIFB5X1BST1RPKChQeVR5cGVP
> YmplY3QgKiwgUHlPYmplY3QgKikpOw0KK2V4dGVybiBETF9JTVBPUlQoUHlWYXJPYmplY3Qg
> KikgX1B5T2JqZWN0X1ZhckZyb21UeXBlIFB5X1BST1RPKChQeVR5cGVPYmplY3QgKiwgaW50
> LCBQeVZhck9iamVjdCAqKSk7DQorDQorLyogVGhlc2UgbWFjcm9zIG1heSBub3QgdXNlIHRo
> ZSBzYW1lIG1hbGxvYyBhcyBQeXRob24uIFRoZXkgY2Fubm90IGJlIHVzZWQNCisgKiBvYmpl
> Y3RzIHRoYXQgYXJlIGludm9sdmVkIGluIGdhcmJhZ2UgY29sbGVjdGlvbiAqLw0KKyNkZWZp
> bmUgUHlPYmplY3RfTkVXKHR5cGUsIHR5cGVvYmopICgodHlwZSAqKSBfUHlPYmplY3RfRnJv
> bVR5cGUodHlwZW9iaiwoUHlPYmplY3QgKiltYWxsb2MoKHR5cGVvYmopLT50cF9iYXNpY3Np
> emUpKSkNCisjZGVmaW5lIFB5T2JqZWN0X05FV19WQVIodHlwZSwgdHlwZW9iaiwgbikgKCh0
> eXBlICopIF9QeU9iamVjdF9WYXJGcm9tVHlwZSh0eXBlb2JqLCBuLCAoUHlWYXJPYmplY3Qg
> KiltYWxsb2MoKHR5cGVvYmopLT50cF9iYXNpY3NpemUgKyBuICogKHR5cGVvYmopLT50cF9p
> dGVtc2l6ZSkpKQ0KIA0KICNpZmRlZiBfX2NwbHVzcGx1cw0KIH0NCi0tLSBQeXRob24tY3Zz
> L01vZHVsZXMvY1BpY2tsZS5jCUZyaSBNYXIgMjQgMjI6MzI6MjUgMjAwMA0KKysrIFB5dGhv
> bi1nYy9Nb2R1bGVzL2NQaWNrbGUuYwlTYXQgQXByICA4IDAyOjEzOjExIDIwMDANCkBAIC0y
> ODg2LDcgKzI4ODYsNyBAQA0KICAgICAgICAgICAgICAgUHlJbnN0YW5jZU9iamVjdCAqaW5z
> dDsNCiANCiAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7DQotICAgICAgICAgICAgICBV
> TkxFU1MgKGluc3Q9UHlPYmplY3RfTkVXKFB5SW5zdGFuY2VPYmplY3QsICZQeUluc3RhbmNl
> X1R5cGUpKQ0KKyAgICAgICAgICAgICAgVU5MRVNTIChpbnN0PVB5T2JqZWN0X05ldyhQeUlu
> c3RhbmNlT2JqZWN0LCAmUHlJbnN0YW5jZV9UeXBlKSkNCiAgICAgICAgICAgICAgICAgZ290
> byBlcnI7DQogICAgICAgICAgICAgICBpbnN0LT5pbl9jbGFzcz0oUHlDbGFzc09iamVjdCop
> Y2xzOw0KICAgICAgICAgICAgICAgUHlfSU5DUkVGKGNscyk7DQpAQCAtMjg5NCw3ICsyODk0
> LDkgQEANCiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGluc3QpOw0KICAgICAgICAgICAg
> ICAgICBnb3RvIGVycjsNCiAgICAgICAgICAgICAgIH0NCi0NCisjaWZkZWYgV0lUSF9DWUNM
> RV9HQw0KKyAgICAgICAgICAgICAgUHlHQ19JbnNlcnQoKFB5T2JqZWN0ICopaW5zdCk7DQor
> I2VuZGlmDQogICAgICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopaW5zdDsNCiAgICAg
> ICAgICAgICB9DQogICAgICAgICAgIFB5X0RFQ1JFRihfX2dldGluaXRhcmdzX18pOw0KLS0t
> IFB5dGhvbi1jdnMvTW9kdWxlcy9uZXdtb2R1bGUuYwlUdWUgRmViIDI5IDE0OjU1OjA5IDIw
> MDANCisrKyBQeXRob24tZ2MvTW9kdWxlcy9uZXdtb2R1bGUuYwlTYXQgQXByICA4IDAyOjEz
> OjI2IDIwMDANCkBAIC00OSwxMyArNDksMTYgQEANCiAJCQkgICAgICAmUHlDbGFzc19UeXBl
> LCAma2xhc3MsDQogCQkJICAgICAgJlB5RGljdF9UeXBlLCAmZGljdCkpDQogCQlyZXR1cm4g
> TlVMTDsNCi0JaW5zdCA9IFB5T2JqZWN0X05FVyhQeUluc3RhbmNlT2JqZWN0LCAmUHlJbnN0
> YW5jZV9UeXBlKTsNCisJaW5zdCA9IFB5T2JqZWN0X05ldyhQeUluc3RhbmNlT2JqZWN0LCAm
> UHlJbnN0YW5jZV9UeXBlKTsNCiAJaWYgKGluc3QgPT0gTlVMTCkNCiAJCXJldHVybiBOVUxM
> Ow0KIAlQeV9JTkNSRUYoa2xhc3MpOw0KIAlQeV9JTkNSRUYoZGljdCk7DQogCWluc3QtPmlu
> X2NsYXNzID0gKFB5Q2xhc3NPYmplY3QgKilrbGFzczsNCiAJaW5zdC0+aW5fZGljdCA9IGRp
> Y3Q7DQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJUHlHQ19JbnNlcnQoKFB5T2JqZWN0ICop
> aW5zdCk7DQorI2VuZGlmDQogCXJldHVybiAoUHlPYmplY3QgKilpbnN0Ow0KIH0NCiANCi0t
> LSBQeXRob24tY3ZzL01vZHVsZXMvZ2Ntb2R1bGUuYw0KKysrIFB5dGhvbi1nYy9Nb2R1bGVz
> L2djbW9kdWxlLmMJU2F0IEFwciAgOCAwMzoyNTo1NyAyMDAwDQpAQCAtMCwwICsxLDY3NyBA
> QA0KKy8qDQorIA0KKyAgUmVmZXJlbmNlIEN5Y2xlIEdhcmJhZ2UgQ29sbGVjdGlvbg0KKyAg
> PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KKyAgTmVpbCBTY2hlbWVu
> YXVlciA8bmFzY2hlbWVAZW5tZS51Y2FsZ2FyeS5jYT4NCisNCisgIEJhc2VkIG9uIGEgcG9z
> dCBvbiB0aGUgcHl0aG9uLWRldiBsaXN0LiAgSWRlYXMgZnJvbSBHdWlkbyB2YW4gUm9zc3Vt
> LA0KKyAgRXJpYyBUaWVkZW1hbm4sIGFuZCB2YXJpb3VzIG90aGVycy4NCisNCisgIGh0dHA6
> Ly93d3cuZW5tZS5jYWxnYXJ5LmNhL35uYXNjaGVtZS9weXRob24vZ2MuaHRtbA0KKyAgaHR0
> cDovL3d3dy5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDAtTWFyY2gvMDAz
> ODY5Lmh0bWwNCisgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRl
> di8yMDAwLU1hcmNoLzAwNDAxMC5odG1sDQorICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcGlw
> ZXJtYWlsL3B5dGhvbi1kZXYvMjAwMC1NYXJjaC8wMDQwMjIuaHRtbA0KKw0KKyAgRm9yIGEg
> aGlnaGxldmVsIHZpZXcgb2YgdGhlIGNvbGxlY3Rpb24gcHJvY2VzcywgcmVhZCB0aGUgY29s
> bGVjdA0KKyAgZnVuY3Rpb24uDQorDQorICBUT0RPOg0KKwl1c2UgYSBkaWZmZXJlbnQgaW50
> ZXJmYWNlIGZvciBzZXRfZGVidWcoKSAoa2V5d29yZHMpPw0KKwlpbmxpbmUgUHlHQ19JbnNl
> cnQgYW5kIFB5R0NfUmVtb3ZlIGNhbGxzPw0KKwl0dW5lIHBhcmFtZXRlcnMNCisNCisqLw0K
> Kw0KKyNpbmNsdWRlICJQeXRob24uaCINCisNCisjaWZuZGVmIFdJVEhfQ1lDTEVfR0MNCisj
> ZXJyb3IgIllvdSBtdXN0IGRlZmluZSBXSVRIX0NZQ0xFX0dDIHRvIGluY2x1ZGUgdGhpcyBt
> b2R1bGUiDQorI2VuZGlmDQorDQorLyogbWFnaWMgZ2NfcmVmcyB2YWx1ZSAqLw0KKyNkZWZp
> bmUgR0NfTU9WRUQgLTENCisNCisNCisvKioqIEdsb2JhbCBHQyBzdGF0ZSAqKiovDQorDQor
> LyogbGlua2VkIGxpc3RzIG9mIGNvbnRhaW5lciBvYmplY3RzICovDQorc3RhdGljIFB5R0NJ
> bmZvIGdlbmVyYXRpb24wID0geyZnZW5lcmF0aW9uMCwgJmdlbmVyYXRpb24wLCAwfTsNCitz
> dGF0aWMgUHlHQ0luZm8gZ2VuZXJhdGlvbjEgPSB7JmdlbmVyYXRpb24xLCAmZ2VuZXJhdGlv
> bjEsIDB9Ow0KK3N0YXRpYyBQeUdDSW5mbyBnZW5lcmF0aW9uMiA9IHsmZ2VuZXJhdGlvbjIs
> ICZnZW5lcmF0aW9uMiwgMH07DQorc3RhdGljIGludCBnZW5lcmF0aW9uID0gMDsgLyogY3Vy
> cmVudCBnZW5lcmF0aW9uIGJlaW5nIGNvbGxlY3RlZCAqLw0KKw0KKy8qIGNvbGxlY3Rpb24g
> ZnJlcXVlbmNpZXMsIFhYWCB0dW5lIHRoZXNlICovDQorc3RhdGljIGludCB0aHJlc2hvbGQw
> ID0gMTAwOyAvKiBuZXQgbmV3IGNvbnRhaW5lcnMgYmVmb3JlIGNvbGxlY3Rpb24gKi8NCitz
> dGF0aWMgaW50IHRocmVzaG9sZDEgPSAxMDsgIC8qIGdlbmVyYXRpb24wIGNvbGxlY3Rpb25z
> IGJlZm9yZSBjb2xsZWN0aW5nIDEgKi8NCitzdGF0aWMgaW50IHRocmVzaG9sZDIgPSAxMDsg
> IC8qIGdlbmVyYXRpb24xIGNvbGxlY3Rpb25zIGJlZm9yZSBjb2xsZWN0aW5nIDIgKi8NCisN
> CisvKiBuZXQgbmV3IG9iamVjdHMgYWxsb2NhdGVkIHNpbmNlIGxhc3QgY29sbGVjdGlvbiAq
> Lw0KK3N0YXRpYyBpbnQgYWxsb2NhdGVkID0gMDsNCisNCisvKiBzZXQgZm9yIGRlYnVnZ2lu
> ZyBpbmZvcm1hdGlvbiAqLw0KKyNkZWZpbmUgREVCVUdfU1RBVFMJCSgxPDwwKSAvKiBwcmlu
> dCBjb2xsZWN0aW9uIHN0YXRpc3RpY3MgKi8NCisjZGVmaW5lIERFQlVHX0NPTExFQ1RBQkxF
> CSgxPDwxKSAvKiBwcmludCBjb2xsZWN0YWJsZSBvYmplY3RzICovDQorI2RlZmluZSBERUJV
> R19VTkNPTExFQ1RBQkxFCSgxPDwyKSAvKiBwcmludCB1bmNvbGxlY3RhYmxlIG9iamVjdHMg
> Ki8NCisjZGVmaW5lIERFQlVHX0lOU1RBTkNFUwkJKDE8PDMpIC8qIHByaW50IGluc3RhbmNl
> cyAqLw0KKyNkZWZpbmUgREVCVUdfT0JKRUNUUwkJKDE8PDQpIC8qIHByaW50IG90aGVyIG9i
> amVjdHMgKi8NCisjZGVmaW5lIERFQlVHX0xFQUsJCURFQlVHX0NPTExFQ1RBQkxFIHwgXA0K
> KwkJCQlERUJVR19VTkNPTExFQ1RBQkxFIHwgXA0KKwkJCQlERUJVR19JTlNUQU5DRVMgfCBc
> DQorCQkJCURFQlVHX09CSkVDVFMNCitzdGF0aWMgaW50IGRlYnVnID0gREVCVUdfTEVBSzsN
> CisNCisvKiBsaXN0IG9mIHVuY29sbGVjdGFibGUgb2JqZWN0cyAqLw0KK3N0YXRpYyBQeU9i
> amVjdCAqZ2FyYmFnZSA9IE5VTEw7DQorDQorDQorLyoqKiBsaXN0IGZ1bmN0aW9ucyAoc2hv
> dWxkIHByb2JhYmx5IGJlIG1hY3Jvcywgc3R1cGlkIGNvbXBpbGVycykgKioqLw0KKw0KK3N0
> YXRpYyB2b2lkDQorTElTVF9JTklUKFB5R0NJbmZvICpsaXN0KQ0KK3sNCisJbGlzdC0+Z2Nf
> cHJldiA9IGxpc3Q7DQorCWxpc3QtPmdjX25leHQgPSBsaXN0Ow0KK30NCisNCitzdGF0aWMg
> dm9pZA0KK0xJU1RfQVBQRU5EKFB5R0NJbmZvICpub2RlLCBQeUdDSW5mbyAqbGlzdCkNCit7
> DQorCW5vZGUtPmdjX25leHQgPSBsaXN0Ow0KKwlub2RlLT5nY19wcmV2ID0gbGlzdC0+Z2Nf
> cHJldjsNCisJbm9kZS0+Z2NfcHJldi0+Z2NfbmV4dCA9IG5vZGU7DQorCWxpc3QtPmdjX3By
> ZXYgPSBub2RlOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK0xJU1RfUkVNT1ZFKFB5R0NJbmZv
> ICpub2RlKQ0KK3sNCisJbm9kZS0+Z2NfcHJldi0+Z2NfbmV4dCA9IG5vZGUtPmdjX25leHQ7
> DQorCW5vZGUtPmdjX25leHQtPmdjX3ByZXYgPSBub2RlLT5nY19wcmV2Ow0KK30NCisNCitz
> dGF0aWMgdm9pZCANCitMSVNUX01PVkUoUHlHQ0luZm8gKmZyb20sIFB5R0NJbmZvICp0bykN
> Cit7DQorCWlmIChmcm9tLT5nY19uZXh0ID09IGZyb20pIHsNCisJCS8qIGVtcHR5IGZyb20g
> bGlzdCAqLw0KKwkJTElTVF9JTklUKHRvKTsNCisJfSBlbHNlIHsNCisJCXRvLT5nY19uZXh0
> ID0gZnJvbS0+Z2NfbmV4dDsNCisJCXRvLT5nY19uZXh0LT5nY19wcmV2ID0gdG87DQorCQl0
> by0+Z2NfcHJldiA9IGZyb20tPmdjX3ByZXY7DQorCQl0by0+Z2NfcHJldi0+Z2NfbmV4dCA9
> IHRvOw0KKwl9DQorCUxJU1RfSU5JVChmcm9tKTsNCit9DQorDQorLyogYXBwZW5kIGEgbGlz
> dCBvbnRvIGFub3RoZXIgbGlzdCAqLw0KK3N0YXRpYyB2b2lkDQorTElTVF9MQVBQRU5EKFB5
> R0NJbmZvICpmcm9tLCBQeUdDSW5mbyAqdG8pDQorew0KKwlQeUdDSW5mbyAqdGFpbDsNCisJ
> aWYgKGZyb20tPmdjX25leHQgIT0gZnJvbSkgew0KKwkJdGFpbCA9IHRvLT5nY19wcmV2Ow0K
> KwkJdGFpbC0+Z2NfbmV4dCA9IGZyb20tPmdjX25leHQ7DQorCQl0YWlsLT5nY19uZXh0LT5n
> Y19wcmV2ID0gdGFpbDsNCisJCXRvLT5nY19wcmV2ID0gZnJvbS0+Z2NfcHJldjsNCisJCXRv
> LT5nY19wcmV2LT5nY19uZXh0ID0gdG87DQorCX0NCisJTElTVF9JTklUKGZyb20pOw0KK30N
> CisNCitzdGF0aWMgbG9uZw0KK0xJU1RfU0laRShQeUdDSW5mbyAqbGlzdCkNCit7DQorCVB5
> R0NJbmZvICpnYzsNCisJbG9uZyBuID0gMDsNCisJZm9yIChnYyA9IGxpc3QtPmdjX25leHQ7
> IGdjICE9IGxpc3Q7IGdjID0gZ2MtPmdjX25leHQpIHsNCisJCW4rKzsNCisJfQ0KKwlyZXR1
> cm4gbjsNCit9DQorDQorDQorI2lmZGVmIERFQlVHDQorc3RhdGljIHZvaWQNCitsaXN0X3By
> aW50KFB5R0NJbmZvICpsaXN0KSB7DQorCVB5R0NJbmZvICpvcCA9IGxpc3Q7DQorCWRvIHsN
> CisJCXByaW50ZigiJXggJXggJXggJWRcbiIsIChsb25nKW9wLCAobG9uZylvcC0+Z2NfcHJl
> diwgDQorCQkJCShsb25nKW9wLT5nY19uZXh0LCAobG9uZylvcC0+Z2NfcmVmcyk7DQorDQor
> CQlvcCA9IG9wLT5nY19uZXh0Ow0KKwl9IHdoaWxlIChvcCAhPSBsaXN0KTsNCit9DQorI2Vu
> ZGlmDQorDQorLyoqKiBlbmQgb2YgbGlzdCBzdHVmZiAqKiovDQorDQorDQorLyogU2V0IGFs
> bCBnY19yZWZzID0gb2JfcmVmY250ICovDQorc3RhdGljIHZvaWQNCit1cGRhdGVfcmVmcyhQ
> eUdDSW5mbyAqY29udGFpbmVycykNCit7DQorCVB5R0NJbmZvICpnYyA9IGNvbnRhaW5lcnMt
> PmdjX25leHQ7DQorCWZvciAoOyBnYyAhPSBjb250YWluZXJzOyBnYz1nYy0+Z2NfbmV4dCkg
> ew0KKwkJZ2MtPmdjX3JlZnMgPSBQWV9HQ09CSihnYyktPm9iX3JlZmNudDsNCisJfQ0KK30N
> CisNCitzdGF0aWMgaW50DQordmlzaXRfZGVjcmVmKFB5T2JqZWN0ICpvcCwgdm9pZCAqZGF0
> YSkNCit7DQorCWlmIChvcCAmJiBQWV9JU0dDKG9wKSkgew0KKwkJUFlfR0NJTkZPX1VOU0FG
> RShvcCktPmdjX3JlZnMtLTsNCisJfQ0KKwlyZXR1cm4gMTsNCit9DQorDQorLyogU3VidHJh
> Y3QgaW50ZXJuYWwgcmVmZXJlbmNlcyBmcm9tIGdjX3JlZnMgKi8NCitzdGF0aWMgdm9pZA0K
> K3N1YnRyYWN0X3JlZnMoUHlHQ0luZm8gKmNvbnRhaW5lcnMpDQorew0KKwlyZWN1cnNlcHJv
> YyByZWN1cnNlOw0KKwlQeUdDSW5mbyAqZ2MgPSBjb250YWluZXJzLT5nY19uZXh0Ow0KKwlm
> b3IgKDsgZ2MgIT0gY29udGFpbmVyczsgZ2M9Z2MtPmdjX25leHQpIHsNCisJCXJlY3Vyc2Ug
> PSBQWV9HQ09CSihnYyktPm9iX3R5cGUtPnRwX3JlY3Vyc2U7DQorCQkodm9pZCkgcmVjdXJz
> ZShQWV9HQ09CSihnYyksDQorCQkJICAgICAgICh2aXNpdHByb2MpdmlzaXRfZGVjcmVmLA0K
> KwkJCSAgICAgICBOVUxMKTsNCisJfQ0KK30NCisNCisvKiBBcHBlbmQgb2JqZWN0cyB3aXRo
> IGdjX3JlZnMgPiAwIHRvIHJvb3RzIGxpc3QgKi8NCitzdGF0aWMgdm9pZA0KK21vdmVfcm9v
> dHMoUHlHQ0luZm8gKmNvbnRhaW5lcnMsIFB5R0NJbmZvICpyb290cykNCit7DQorCVB5R0NJ
> bmZvICpuZXh0Ow0KKwlQeUdDSW5mbyAqZ2MgPSBjb250YWluZXJzLT5nY19uZXh0Ow0KKwl3
> aGlsZSAoZ2MgIT0gY29udGFpbmVycykgew0KKwkJbmV4dCA9IGdjLT5nY19uZXh0Ow0KKwkJ
> aWYgKGdjLT5nY19yZWZzID4gMCkgew0KKwkJCUxJU1RfUkVNT1ZFKGdjKTsNCisJCQlMSVNU
> X0FQUEVORChnYywgcm9vdHMpOw0KKwkJCWdjLT5nY19yZWZzID0gR0NfTU9WRUQ7DQorCQl9
> DQorCQlnYyA9IG5leHQ7DQorCX0NCit9DQorDQorc3RhdGljIGludA0KK3Zpc2l0X3JlYWNo
> YWJsZShQeU9iamVjdCAqb3AsIFB5R0NJbmZvICpyb290cykNCit7DQorCVB5R0NJbmZvICpn
> YyA9IFBZX0dDSU5GTyhvcCk7DQorCWlmIChnYyAmJiBnYy0+Z2NfcmVmcyAhPSBHQ19NT1ZF
> RCkgew0KKwkJTElTVF9SRU1PVkUoZ2MpOw0KKwkJTElTVF9BUFBFTkQoZ2MsIHJvb3RzKTsN
> CisJCWdjLT5nY19yZWZzID0gR0NfTU9WRUQ7DQorCX0NCisJcmV0dXJuIDE7DQorfQ0KKw0K
> Ky8qIE1vdmUgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gcmVhY2hhYmxlIHRvIHJlYWNoYWJs
> ZSBzZXQuICovDQorc3RhdGljIHZvaWQNCittb3ZlX3Jvb3RfcmVhY2hhYmxlKFB5R0NJbmZv
> ICpyZWFjaGFibGUpDQorew0KKwlyZWN1cnNlcHJvYyByZWN1cnNlOw0KKwlQeUdDSW5mbyAq
> Z2MgPSByZWFjaGFibGUtPmdjX25leHQ7DQorCWZvciAoOyBnYyAhPSByZWFjaGFibGU7IGdj
> PWdjLT5nY19uZXh0KSB7DQorCQkvKiBjYXJlZnVsLCByZWFjaGFibGUgbGlzdCBpcyBncm93
> aW5nIGhlcmUgKi8NCisJCVB5T2JqZWN0ICpvcCA9IFBZX0dDT0JKKGdjKTsNCisJCXJlY3Vy
> c2UgPSBvcC0+b2JfdHlwZS0+dHBfcmVjdXJzZTsNCisJCSh2b2lkKSByZWN1cnNlKG9wLA0K
> KwkJCSAgICAgICAodmlzaXRwcm9jKXZpc2l0X3JlYWNoYWJsZSwNCisJCQkgICAgICAgKHZv
> aWQgKilyZWFjaGFibGUpOw0KKwl9DQorfQ0KKw0KKy8qIG1vdmUgYWxsIG9iamVjdHMgd2l0
> aCBmaW5hbGl6ZXJzIChpbnN0YW5jZXMgd2l0aCBfX2RlbF9fKSAqLw0KK3N0YXRpYyB2b2lk
> DQorbW92ZV9maW5hbGl6ZXJzKFB5R0NJbmZvICp1bnJlYWNoYWJsZSwgUHlHQ0luZm8gKmZp
> bmFsaXplcnMpDQorew0KKwlQeUdDSW5mbyAqbmV4dDsNCisJUHlHQ0luZm8gKmdjID0gdW5y
> ZWFjaGFibGUtPmdjX25leHQ7DQorCXN0YXRpYyBQeU9iamVjdCAqZGVsc3RyOw0KKwlpZiAo
> ZGVsc3RyID09IE5VTEwpIHsNCisJCWRlbHN0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJp
> bmcoIl9fZGVsX18iKTsNCisJfQ0KKwlmb3IgKDsgZ2MgIT0gdW5yZWFjaGFibGU7IGdjPW5l
> eHQpIHsNCisJCVB5T2JqZWN0ICpvcCA9IFBZX0dDT0JKKGdjKTsNCisJCW5leHQgPSBnYy0+
> Z2NfbmV4dDsNCisJCWlmIChQeUluc3RhbmNlX0NoZWNrKG9wKSAmJiBQeU9iamVjdF9IYXNB
> dHRyKG9wLCBkZWxzdHIpKSB7DQorCQkJTElTVF9SRU1PVkUoZ2MpOw0KKwkJCUxJU1RfQVBQ
> RU5EKGdjLCBmaW5hbGl6ZXJzKTsNCisJCX0NCisJfQ0KK30NCisNCisNCisvKiBjYWxsZWQg
> YnkgdHBfcmVjdXJzZSAqLw0KK3N0YXRpYyBpbnQNCit2aXNpdF9maW5hbGl6ZXJfcmVhY2hh
> YmxlKFB5T2JqZWN0ICpvcCwgUHlHQ0luZm8gKmZpbmFsaXplcnMpDQorew0KKwlQeUdDSW5m
> byAqZ2MgPSBQWV9HQ0lORk8ob3ApOw0KKwlpZiAoZ2MgJiYgZ2MtPmdjX3JlZnMgIT0gR0Nf
> TU9WRUQpIHsNCisJCUxJU1RfUkVNT1ZFKGdjKTsNCisJCUxJU1RfQVBQRU5EKGdjLCBmaW5h
> bGl6ZXJzKTsNCisJCWdjLT5nY19yZWZzID0gR0NfTU9WRUQ7DQorCX0NCisJcmV0dXJuIDE7
> DQorfQ0KKw0KKy8qIE1vdmUgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gcm9vdHMgdG8gcm9v
> dHMgKi8NCitzdGF0aWMgdm9pZA0KK21vdmVfZmluYWxpemVyX3JlYWNoYWJsZShQeUdDSW5m
> byAqZmluYWxpemVycykNCit7DQorCXJlY3Vyc2Vwcm9jIHJlY3Vyc2U7DQorCVB5R0NJbmZv
> ICpnYyA9IGZpbmFsaXplcnMtPmdjX25leHQ7DQorCWZvciAoOyBnYyAhPSBmaW5hbGl6ZXJz
> OyBnYz1nYy0+Z2NfbmV4dCkgew0KKwkJLyogY2FyZWZ1bCwgZmluYWxpemVycyBsaXN0IGlz
> IGdyb3dpbmcgaGVyZSAqLw0KKwkJcmVjdXJzZSA9IFBZX0dDT0JKKGdjKS0+b2JfdHlwZS0+
> dHBfcmVjdXJzZTsNCisJCSh2b2lkKSByZWN1cnNlKFBZX0dDT0JKKGdjKSwgDQorCQkJICAg
> ICAgICh2aXNpdHByb2MpdmlzaXRfZmluYWxpemVyX3JlYWNoYWJsZSwNCisJCQkgICAgICAg
> KHZvaWQgKilmaW5hbGl6ZXJzKTsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK2RlYnVn
> X2luc3RhbmNlKFB5T2JqZWN0ICpvdXRwdXQsIGNoYXIgKm1zZywgUHlJbnN0YW5jZU9iamVj
> dCAqaW5zdCkNCit7DQorCWNoYXIgYnVmWzIwMF07DQorCWNoYXIgKmNuYW1lOw0KKwkvKiBi
> ZSBjYXJlZnVsIG5vdCB0byBjcmVhdGUgbmV3IGRpY3Rpb25hcmllcyAqLw0KKwlQeU9iamVj
> dCAqY2xhc3NuYW1lID0gaW5zdC0+aW5fY2xhc3MtPmNsX25hbWU7DQorCWlmIChjbGFzc25h
> bWUgIT0gTlVMTCAmJiBQeVN0cmluZ19DaGVjayhjbGFzc25hbWUpKQ0KKwkJY25hbWUgPSBQ
> eVN0cmluZ19Bc1N0cmluZyhjbGFzc25hbWUpOw0KKwllbHNlDQorCQljbmFtZSA9ICI/IjsN
> CisJc3ByaW50ZihidWYsICJnYzogJXM8JS4xMDBzIGluc3RhbmNlIGF0ICVseD5cbiIsIA0K
> KwkJCW1zZywgY25hbWUsIChsb25nKWluc3QpOw0KKwlQeUZpbGVfV3JpdGVTdHJpbmcoYnVm
> LCBvdXRwdXQpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK2RlYnVnX2N5Y2xlKFB5T2JqZWN0
> ICpvdXRwdXQsIGNoYXIgKm1zZywgUHlPYmplY3QgKm9wKQ0KK3sNCisJaWYgKChkZWJ1ZyAm
> IERFQlVHX0lOU1RBTkNFUykgJiYgUHlJbnN0YW5jZV9DaGVjayhvcCkpIHsNCisJCWRlYnVn
> X2luc3RhbmNlKG91dHB1dCwgbXNnLCAoUHlJbnN0YW5jZU9iamVjdCAqKW9wKTsNCisJfSBl
> bHNlIGlmIChkZWJ1ZyAmIERFQlVHX09CSkVDVFMpIHsNCisJCWNoYXIgYnVmWzIwMF07DQor
> CQlzcHJpbnRmKGJ1ZiwgImdjOiAlczxPYmplY3QgMHgleD5cbiIsIG1zZywgKGxvbmcpb3Ap
> Ow0KKwkJUHlGaWxlX1dyaXRlU3RyaW5nKGJ1Ziwgb3V0cHV0KTsNCisJfQ0KK30NCisNCisv
> KiBIYW5kbGUgdW5jb2xsZWN0YWJsZSBnYXJiYWdlIChjeWNsZXMgd2l0aCBmaW5hbGl6ZXJz
> KS4gKi8NCitzdGF0aWMgdm9pZA0KK2hhbmRsZV9maW5hbGl6ZXJzKFB5R0NJbmZvICpmaW5h
> bGl6ZXJzLCBQeUdDSW5mbyAqb2xkKQ0KK3sNCisJUHlHQ0luZm8gKmdjOw0KKwlpZiAoZ2Fy
> YmFnZSA9PSBOVUxMKSB7DQorCQlnYXJiYWdlID0gUHlMaXN0X05ldygwKTsNCisJfQ0KKwlm
> b3IgKGdjID0gZmluYWxpemVycy0+Z2NfbmV4dDsgZ2MgIT0gZmluYWxpemVyczsNCisJCQln
> YyA9IGZpbmFsaXplcnMtPmdjX25leHQpIHsNCisJCVB5T2JqZWN0ICpvcCA9IFBZX0dDT0JK
> KGdjKTsNCisJCS8qIEFkZCBhbGwgaW5zdGFuY2VzIHRvIGEgUHl0aG9uIGFjY2Vzc2libGUg
> bGlzdCBvZiBnYXJiYWdlICovDQorCQlpZiAoUHlJbnN0YW5jZV9DaGVjayhvcCkpIHsNCisJ
> CQlQeUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKTsNCisJCX0NCisJCS8qIFdlIGFzc3VtZSB0
> aGF0IGFsbCBvYmplY3RzIGluIGZpbmFsaXplcnMgYXJlIHJlYWNoYWJsZSBmcm9tDQorCQkg
> KiBpbnN0YW5jZXMuICBPbmNlIHdlIGFkZCB0aGUgaW5zdGFuY2VzIHRvIHRoZSBnYXJiYWdl
> IGxpc3QNCisJCSAqIGV2ZXJ5dGhpbmcgaXMgcmVhY2hhYmxlIGZyb20gUHl0aG9uIGFnYWlu
> LiAqLw0KKwkJTElTVF9SRU1PVkUoZ2MpOw0KKwkJTElTVF9BUFBFTkQoZ2MsIG9sZCk7DQor
> CX0NCit9DQorDQorLyogQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBieSBjbGVhcmluZyB0aGUg
> Y29udGFpbmVycyBpbnZvbHZlZC4gIFRoaXMgaXMNCisgKiB0cmlja3kgYnVzaW5lc3MgYXMg
> dGhlIGxpc3RzIGNhbiBiZSBjaGFuZ2luZyBhbmQgd2UgZG9uJ3Qga25vdyB3aGljaA0KKyAq
> IG9iamVjdHMgbWF5IGJlIGZyZWVkLiAgSXQgaXMgcG9zc2libGUgSSBzY3Jld2VkIHNvbWV0
> aGluZyB1cCBoZXJlLiAqLw0KK3N0YXRpYyB2b2lkDQorZGVsZXRlX2dhcmJhZ2UoUHlHQ0lu
> Zm8gKnVucmVhY2hhYmxlLCBQeUdDSW5mbyAqb2xkKQ0KK3sNCisJaW5xdWlyeSBjbGVhcjsN
> CisNCisJd2hpbGUgKHVucmVhY2hhYmxlLT5nY19uZXh0ICE9IHVucmVhY2hhYmxlKSB7DQor
> CQlQeUdDSW5mbyAqZ2MgPSB1bnJlYWNoYWJsZS0+Z2NfbmV4dDsNCisJCVB5T2JqZWN0ICpv
> cCA9IFBZX0dDT0JKKGdjKTsNCisJCWlmICgoY2xlYXIgPSBvcC0+b2JfdHlwZS0+dHBfY2xl
> YXIpICE9IE5VTEwpIHsNCisJCQlQeV9JTkNSRUYob3ApOw0KKwkJCWNsZWFyKChQeU9iamVj
> dCAqKW9wKTsNCisJCQlQeV9ERUNSRUYob3ApOw0KKwkJfQ0KKwkJLyogb25seSB0cnkgdG8g
> Y2FsbCB0cF9jbGVhciBvbmNlIGZvciBlYWNoIG9iamVjdCAqLw0KKwkJaWYgKHVucmVhY2hh
> YmxlLT5nY19uZXh0ID09IGdjKSB7DQorCQkJLyogc3RpbGwgYWxpdmUsIG1vdmUgaXQsIGl0
> IG1heSBkaWUgbGF0ZXIgKi8NCisJCQlMSVNUX1JFTU9WRShnYyk7DQorCQkJTElTVF9BUFBF
> TkQoZ2MsIG9sZCk7DQorCQl9DQorCX0NCit9DQorDQorLyogVGhpcyBpcyB0aGUgbWFpbiBm
> dW5jdGlvbi4gIFJlYWQgdGhpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUNCisgKiBjb2xsZWN0
> aW9uIHByb2Nlc3Mgd29ya3MuICovDQorc3RhdGljIGxvbmcNCitjb2xsZWN0KFB5R0NJbmZv
> ICp5b3VuZywgUHlHQ0luZm8gKm9sZCkNCit7DQorCWxvbmcgbiA9IDA7DQorCWxvbmcgbSA9
> IDA7DQorCVB5R0NJbmZvIHJlYWNoYWJsZTsNCisJUHlHQ0luZm8gdW5yZWFjaGFibGU7DQor
> CVB5R0NJbmZvIGZpbmFsaXplcnM7DQorCVB5R0NJbmZvICpnYzsNCisJUHlPYmplY3QgKm91
> dHB1dCA9IE5VTEw7DQorDQorCWlmIChkZWJ1Zykgew0KKwkJb3V0cHV0ID0gUHlTeXNfR2V0
> T2JqZWN0KCJzdGRlcnIiKTsNCisJfQ0KKwlpZiAoZGVidWcgJiBERUJVR19TVEFUUykgew0K
> KwkJY2hhciBidWZbMTAwXTsNCisJCXNwcmludGYoYnVmLCAiZ2M6IGNvbGxlY3RpbmcgZ2Vu
> ZXJhdGlvbiAlZC4uLlxuIiwgZ2VuZXJhdGlvbik7DQorCQlQeUZpbGVfV3JpdGVTdHJpbmco
> YnVmLG91dHB1dCk7DQorCQlzcHJpbnRmKGJ1ZiwgImdjOiBvYmplY3RzIGluIGVhY2ggZ2Vu
> ZXJhdGlvbjogJWQgJWQgJWRcbiIsDQorCQkJTElTVF9TSVpFKCZnZW5lcmF0aW9uMCksDQor
> CQkJTElTVF9TSVpFKCZnZW5lcmF0aW9uMSksDQorCQkJTElTVF9TSVpFKCZnZW5lcmF0aW9u
> MikpOw0KKwkJUHlGaWxlX1dyaXRlU3RyaW5nKGJ1ZixvdXRwdXQpOw0KKwl9DQorDQorCS8q
> IFVzaW5nIG9iX3JlZmNudCBhbmQgZ2NfcmVmcywgY2FsY3VsYXRlIHdoaWNoIG9iamVjdHMg
> aW4gdGhlDQorCSAqIGNvbnRhaW5lciBzZXQgYXJlIHJlYWNoYWJsZSBmcm9tIG91dHNpZGUg
> dGhlIHNldCAoaWUuIGhhdmUgYQ0KKwkgKiByZWZjb3VudCBncmVhdGVyIHRoYW4gMCB3aGVu
> IGFsbCB0aGUgcmVmZXJlbmNlcyB3aXRoaW4gdGhlDQorCSAqIHNldCBhcmUgdGFrZW4gaW50
> byBhY2NvdW50ICovDQorCXVwZGF0ZV9yZWZzKHlvdW5nKTsNCisJc3VidHJhY3RfcmVmcyh5
> b3VuZyk7DQorDQorCS8qIE1vdmUgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSBvdXRzaWRl
> IHRoZSBzZXQgaW50byB0aGUNCisJICogcmVhY2hhYmxlIHNldCAoaWUuIGdjX3JlZnMgPiAw
> KS4gIE5leHQsIG1vdmUgZXZlcnl0aGluZw0KKwkgKiByZWFjaGFibGUgZnJvbSBvYmplY3Rz
> IGluIHRoZSByZWFjaGFibGUgc2V0LiAqLw0KKwlMSVNUX0lOSVQoJnJlYWNoYWJsZSk7DQor
> CW1vdmVfcm9vdHMoeW91bmcsICZyZWFjaGFibGUpOw0KKwltb3ZlX3Jvb3RfcmVhY2hhYmxl
> KCZyZWFjaGFibGUpOw0KKw0KKwkvKiBtb3ZlIHVucmVhY2hhYmxlIG9iamVjdHMgdG8gYSB0
> ZW1wb3JhcnkgbGlzdCwgbmV3IG9iamVjdHMgY2FuIGJlDQorCSAqIGFsbG9jYXRlZCBhZnRl
> ciB0aGlzIHBvaW50ICovDQorCUxJU1RfSU5JVCgmdW5yZWFjaGFibGUpOw0KKwlMSVNUX01P
> VkUoeW91bmcsICZ1bnJlYWNoYWJsZSk7DQorCS8vTElTVF9JTklUKHlvdW5nKTsNCisNCisJ
> LyogbW92ZSByZWFjaGFibGUgb2JqZWN0cyB0byBuZXh0IGdlbmVyYXRpb24gKi8NCisJTElT
> VF9MQVBQRU5EKCZyZWFjaGFibGUsIG9sZCk7DQorDQorCS8qIE1vdmUgb2JqZWN0cyByZWFj
> aGFibGUgZnJvbSBmaW5hbGl6ZXJzLCB3ZSBjYW4ndCBzYWZlbHkgZGVsZXRlDQorCSAqIHRo
> ZW0uICBQeXRob24gcHJvZ3JhbW1lcnMgc2hvdWxkIHRha2UgY2FyZSBub3QgdG8gY3JlYXRl
> IHN1Y2gNCisJICogdGhpbmdzLiAgRm9yIFB5dGhvbiBmaW5hbGl6ZXJzIG1lYW5zIGluc3Rh
> bmNlIG9iamVjdHMgd2l0aA0KKwkgKiBfX2RlbF9fIG1ldGhvZHMuICovDQorCUxJU1RfSU5J
> VCgmZmluYWxpemVycyk7DQorCW1vdmVfZmluYWxpemVycygmdW5yZWFjaGFibGUsICZmaW5h
> bGl6ZXJzKTsNCisJbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlKCZmaW5hbGl6ZXJzKTsNCisN
> CisJLyogQ29sbGVjdCBzdGF0aXN0aWNzIG9uIGNvbGxlY3RhYmxlIG9iamVjdHMgZm91bmQg
> YW5kIHByaW50DQorCSAqIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gKi8NCisJZm9yIChnYyA9
> IHVucmVhY2hhYmxlLmdjX25leHQ7IGdjICE9ICZ1bnJlYWNoYWJsZTsNCisJCQlnYyA9IGdj
> LT5nY19uZXh0KSB7DQorCQltKys7DQorCQlpZiAob3V0cHV0ICE9IE5VTEwgJiYgKGRlYnVn
> ICYgREVCVUdfQ09MTEVDVEFCTEUpKSB7DQorCQkJZGVidWdfY3ljbGUob3V0cHV0LCAiY29s
> bGVjdGFibGUgIiwgUFlfR0NPQkooZ2MpKTsNCisJCX0NCisJfQ0KKwkvKiBjYWxsIHRwX2Ns
> ZWFyIG9uIG9iamVjdHMgaW4gdGhlIGNvbGxlY3RhYmxlIHNldC4gIFRoaXMgd2lsbCBjYXVz
> ZQ0KKwkgKiB0aGUgcmVmZXJlbmNlIGN5Y2xlcyB0byBiZSBicm9rZW4uIEl0IG1heSBhbHNv
> IGNhdXNlIHNvbWUgb2JqZWN0cyBpbg0KKwkgKiBmaW5hbGl6ZXJzIHRvIGJlIGZyZWVkICov
> DQorCWRlbGV0ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSwgb2xkKTsNCisNCisJLyogQ29sbGVj
> dCBzdGF0aXN0aWNzIG9uIHVuY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCBhbmQgcHJpbnQN
> CisJICogZGVidWdnaW5nIGluZm9ybWF0aW9uLiAqLw0KKwlmb3IgKGdjID0gZmluYWxpemVy
> cy5nY19uZXh0OyBnYyAhPSAmZmluYWxpemVyczsNCisJCQlnYyA9IGdjLT5nY19uZXh0KSB7
> DQorCQluKys7DQorCQlpZiAob3V0cHV0ICE9IE5VTEwgJiYgKGRlYnVnICYgREVCVUdfVU5D
> T0xMRUNUQUJMRSkpIHsNCisJCQlkZWJ1Z19jeWNsZShvdXRwdXQsICJ1bmNvbGxlY3RhYmxl
> ICIsIFBZX0dDT0JKKGdjKSk7DQorCQl9DQorCX0NCisJaWYgKG91dHB1dCAhPSBOVUxMICYm
> IChkZWJ1ZyAmIERFQlVHX1NUQVRTKSkgew0KKwkJaWYgKG0gPT0gMCAmJiBuID09IDApIHsN
> CisJCQlQeUZpbGVfV3JpdGVTdHJpbmcoImdjOiBkb25lLlxuIiwgb3V0cHV0KTsNCisJCX0g
> ZWxzZSB7DQorCQkJY2hhciBidWZbMjAwXTsNCisJCQlzcHJpbnRmKGJ1ZiwNCisJCQkJImdj
> OiBkb25lLCAlZCB1bnJlYWNoYWJsZSwgJWQgdW5jb2xsZWN0YWJsZS5cbiIsDQorCQkJCW4r
> bSwgbik7DQorCQkJUHlGaWxlX1dyaXRlU3RyaW5nKGJ1Ziwgb3V0cHV0KTsNCisJCX0NCisJ
> fQ0KKw0KKwkvKiBBcHBlbmQgaW5zdGFuY2VzIGluIHRoZSB1bmNvbGxlY3RhYmxlIHNldCB0
> byBhIFB5dGhvbg0KKwkgKiByZWFjaGFibGUgbGlzdCBvZiBnYXJiYWdlLiAgVGhlIHByb2dy
> YW1tZXIgaGFzIHRvIGRlYWwgd2l0aA0KKwkgKiB0aGlzIGlmIHRoZXkgaW5zaXN0IG9uIGNy
> ZWF0aW5nIHRoaXMgdHlwZSBvZiBzdHJ1Y3R1cmUuICovDQorCWhhbmRsZV9maW5hbGl6ZXJz
> KCZmaW5hbGl6ZXJzLCBvbGQpOw0KKw0KKwlhbGxvY2F0ZWQgPSAwOw0KKwlQeUVycl9DbGVh
> cigpOyAvKiBpbiBjYXNlIHdyaXRpbmcgdG8gc3lzLnN0ZGVyciBmYWlsZWQgKi8NCisJcmV0
> dXJuIG4rbTsNCit9DQorDQorc3RhdGljIGxvbmcNCitjb2xsZWN0X2dlbmVyYXRpb25zKHZv
> aWQpDQorew0KKwlzdGF0aWMgbG9uZyBjb2xsZWN0aW9uczAgPSAwOw0KKwlzdGF0aWMgbG9u
> ZyBjb2xsZWN0aW9uczEgPSAwOw0KKwlsb25nIG47DQorDQorDQorCWlmIChjb2xsZWN0aW9u
> czEgPiB0aHJlc2hvbGQyKSB7DQorCQlnZW5lcmF0aW9uID0gMjsNCisJCUxJU1RfTEFQUEVO
> RCgmZ2VuZXJhdGlvbjAsICZnZW5lcmF0aW9uMik7DQorCQlMSVNUX0xBUFBFTkQoJmdlbmVy
> YXRpb24xLCAmZ2VuZXJhdGlvbjIpOw0KKwkJaWYgKGdlbmVyYXRpb24yLmdjX25leHQgIT0g
> JmdlbmVyYXRpb24yKSB7DQorCQkJbiA9IGNvbGxlY3QoJmdlbmVyYXRpb24yLCAmZ2VuZXJh
> dGlvbjIpOw0KKwkJfQ0KKwkJY29sbGVjdGlvbnMxID0gMDsNCisJfSBlbHNlIGlmIChjb2xs
> ZWN0aW9uczAgPiB0aHJlc2hvbGQxKSB7DQorCQlnZW5lcmF0aW9uID0gMTsNCisJCWNvbGxl
> Y3Rpb25zMSsrOw0KKwkJTElTVF9MQVBQRU5EKCZnZW5lcmF0aW9uMCwgJmdlbmVyYXRpb24x
> KTsNCisJCWlmIChnZW5lcmF0aW9uMS5nY19uZXh0ICE9ICZnZW5lcmF0aW9uMSkgew0KKwkJ
> CW4gPSBjb2xsZWN0KCZnZW5lcmF0aW9uMSwgJmdlbmVyYXRpb24yKTsNCisJCX0NCisJCWNv
> bGxlY3Rpb25zMCA9IDA7DQorCX0gZWxzZSB7DQorCQlnZW5lcmF0aW9uID0gMDsNCisJCWNv
> bGxlY3Rpb25zMCsrOw0KKwkJaWYgKGdlbmVyYXRpb24wLmdjX25leHQgIT0gJmdlbmVyYXRp
> b24wKSB7DQorCQkJbiA9IGNvbGxlY3QoJmdlbmVyYXRpb24wLCAmZ2VuZXJhdGlvbjEpOw0K
> KwkJfQ0KKwl9DQorCXJldHVybiBuOw0KK30NCisNCit2b2lkDQorUHlHQ19JbnNlcnQoUHlP
> YmplY3QgKm9wKQ0KK3sNCisJLyogY29sbGVjdGlvbiBsb2NrIHNpbmNlIGNvbGxlY3Rpbmcg
> bWF5IGNhdXNlIGFsbG9jYXRpb25zICovDQorCXN0YXRpYyBpbnQgY29sbGVjdGluZyA9IDA7
> DQorDQorI2lmZGVmIERFQlVHDQorCS8qZnByaW50ZihzdGRlcnIsICJJbnNlcnQgMHgleFxu
> Iiwgb3ApOyovDQorI2VuZGlmDQorCWlmICh0aHJlc2hvbGQwICYmIGFsbG9jYXRlZCA+IHRo
> cmVzaG9sZDAgJiYgIWNvbGxlY3RpbmcpIHsNCisJCWNvbGxlY3RpbmcrKzsNCisJCWNvbGxl
> Y3RfZ2VuZXJhdGlvbnMoKTsNCisJCWNvbGxlY3RpbmctLTsNCisJfQ0KKwlhbGxvY2F0ZWQr
> KzsNCisJTElTVF9BUFBFTkQoUFlfR0NJTkZPKG9wKSwgJmdlbmVyYXRpb24wKTsNCit9DQor
> DQordm9pZA0KK1B5R0NfUmVtb3ZlKFB5T2JqZWN0ICpvcCkNCit7DQorI2lmZGVmIERFQlVH
> DQorCS8qZnByaW50ZihzdGRlcnIsICJSZW1vdmUgMHgleFxuIiwgb3ApOyovDQorI2VuZGlm
> DQorCWlmIChhbGxvY2F0ZWQgPiAwKSB7DQorCQlhbGxvY2F0ZWQtLTsNCisJfQ0KKwlMSVNU
> X1JFTU9WRShQWV9HQ0lORk8ob3ApKTsNCit9DQorDQorDQorc3RhdGljIGNoYXIgY29sbGVj
> dF9fZG9jX19bXSA9DQorImNvbGxlY3QoKSAtPiBuXG4iDQorIlxuIg0KKyJSdW4gYSBmdWxs
> IGNvbGxlY3Rpb24uICBUaGUgbnVtYmVyIG9mIHVucmVhY2hhYmxlIG9iamVjdHMgaXMgcmV0
> dXJuZWQuXG4iDQorOw0KKw0KK3N0YXRpYyBQeU9iamVjdCAqDQorUHlfY29sbGVjdChzZWxm
> LCBhcmdzKQ0KKwlQeU9iamVjdCAqc2VsZjsNCisJUHlPYmplY3QgKmFyZ3M7DQorew0KKwls
> b25nIG47DQorDQorCWlmKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiKSkJLyogY2hlY2sg
> bm8gYXJncyAqLw0KKwkJcmV0dXJuIE5VTEw7DQorDQorCWdlbmVyYXRpb24gPSAyOw0KKwlM
> SVNUX0xBUFBFTkQoJmdlbmVyYXRpb24wLCAmZ2VuZXJhdGlvbjIpOw0KKwlMSVNUX0xBUFBF
> TkQoJmdlbmVyYXRpb24xLCAmZ2VuZXJhdGlvbjIpOw0KKwluID0gY29sbGVjdCgmZ2VuZXJh
> dGlvbjIsICZnZW5lcmF0aW9uMik7DQorDQorCXJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwg
> bik7DQorfQ0KKw0KK3N0YXRpYyBjaGFyIHNldF9kZWJ1Z19fZG9jX19bXSA9IA0KKyJzZXRf
> ZGVidWcoZmxhZ3MpIC0+IE5vbmVcbiINCisiXG4iDQorIlNldCB0aGUgZ2FyYmFnZSBjb2xs
> ZWN0aW9uIGRlYnVnZ2luZyBmbGFncy4gRGVidWdnaW5nIGluZm9ybWF0aW9uIGlzXG4iDQor
> IndyaXR0ZW4gdG8gc3lzLnN0ZGVyci5cbiINCisiXG4iDQorImZsYWdzIGlzIGFuIGludGVn
> ZXIgYW5kIGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgYml0cyB0dXJuZWQgb246XG4iDQorIlxu
> Ig0KKyIgIERFQlVHX1NUQVRTIC0gUHJpbnQgc3RhdGlzdGljcyBkdXJpbmcgY29sbGVjdGlv
> bi5cbiINCisiICBERUJVR19DT0xMRUNUQUJMRSAtIFByaW50IGNvbGxlY3RhYmxlIG9iamVj
> dHMgZm91bmQuXG4iDQorIiAgREVCVUdfVU5DT0xMRUNUQUJMRSAtIFByaW50IHVucmVhY2hh
> YmxlIGJ1dCB1bmNvbGxlY3RhYmxlIG9iamVjdHMgZm91bmQuXG4iDQorIiAgREVCVUdfSU5T
> VEFOQ0VTIC0gUHJpbnQgaW5zdGFuY2Ugb2JqZWN0cy5cbiINCisiICBERUJVR19PQkpFQ1RT
> IC0gUHJpbnQgb2JqZWN0cyBvdGhlciB0aGFuIGluc3RhbmNlcy5cbiINCisiICBERUJVR19M
> RUFLIC0gRGVidWcgbGVha2luZyBwcm9ncmFtcyAoZXZlcnl0aGluZyBidXQgU1RBVFMpLlxu
> Ig0KKzsNCisNCitzdGF0aWMgUHlPYmplY3QgKg0KK1B5X3NldF9kZWJ1ZyhzZWxmLCBhcmdz
> KQ0KKwlQeU9iamVjdCAqc2VsZjsNCisJUHlPYmplY3QgKmFyZ3M7DQorew0KKwlpZiAoIVB5
> QXJnX1BhcnNlVHVwbGUoYXJncywgImwiLCAmZGVidWcpKQ0KKwkJcmV0dXJuIE5VTEw7DQor
> DQorCVB5X0lOQ1JFRihQeV9Ob25lKTsNCisJcmV0dXJuIFB5X05vbmU7DQorfQ0KKw0KK3N0
> YXRpYyBjaGFyIGdldF9kZWJ1Z19fZG9jX19bXSA9IA0KKyJnZXRfZGVidWcoKSAtPiBmbGFn
> c1xuIg0KKyJcbiINCisiR2V0IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gZGVidWdnaW5nIGZs
> YWdzLlxuIg0KKzsNCisNCitzdGF0aWMgUHlPYmplY3QgKg0KK1B5X2dldF9kZWJ1ZyhzZWxm
> LCBhcmdzKQ0KKwlQeU9iamVjdCAqc2VsZjsNCisJUHlPYmplY3QgKmFyZ3M7DQorew0KKwlp
> ZighUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiIikpCS8qIG5vIGFyZ3MgKi8NCisJCXJldHVy
> biBOVUxMOw0KKw0KKwlyZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIGRlYnVnKTsNCit9DQor
> DQorc3RhdGljIGNoYXIgc2V0X3RocmVzaF9fZG9jX19bXSA9DQorInNldF90aHJlc2hvbGQo
> dGhyZXNob2xkMCwgW3RocmVob2xkMSwgdGhyZXNob2xkMl0pIC0+IE5vbmVcbiINCisiXG4i
> DQorIlNldHMgdGhlIGNvbGxlY3Rpb24gdGhyZXNob2xkcy4gIFNldHRpbmcgdGhyZXNob2xk
> MCB0byB6ZXJvIGRpc2FibGVzXG4iDQorImNvbGxlY3Rpb24uXG4iDQorOw0KKw0KK3N0YXRp
> YyBQeU9iamVjdCAqDQorUHlfc2V0X3RocmVzaChzZWxmLCBhcmdzKQ0KKwlQeU9iamVjdCAq
> c2VsZjsNCisJUHlPYmplY3QgKmFyZ3M7DQorew0KKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUo
> YXJncywgIml8aWkiLCAmdGhyZXNob2xkMCwgDQorCQkJCSZ0aHJlc2hvbGQxLCAmdGhyZXNo
> b2xkMikpDQorCQlyZXR1cm4gTlVMTDsNCisNCisJUHlfSU5DUkVGKFB5X05vbmUpOw0KKwly
> ZXR1cm4gUHlfTm9uZTsNCit9DQorDQorc3RhdGljIGNoYXIgZ2V0X3RocmVzaF9fZG9jX19b
> XSA9DQorImdldF90cmVzaG9sZCgpIC0+ICh0aHJlc2hvbGQwLCB0aHJlc2hvbGQxLCB0aHJl
> c2hvbGQyKVxuIg0KKyJcbiINCisiUmV0dXJuIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24gdGhy
> ZXNob2xkc1xuIg0KKzsNCisNCitzdGF0aWMgUHlPYmplY3QgKg0KK1B5X2dldF90aHJlc2go
> c2VsZiwgYXJncykNCisJUHlPYmplY3QgKnNlbGY7DQorCVB5T2JqZWN0ICphcmdzOw0KK3sN
> CisJaWYoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiIpKQkvKiBubyBhcmdzICovDQorCQly
> ZXR1cm4gTlVMTDsNCisNCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaWkpIiwgdGhyZXNo
> b2xkMCwgdGhyZXNob2xkMSwgdGhyZXNob2xkMik7DQorfQ0KKw0KKw0KK3N0YXRpYyBjaGFy
> IGdjX19kb2NfXyBbXSA9DQorIlRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUg
> Z2FyYmFnZSBjb2xsZWN0b3IgZm9yIHJlZmVyZW5jZSBjeWNsZXMuXG4iDQorIlxuIg0KKyJj
> b2xsZWN0KCkgLS0gRG8gYSBmdWxsIGNvbGxlY3Rpb24gcmlnaHQgbm93LlxuIg0KKyJzZXRf
> ZGVidWcoKSAtLSBTZXQgZGVidWdnaW5nIGZsYWdzLlxuIg0KKyJnZXRfZGVidWcoKSAtLSBH
> ZXQgZGVidWdnaW5nIGZsYWdzLlxuIg0KKyJzZXRfdGhyZXNob2xkKCkgLS0gU2V0IHRoZSBj
> b2xsZWN0aW9uIHRocmVzaG9sZHMuXG4iDQorImdldF90aHJlc2hvbGQoKSAtLSBSZXR1cm4g
> dGhlIGN1cnJlbnQgdGhlIGNvbGxlY3Rpb24gdGhyZXNob2xkcy5cbiINCis7DQorDQorc3Rh
> dGljIFB5TWV0aG9kRGVmIEdjTWV0aG9kc1tdID0gew0KKwl7InNldF9kZWJ1ZyIsCQlQeV9z
> ZXRfZGVidWcsICBNRVRIX1ZBUkFSR1MsIHNldF9kZWJ1Z19fZG9jX199LA0KKwl7ImdldF9k
> ZWJ1ZyIsCQlQeV9nZXRfZGVidWcsICBNRVRIX1ZBUkFSR1MsIGdldF9kZWJ1Z19fZG9jX199
> LA0KKwl7InNldF90aHJlc2hvbGQiLAlQeV9zZXRfdGhyZXNoLCBNRVRIX1ZBUkFSR1MsIHNl
> dF90aHJlc2hfX2RvY19ffSwNCisJeyJnZXRfdGhyZXNob2xkIiwJUHlfZ2V0X3RocmVzaCwg
> TUVUSF9WQVJBUkdTLCBnZXRfdGhyZXNoX19kb2NfX30sDQorCXsiY29sbGVjdCIsCQlQeV9j
> b2xsZWN0LCAgICBNRVRIX1ZBUkFSR1MsIGNvbGxlY3RfX2RvY19ffSwNCisJe05VTEwsCU5V
> TEx9CQkvKiBTZW50aW5lbCAqLw0KK307DQorDQordm9pZA0KK2luaXRnYyh2b2lkKQ0KK3sN
> CisJUHlPYmplY3QgKm07DQorCVB5T2JqZWN0ICpkOw0KKw0KKwltID0gUHlfSW5pdE1vZHVs
> ZTQoImdjIiwNCisJCQkgICAgICBHY01ldGhvZHMsDQorCQkJICAgICAgZ2NfX2RvY19fLA0K
> KwkJCSAgICAgIE5VTEwsDQorCQkJICAgICAgUFlUSE9OX0FQSV9WRVJTSU9OKTsNCisJZCA9
> IFB5TW9kdWxlX0dldERpY3QobSk7DQorCWlmIChnYXJiYWdlID09IE5VTEwpIHsNCisJCWdh
> cmJhZ2UgPSBQeUxpc3RfTmV3KDApOw0KKwl9DQorCVB5RGljdF9TZXRJdGVtU3RyaW5nKGQs
> ICJnYXJiYWdlIiwgZ2FyYmFnZSk7DQorCVB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJERUJV
> R19TVEFUUyIsDQorCQkJUHlJbnRfRnJvbUxvbmcoREVCVUdfU1RBVFMpKTsNCisJUHlEaWN0
> X1NldEl0ZW1TdHJpbmcoZCwgIkRFQlVHX0NPTExFQ1RBQkxFIiwNCisJCQlQeUludF9Gcm9t
> TG9uZyhERUJVR19DT0xMRUNUQUJMRSkpOw0KKwlQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAi
> REVCVUdfVU5DT0xMRUNUQUJMRSIsDQorCQkJUHlJbnRfRnJvbUxvbmcoREVCVUdfVU5DT0xM
> RUNUQUJMRSkpOw0KKwlQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiREVCVUdfSU5TVEFOQ0VT
> IiwNCisJCQlQeUludF9Gcm9tTG9uZyhERUJVR19JTlNUQU5DRVMpKTsNCisJUHlEaWN0X1Nl
> dEl0ZW1TdHJpbmcoZCwgIkRFQlVHX09CSkVDVFMiLA0KKwkJCVB5SW50X0Zyb21Mb25nKERF
> QlVHX09CSkVDVFMpKTsNCisJUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkRFQlVHX0xFQUsi
> LA0KKwkJCVB5SW50X0Zyb21Mb25nKERFQlVHX0xFQUspKTsNCit9DQorDQotLS0gUHl0aG9u
> LWN2cy9PYmplY3RzL2NsYXNzb2JqZWN0LmMJVHVlIEZlYiAyOSAxNDo1NToxNSAyMDAwDQor
> KysgUHl0aG9uLWdjL09iamVjdHMvY2xhc3NvYmplY3QuYwlNb24gQXByIDI0IDIxOjE5OjE4
> IDIwMDANCkBAIC0xMTAsNyArMTEwLDcgQEANCiAJCX0NCiAJCVB5X0lOQ1JFRihiYXNlcyk7
> DQogCX0NCi0Jb3AgPSBQeU9iamVjdF9ORVcoUHlDbGFzc09iamVjdCwgJlB5Q2xhc3NfVHlw
> ZSk7DQorCW9wID0gUHlPYmplY3RfTmV3KFB5Q2xhc3NPYmplY3QsICZQeUNsYXNzX1R5cGUp
> Ow0KIAlpZiAob3AgPT0gTlVMTCkgew0KIAkJUHlfREVDUkVGKGJhc2VzKTsNCiAJCXJldHVy
> biBOVUxMOw0KQEAgLTEzMSw2ICsxMzEsOSBAQA0KIAlQeV9YSU5DUkVGKG9wLT5jbF9nZXRh
> dHRyKTsNCiAJUHlfWElOQ1JFRihvcC0+Y2xfc2V0YXR0cik7DQogCVB5X1hJTkNSRUYob3At
> PmNsX2RlbGF0dHIpOw0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorCVB5R0NfSW5zZXJ0KChQ
> eU9iamVjdCAqKW9wKTsNCisjZW5kaWYNCiAJcmV0dXJuIChQeU9iamVjdCAqKSBvcDsNCiB9
> DQogDQpAQCAtMTQwLDEzICsxNDMsMTYgQEANCiBjbGFzc19kZWFsbG9jKG9wKQ0KIAlQeUNs
> YXNzT2JqZWN0ICpvcDsNCiB7DQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJUHlHQ19SZW1v
> dmUoKFB5T2JqZWN0ICopb3ApOw0KKyNlbmRpZg0KIAlQeV9ERUNSRUYob3AtPmNsX2Jhc2Vz
> KTsNCiAJUHlfREVDUkVGKG9wLT5jbF9kaWN0KTsNCiAJUHlfWERFQ1JFRihvcC0+Y2xfbmFt
> ZSk7DQogCVB5X1hERUNSRUYob3AtPmNsX2dldGF0dHIpOw0KIAlQeV9YREVDUkVGKG9wLT5j
> bF9zZXRhdHRyKTsNCiAJUHlfWERFQ1JFRihvcC0+Y2xfZGVsYXR0cik7DQotCWZyZWUoKEFO
> WSAqKW9wKTsNCisJUHlPYmplY3RfRGVsKChQeU9iamVjdCAqKW9wKTsNCiB9DQogDQogc3Rh
> dGljIFB5T2JqZWN0ICoNCkBAIC0zODYsNiArMzkyLDIxIEBADQogCXJldHVybiByZXM7DQog
> fQ0KIA0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorc3RhdGljIGludA0KK2NsYXNzX3JlY3Vy
> c2UoUHlDbGFzc09iamVjdCAqbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICpjbG9zdXJlKQ0K
> K3sNCisJaWYgKG8tPmNsX2Jhc2VzKSB2aXNpdChvLT5jbF9iYXNlcywgY2xvc3VyZSk7DQor
> CWlmIChvLT5jbF9kaWN0KSB2aXNpdChvLT5jbF9kaWN0LCBjbG9zdXJlKTsNCisJaWYgKG8t
> PmNsX25hbWUpIHZpc2l0KG8tPmNsX25hbWUsIGNsb3N1cmUpOw0KKwlpZiAoby0+Y2xfZ2V0
> YXR0cikgdmlzaXQoby0+Y2xfZ2V0YXR0ciwgY2xvc3VyZSk7DQorCWlmIChvLT5jbF9zZXRh
> dHRyKSB2aXNpdChvLT5jbF9zZXRhdHRyLCBjbG9zdXJlKTsNCisJaWYgKG8tPmNsX2RlbGF0
> dHIpIHZpc2l0KG8tPmNsX2RlbGF0dHIsIGNsb3N1cmUpOw0KKwlyZXR1cm4gMTsNCit9DQor
> I2VuZGlmIC8qIFdJVEhfQ1lDTEVfR0MgKi8NCisNCisNCiBQeVR5cGVPYmplY3QgUHlDbGFz
> c19UeXBlID0gew0KIAlQeU9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlKQ0KIAkwLA0K
> QEAgLTQwNiw2ICs0MjcsMTIgQEANCiAJKHJlcHJmdW5jKWNsYXNzX3N0ciwgLyp0cF9zdHIq
> Lw0KIAkoZ2V0YXR0cm9mdW5jKWNsYXNzX2dldGF0dHIsIC8qdHBfZ2V0YXR0cm8qLw0KIAko
> c2V0YXR0cm9mdW5jKWNsYXNzX3NldGF0dHIsIC8qdHBfc2V0YXR0cm8qLw0KKyNpZmRlZiBX
> SVRIX0NZQ0xFX0dDDQorCTAsCQkvKiB0cF9hc19idWZmZXIgKi8NCisJUHlfVFBGTEFHU19E
> RUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDSU5GTywgLyp0cF9mbGFncyovDQorCTAsCQkv
> KiB0cF9kb2MgKi8NCisJKHJlY3Vyc2Vwcm9jKWNsYXNzX3JlY3Vyc2UsCS8qIHRwX3JlY3Vy
> c2UgKi8NCisjZW5kaWYNCiB9Ow0KIA0KIGludA0KQEAgLTQ0NCwxMiArNDcxLDE1IEBADQog
> CQlQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsNCiAJCXJldHVybiBOVUxMOw0KIAl9DQotCWlu
> c3QgPSBQeU9iamVjdF9ORVcoUHlJbnN0YW5jZU9iamVjdCwgJlB5SW5zdGFuY2VfVHlwZSk7
> DQorCWluc3QgPSBQeU9iamVjdF9OZXcoUHlJbnN0YW5jZU9iamVjdCwgJlB5SW5zdGFuY2Vf
> VHlwZSk7DQogCWlmIChpbnN0ID09IE5VTEwpDQogCQlyZXR1cm4gTlVMTDsNCiAJUHlfSU5D
> UkVGKGNsYXNzKTsNCiAJaW5zdC0+aW5fY2xhc3MgPSAoUHlDbGFzc09iamVjdCAqKWNsYXNz
> Ow0KIAlpbnN0LT5pbl9kaWN0ID0gUHlEaWN0X05ldygpOw0KKyNpZmRlZiBXSVRIX0NZQ0xF
> X0dDDQorCVB5R0NfSW5zZXJ0KChQeU9iamVjdCAqKWluc3QpOw0KKyNlbmRpZg0KIAlpZiAo
> aW5zdC0+aW5fZGljdCA9PSBOVUxMKSB7DQogCQlQeV9ERUNSRUYoaW5zdCk7DQogCQlyZXR1
> cm4gTlVMTDsNCkBAIC00OTgsMTEgKzUyOCwxNCBAQA0KIAlQeU9iamVjdCAqZXJyb3JfdHlw
> ZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOw0KIAlQeU9iamVjdCAqZGVsOw0K
> IAlzdGF0aWMgUHlPYmplY3QgKmRlbHN0cjsNCisJZXh0ZXJuIGxvbmcgX1B5X1JlZlRvdGFs
> Ow0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorCVB5R0NfUmVtb3ZlKChQeU9iamVjdCAqKWlu
> c3QpOw0KKyNlbmRpZg0KIAkvKiBDYWxsIHRoZSBfX2RlbF9fIG1ldGhvZCBpZiBpdCBleGlz
> dHMuICBGaXJzdCB0ZW1wb3JhcmlseQ0KIAkgICByZXZpdmUgdGhlIG9iamVjdCBhbmQgc2F2
> ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8NCiAjaWZkZWYgUHlfVFJBQ0Vf
> UkVGUw0KIAkvKiBtdWNoIHRvbyBjb21wbGljYXRlZCBpZiBQeV9UUkFDRV9SRUZTIGRlZmlu
> ZWQgKi8NCi0JZXh0ZXJuIGxvbmcgX1B5X1JlZlRvdGFsOw0KIAlpbnN0LT5vYl90eXBlID0g
> JlB5SW5zdGFuY2VfVHlwZTsNCiAJX1B5X05ld1JlZmVyZW5jZSgoUHlPYmplY3QgKilpbnN0
> KTsNCiAJX1B5X1JlZlRvdGFsLS07CQkvKiBjb21wZW5zYXRlIGZvciBpbmNyZW1lbnQgaW4g
> TkVXUkVGICovDQpAQCAtNTUwLDYgKzU4Myw5IEBADQogI2lmZGVmIENPVU5UX0FMTE9DUw0K
> IAkJaW5zdC0+b2JfdHlwZS0+dHBfZnJlZS0tOw0KICNlbmRpZg0KKyNpZmRlZiBXSVRIX0NZ
> Q0xFX0dDDQorCQlQeUdDX0luc2VydCgoUHlPYmplY3QgKilpbnN0KTsNCisjZW5kaWYNCiAJ
> CXJldHVybjsgLyogX19kZWxfXyBhZGRlZCBhIHJlZmVyZW5jZTsgZG9uJ3QgZGVsZXRlIG5v
> dyAqLw0KIAl9DQogI2lmZGVmIFB5X1RSQUNFX1JFRlMNCkBAIC01NTcsMTEgKzU5MywxMCBA
> QA0KIAlpbnN0LT5vYl90eXBlLT50cF9mcmVlLS07CS8qIGNvbXBlbnNhdGUgZm9yIGluY3Jl
> bWVudCBpbiBVTlJFRiAqLw0KICNlbmRpZg0KIAlfUHlfRm9yZ2V0UmVmZXJlbmNlKChQeU9i
> amVjdCAqKWluc3QpOw0KLQlpbnN0LT5vYl90eXBlID0gTlVMTDsNCiAjZW5kaWYgLyogUHlf
> VFJBQ0VfUkVGUyAqLw0KIAlQeV9ERUNSRUYoaW5zdC0+aW5fY2xhc3MpOw0KIAlQeV9YREVD
> UkVGKGluc3QtPmluX2RpY3QpOw0KLQlmcmVlKChBTlkgKilpbnN0KTsNCisJUHlPYmplY3Rf
> RGVsKChQeU9iamVjdCAqKWluc3QpOw0KIH0NCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KQEAg
> LTg0MCw2ICs4NzUsMTYgQEANCiAJcmV0dXJuIG91dGNvbWU7DQogfQ0KIA0KKyNpZmRlZiBX
> SVRIX0NZQ0xFX0dDDQorc3RhdGljIGludA0KK2luc3RhbmNlX3JlY3Vyc2UoUHlJbnN0YW5j
> ZU9iamVjdCAqbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICpjbG9zdXJlKQ0KK3sNCisJaWYg
> KG8tPmluX2NsYXNzKSB2aXNpdCgoUHlPYmplY3QgKikoby0+aW5fY2xhc3MpLCBjbG9zdXJl
> KTsNCisJaWYgKG8tPmluX2RpY3QpIHZpc2l0KG8tPmluX2RpY3QsIGNsb3N1cmUpOw0KKwly
> ZXR1cm4gMTsNCit9DQorI2VuZGlmIC8qIFdJVEhfQ1lDTEVfR0MgKi8NCisNCiBzdGF0aWMg
> UHlPYmplY3QgKmdldGl0ZW1zdHIsICpzZXRpdGVtc3RyLCAqZGVsaXRlbXN0ciwgKmxlbnN0
> cjsNCiANCiBzdGF0aWMgaW50DQpAQCAtMTQ2Myw3ICsxNTA4LDExIEBADQogCShnZXRhdHRy
> b2Z1bmMpaW5zdGFuY2VfZ2V0YXR0ciwgLyp0cF9nZXRhdHRybyovDQogCShzZXRhdHRyb2Z1
> bmMpaW5zdGFuY2Vfc2V0YXR0ciwgLyp0cF9zZXRhdHRybyovDQogICAgICAgICAwLCAvKiB0
> cF9hc19idWZmZXIgKi8NCi0JUHlfVFBGTEFHU19ERUZBVUxULCAvKnRwX2ZsYWdzICovDQor
> CVB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQ0lORk8sIC8qdHBfZmxh
> Z3MqLw0KKwkwLAkJLyogdHBfZG9jICovDQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJKHJl
> Y3Vyc2Vwcm9jKWluc3RhbmNlX3JlY3Vyc2UsCS8qIHRwX3JlY3Vyc2UgKi8NCisjZW5kaWYN
> CiB9Ow0KIA0KIA0KQEAgLTE0OTMsNyArMTU0Miw3IEBADQogCQlfUHlfTmV3UmVmZXJlbmNl
> KChQeU9iamVjdCAqKWltKTsNCiAJfQ0KIAllbHNlIHsNCi0JCWltID0gUHlPYmplY3RfTkVX
> KFB5TWV0aG9kT2JqZWN0LCAmUHlNZXRob2RfVHlwZSk7DQorCQlpbSA9IFB5T2JqZWN0X05l
> dyhQeU1ldGhvZE9iamVjdCwgJlB5TWV0aG9kX1R5cGUpOw0KIAkJaWYgKGltID09IE5VTEwp
> DQogCQkJcmV0dXJuIE5VTEw7DQogCX0NCi0tLSBQeXRob24tY3ZzL09iamVjdHMvZGljdG9i
> amVjdC5jCVRodSBNYXIgMzAgMjI6MDI6NTIgMjAwMA0KKysrIFB5dGhvbi1nYy9PYmplY3Rz
> L2RpY3RvYmplY3QuYwlTYXQgQXByICA4IDAyOjA5OjU5IDIwMDANCkBAIC0xMjEsNyArMTIx
> LDcgQEANCiAJCWlmIChkdW1teSA9PSBOVUxMKQ0KIAkJCXJldHVybiBOVUxMOw0KIAl9DQot
> CW1wID0gUHlPYmplY3RfTkVXKGRpY3RvYmplY3QsICZQeURpY3RfVHlwZSk7DQorCW1wID0g
> UHlPYmplY3RfTmV3KGRpY3RvYmplY3QsICZQeURpY3RfVHlwZSk7DQogCWlmIChtcCA9PSBO
> VUxMKQ0KIAkJcmV0dXJuIE5VTEw7DQogCW1wLT5tYV9zaXplID0gMDsNCkBAIC0xMjksNiAr
> MTI5LDkgQEANCiAJbXAtPm1hX3RhYmxlID0gTlVMTDsNCiAJbXAtPm1hX2ZpbGwgPSAwOw0K
> IAltcC0+bWFfdXNlZCA9IDA7DQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJUHlHQ19JbnNl
> cnQoKFB5T2JqZWN0ICopbXApOw0KKyNlbmRpZg0KIAlyZXR1cm4gKFB5T2JqZWN0ICopbXA7
> DQogfQ0KIA0KQEAgLTQ4MCw2ICs0ODMsOSBAQA0KIAlyZWdpc3RlciBpbnQgaTsNCiAJcmVn
> aXN0ZXIgZGljdGVudHJ5ICplcDsNCiAJUHlfVFJBU0hDQU5fU0FGRV9CRUdJTihtcCkNCisj
> aWZkZWYgV0lUSF9DWUNMRV9HQw0KKwlQeUdDX1JlbW92ZSgoUHlPYmplY3QgKiltcCk7DQor
> I2VuZGlmDQogCWZvciAoaSA9IDAsIGVwID0gbXAtPm1hX3RhYmxlOyBpIDwgbXAtPm1hX3Np
> emU7IGkrKywgZXArKykgew0KIAkJaWYgKGVwLT5tZV9rZXkgIT0gTlVMTCkgew0KIAkJCVB5
> X0RFQ1JFRihlcC0+bWVfa2V5KTsNCkBAIC00ODksNyArNDk1LDcgQEANCiAJCX0NCiAJfQ0K
> IAlQeU1lbV9YREVMKG1wLT5tYV90YWJsZSk7DQotCVB5TWVtX0RFTChtcCk7DQorCVB5T2Jq
> ZWN0X0RlbCgoUHlPYmplY3QgKiltcCk7DQogCVB5X1RSQVNIQ0FOX1NBRkVfRU5EKG1wKQ0K
> IH0NCiANCkBAIC0xMDM2LDYgKzEwNDIsMzMgQEANCiAJcmV0dXJuIFB5X05vbmU7DQogfQ0K
> IA0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorc3RhdGljIGludA0KK2RpY3RfcmVjdXJzZShQ
> eU9iamVjdCAqb3AsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqY2xvc3VyZSkNCit7DQorCWlu
> dCBpID0gMDsNCisJUHlPYmplY3QgKnBrOw0KKwlQeU9iamVjdCAqcHY7DQorDQorCXdoaWxl
> IChQeURpY3RfTmV4dChvcCwgJmksICZwaywgJnB2KSkgew0KKwkJaWYgKCF2aXNpdChwaywg
> Y2xvc3VyZSkpIHsNCisJCQlyZXR1cm4gMDsNCisJCX0NCisJCWlmICghdmlzaXQocHYsIGNs
> b3N1cmUpKSB7DQorCQkJcmV0dXJuIDA7DQorCQl9DQorCX0NCisJcmV0dXJuIDE7DQorfQ0K
> Kw0KK3N0YXRpYyBpbnQNCitkaWN0X2djX2NsZWFyKFB5T2JqZWN0ICpvcCkNCit7DQorCVB5
> RGljdF9DbGVhcihvcCk7DQorCXJldHVybiAwOw0KK30NCisjZW5kaWYgLyogV0lUSF9DWUNM
> RV9HQyAqLw0KKw0KIHN0YXRpYyBQeU1ldGhvZERlZiBtYXBwX21ldGhvZHNbXSA9IHsNCiAJ
> eyJoYXNfa2V5IiwJKFB5Q0Z1bmN0aW9uKWRpY3RfaGFzX2tleSwgICAgICBNRVRIX1ZBUkFS
> R1N9LA0KIAl7ImtleXMiLAkoUHlDRnVuY3Rpb24pZGljdF9rZXlzfSwNCkBAIC0xMDcxLDYg
> KzExMDQsMTggQEANCiAJMCwJCQkvKnRwX2FzX251bWJlciovDQogCTAsCQkJLyp0cF9hc19z
> ZXF1ZW5jZSovDQogCSZkaWN0X2FzX21hcHBpbmcsCS8qdHBfYXNfbWFwcGluZyovDQorI2lm
> ZGVmIFdJVEhfQ1lDTEVfR0MNCisJMCwJCS8qIHRwX2hhc2ggKi8NCisJMCwJCS8qIHRwX2Nh
> bGwgKi8NCisJMCwJCS8qIHRwX3N0ciAqLw0KKwkwLAkJLyogdHBfZ2V0YXR0cm8gKi8NCisJ
> MCwJCS8qIHRwX3NldGF0dHJvICovDQorCTAsCQkvKiB0cF9hc19idWZmZXIgKi8NCisJUHlf
> VFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDSU5GTywgLyp0cF9mbGFncyov
> DQorCTAsCQkvKiB0cF9kb2MgKi8NCisJKHJlY3Vyc2Vwcm9jKWRpY3RfcmVjdXJzZSwJLyog
> dHBfcmVjdXJzZSAqLw0KKwkoaW5xdWlyeSlkaWN0X2djX2NsZWFyLAkJLyogdHBfY2xlYXIg
> Ki8NCisjZW5kaWYNCiB9Ow0KIA0KIC8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdp
> dGggb2xkIGRpY3Rpb25hcnkgaW50ZXJmYWNlICovDQotLS0gUHl0aG9uLWN2cy9PYmplY3Rz
> L2Z1bmNvYmplY3QuYwlUaHUgTWF5IDIxIDE4OjU1OjM0IDE5OTgNCisrKyBQeXRob24tZ2Mv
> T2JqZWN0cy9mdW5jb2JqZWN0LmMJU2F0IEFwciAgOCAwMjowOTo1MCAyMDAwDQpAQCAtNDAs
> NyArNDAsNyBAQA0KIAlQeU9iamVjdCAqY29kZTsNCiAJUHlPYmplY3QgKmdsb2JhbHM7DQog
> ew0KLQlQeUZ1bmN0aW9uT2JqZWN0ICpvcCA9IFB5T2JqZWN0X05FVyhQeUZ1bmN0aW9uT2Jq
> ZWN0LA0KKwlQeUZ1bmN0aW9uT2JqZWN0ICpvcCA9IFB5T2JqZWN0X05ldyhQeUZ1bmN0aW9u
> T2JqZWN0LA0KIAkJCQkJICAgICZQeUZ1bmN0aW9uX1R5cGUpOw0KIAlpZiAob3AgIT0gTlVM
> TCkgew0KIAkJUHlPYmplY3QgKmRvYzsNCkBAIC02Myw2ICs2Myw5IEBADQogCQlQeV9JTkNS
> RUYoZG9jKTsNCiAJCW9wLT5mdW5jX2RvYyA9IGRvYzsNCiAJfQ0KKyNpZmRlZiBXSVRIX0NZ
> Q0xFX0dDDQorCVB5R0NfSW5zZXJ0KChQeU9iamVjdCAqKW9wKTsNCisjZW5kaWYNCiAJcmV0
> dXJuIChQeU9iamVjdCAqKW9wOw0KIH0NCiANCkBAIC0xODYsMTIgKzE4OSwxNSBAQA0KIGZ1
> bmNfZGVhbGxvYyhvcCkNCiAJUHlGdW5jdGlvbk9iamVjdCAqb3A7DQogew0KKyNpZmRlZiBX
> SVRIX0NZQ0xFX0dDDQorCVB5R0NfUmVtb3ZlKChQeU9iamVjdCAqKW9wKTsNCisjZW5kaWYN
> CiAJUHlfREVDUkVGKG9wLT5mdW5jX2NvZGUpOw0KIAlQeV9ERUNSRUYob3AtPmZ1bmNfZ2xv
> YmFscyk7DQogCVB5X0RFQ1JFRihvcC0+ZnVuY19uYW1lKTsNCiAJUHlfWERFQ1JFRihvcC0+
> ZnVuY19kZWZhdWx0cyk7DQogCVB5X1hERUNSRUYob3AtPmZ1bmNfZG9jKTsNCi0JUHlNZW1f
> REVMKG9wKTsNCisJUHlPYmplY3RfRGVsKChQeU9iamVjdCAqKW9wKTsNCiB9DQogDQogc3Rh
> dGljIFB5T2JqZWN0Kg0KQEAgLTIzOSw2ICsyNDUsMTkgQEANCiAJcmV0dXJuIGg7DQogfQ0K
> IA0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorc3RhdGljIGludA0KK2Z1bmNfcmVjdXJzZShQ
> eUZ1bmN0aW9uT2JqZWN0ICpmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmNsb3N1cmUpDQor
> ew0KKwlpZiAoZi0+ZnVuY19jb2RlKSB2aXNpdChmLT5mdW5jX2NvZGUsIGNsb3N1cmUpOw0K
> KwlpZiAoZi0+ZnVuY19nbG9iYWxzKSB2aXNpdChmLT5mdW5jX2dsb2JhbHMsIGNsb3N1cmUp
> Ow0KKwlpZiAoZi0+ZnVuY19kZWZhdWx0cykgdmlzaXQoZi0+ZnVuY19kZWZhdWx0cywgY2xv
> c3VyZSk7DQorCWlmIChmLT5mdW5jX2RvYykgdmlzaXQoZi0+ZnVuY19kb2MsIGNsb3N1cmUp
> Ow0KKwlpZiAoZi0+ZnVuY19uYW1lKSB2aXNpdChmLT5mdW5jX25hbWUsIGNsb3N1cmUpOw0K
> KwlyZXR1cm4gMTsNCit9DQorI2VuZGlmIC8qIFdJVEhfQ1lDTEVfR0MgKi8NCisNCiBQeVR5
> cGVPYmplY3QgUHlGdW5jdGlvbl9UeXBlID0gew0KIAlQeU9iamVjdF9IRUFEX0lOSVQoJlB5
> VHlwZV9UeXBlKQ0KIAkwLA0KQEAgLTI1NSw0ICsyNzQsMTQgQEANCiAJMCwJCS8qdHBfYXNf
> c2VxdWVuY2UqLw0KIAkwLAkJLyp0cF9hc19tYXBwaW5nKi8NCiAJKGhhc2hmdW5jKWZ1bmNf
> aGFzaCwgLyp0cF9oYXNoKi8NCisjaWZkZWYgV0lUSF9DWUNMRV9HQw0KKwkwLAkJLyp0cF9j
> YWxsKi8NCisJMCwJCS8qdHBfc3RyKi8NCisJMCwJCS8qdHBfZ2V0YXR0cm8qLw0KKwkwLAkJ
> Lyp0cF9zZXRhdHRybyovDQorCTAsCQkvKiB0cF9hc19idWZmZXIgKi8NCisJUHlfVFBGTEFH
> U19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDSU5GTywgLyp0cF9mbGFncyovDQorCTAs
> CQkvKiB0cF9kb2MgKi8NCisJKHJlY3Vyc2Vwcm9jKWZ1bmNfcmVjdXJzZSwJLyogdHBfcmVj
> dXJzZSAqLw0KKyNlbmRpZg0KIH07DQotLS0gUHl0aG9uLWN2cy9PYmplY3RzL2xpc3RvYmpl
> Y3QuYwlGcmkgTWFyIDI0IDIyOjMyOjMwIDIwMDANCisrKyBQeXRob24tZ2MvT2JqZWN0cy9s
> aXN0b2JqZWN0LmMJTW9uIEFwciAyNCAyMToxNDo0MiAyMDAwDQpAQCAtNjEsMzQgKzYxLDM3
> IEBADQogCWludCBpOw0KIAlQeUxpc3RPYmplY3QgKm9wOw0KIAlzaXplX3QgbmJ5dGVzOw0K
> KwlQeU9iamVjdCAqKml0ZW07DQorDQogCWlmIChzaXplIDwgMCkgew0KIAkJUHlFcnJfQmFk
> SW50ZXJuYWxDYWxsKCk7DQogCQlyZXR1cm4gTlVMTDsNCiAJfQ0KLQluYnl0ZXMgPSBzaXpl
> ICogc2l6ZW9mKFB5T2JqZWN0ICopOw0KLQkvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8NCi0J
> aWYgKG5ieXRlcyAvIHNpemVvZihQeU9iamVjdCAqKSAhPSAoc2l6ZV90KXNpemUpIHsNCi0J
> CXJldHVybiBQeUVycl9Ob01lbW9yeSgpOw0KLQl9DQotCW9wID0gKFB5TGlzdE9iamVjdCAq
> KSBtYWxsb2Moc2l6ZW9mKFB5TGlzdE9iamVjdCkpOw0KLQlpZiAob3AgPT0gTlVMTCkgew0K
> LQkJcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7DQotCX0NCi0JaWYgKHNpemUgPD0gMCkgew0K
> LQkJb3AtPm9iX2l0ZW0gPSBOVUxMOw0KLQl9DQorCWlmIChzaXplID09IDApDQorCQlpdGVt
> ID0gTlVMTDsNCiAJZWxzZSB7DQotCQlvcC0+b2JfaXRlbSA9IChQeU9iamVjdCAqKikgbWFs
> bG9jKG5ieXRlcyk7DQotCQlpZiAob3AtPm9iX2l0ZW0gPT0gTlVMTCkgew0KLQkJCWZyZWUo
> KEFOWSAqKW9wKTsNCisJCW5ieXRlcyA9IHNpemUgKiBzaXplb2YoUHlPYmplY3QgKik7DQor
> CQkvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8NCisJCWlmIChuYnl0ZXMgLyBzaXplb2YoUHlP
> YmplY3QgKikgIT0gKHNpemVfdClzaXplKSB7DQogCQkJcmV0dXJuIFB5RXJyX05vTWVtb3J5
> KCk7DQogCQl9DQorCQlpdGVtID0gKFB5T2JqZWN0ICoqKSBtYWxsb2MobmJ5dGVzKTsNCisJ
> CWlmIChpdGVtID09IE5VTEwpDQorCQkJcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7DQorCX0N
> CisJb3AgPSBQeU9iamVjdF9OZXcoUHlMaXN0T2JqZWN0LCAmUHlMaXN0X1R5cGUpOw0KKwlp
> ZiAob3AgPT0gTlVMTCkgew0KKwkJaWYgKGl0ZW0gIT0gTlVMTCkNCisJCQlmcmVlKChBTlkg
> KilpdGVtKTsNCisJCXJldHVybiBQeUVycl9Ob01lbW9yeSgpOw0KIAl9DQotCW9wLT5vYl90
> eXBlID0gJlB5TGlzdF9UeXBlOw0KIAlvcC0+b2Jfc2l6ZSA9IHNpemU7DQorCW9wLT5vYl9p
> dGVtID0gaXRlbTsNCiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykNCiAJCW9wLT5vYl9p
> dGVtW2ldID0gTlVMTDsNCi0JX1B5X05ld1JlZmVyZW5jZSgoUHlPYmplY3QgKilvcCk7DQor
> I2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJUHlHQ19JbnNlcnQoKFB5T2JqZWN0ICopb3ApOw0K
> KyNlbmRpZg0KIAlyZXR1cm4gKFB5T2JqZWN0ICopIG9wOw0KIH0NCiANCkBAIC0yMTYsNiAr
> MjE5LDkgQEANCiB7DQogCWludCBpOw0KIAlQeV9UUkFTSENBTl9TQUZFX0JFR0lOKG9wKQ0K
> KyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorCVB5R0NfUmVtb3ZlKChQeU9iamVjdCAqKW9wKTsN
> CisjZW5kaWYNCiAJaWYgKG9wLT5vYl9pdGVtICE9IE5VTEwpIHsNCiAJCS8qIERvIGl0IGJh
> Y2t3YXJkcywgZm9yIENocmlzdGlhbiBUaXNtZXIuDQogCQkgICBUaGVyZSdzIGEgc2ltcGxl
> IHRlc3QgY2FzZSB3aGVyZSBzb21laG93IHRoaXMgcmVkdWNlcw0KQEAgLTIyNyw3ICsyMzMs
> NyBAQA0KIAkJfQ0KIAkJZnJlZSgoQU5ZICopb3AtPm9iX2l0ZW0pOw0KIAl9DQotCWZyZWUo
> KEFOWSAqKW9wKTsNCisJUHlPYmplY3RfRGVsKChQeU9iamVjdCAqKW9wKTsNCiAJUHlfVFJB
> U0hDQU5fU0FGRV9FTkQob3ApDQogfQ0KIA0KQEAgLTEzOTksNiArMTQwNSwyOSBAQA0KIAly
> ZXR1cm4gTlVMTDsNCiB9DQogDQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCitzdGF0aWMgaW50
> DQorbGlzdF9yZWN1cnNlKFB5TGlzdE9iamVjdCAqbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lk
> ICpjbG9zdXJlKQ0KK3sNCisJaW50IGk7DQorCVB5T2JqZWN0ICp4Ow0KKw0KKwlmb3IgKGkg
> PSBvLT5vYl9zaXplOyAtLWkgPj0gMDsgKSB7DQorCQl4ID0gby0+b2JfaXRlbVtpXTsNCisJ
> CWlmICh4ICE9IE5VTEwgJiYgIXZpc2l0KHgsIGNsb3N1cmUpKQ0KKwkJCXJldHVybiAwOw0K
> Kwl9DQorCXJldHVybiAxOw0KK30NCisNCitzdGF0aWMgaW50DQorbGlzdF9jbGVhcihQeUxp
> c3RPYmplY3QgKmxwKQ0KK3sNCisJKHZvaWQpIFB5TGlzdF9TZXRTbGljZSgoUHlPYmplY3Qg
> KilscCwgMCwgbHAtPm9iX3NpemUsIDApOw0KKwlyZXR1cm4gMDsNCit9DQorI2VuZGlmIC8q
> IFdJVEhfQ1lDTEVfR0MgKi8NCisNCiBzdGF0aWMgY2hhciBhcHBlbmRfZG9jW10gPQ0KICJM
> LmFwcGVuZChvYmplY3QpIC0tIGFwcGVuZCBvYmplY3QgdG8gZW5kIjsNCiBzdGF0aWMgY2hh
> ciBleHRlbmRfZG9jW10gPQ0KQEAgLTE0NjQsNiArMTQ5MywxOCBAQA0KIAkwLAkJLyp0cF9h
> c19udW1iZXIqLw0KIAkmbGlzdF9hc19zZXF1ZW5jZSwJLyp0cF9hc19zZXF1ZW5jZSovDQog
> CTAsCQkvKnRwX2FzX21hcHBpbmcqLw0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorCTAsCQkv
> KiB0cF9oYXNoICovDQorCTAsCQkvKiB0cF9jYWxsICovDQorCTAsCQkvKiB0cF9zdHIgKi8N
> CisJMCwJCS8qIHRwX2dldGF0dHJvICovDQorCTAsCQkvKiB0cF9zZXRhdHRybyAqLw0KKwkw
> LAkJLyogdHBfYXNfYnVmZmVyICovDQorCVB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxB
> R1NfSEFWRV9HQ0lORk8sCS8qIHRwX2ZsYWdzICovDQorCTAsCQkvKiB0cF9kb2MgKi8NCisJ
> KHJlY3Vyc2Vwcm9jKWxpc3RfcmVjdXJzZSwJLyogdHBfcmVjdXJzZSAqLw0KKwkoaW5xdWly
> eSlsaXN0X2NsZWFyLAkvKiB0cF9jbGVhciAqLw0KKyNlbmRpZg0KIH07DQogDQogDQpAQCAt
> MTUzMiw1ICsxNTczLDE2IEBADQogCTAsCQkvKnRwX2FzX251bWJlciovDQogCSZpbW11dGFi
> bGVfbGlzdF9hc19zZXF1ZW5jZSwJLyp0cF9hc19zZXF1ZW5jZSovDQogCTAsCQkvKnRwX2Fz
> X21hcHBpbmcqLw0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorCTAsCQkvKiB0cF9oYXNoICov
> DQorCTAsCQkvKiB0cF9jYWxsICovDQorCTAsCQkvKiB0cF9zdHIgKi8NCisJMCwJCS8qIHRw
> X2dldGF0dHJvICovDQorCTAsCQkvKiB0cF9zZXRhdHRybyAqLw0KKwkwLAkJLyogdHBfYXNf
> YnVmZmVyICovDQorCVB5X1RQRkxBR1NfREVGQVVMVCwJLyogdHBfZmxhZ3MgKi8NCisJMCwJ
> CS8qIHRwX2RvYyAqLw0KKwkocmVjdXJzZXByb2MpbGlzdF9yZWN1cnNlLAkvKiB0cF9yZWN1
> cnNlICovDQorI2VuZGlmDQogfTsNCiANCi0tLSBQeXRob24tY3ZzL09iamVjdHMvb2JqZWN0
> LmMJVHVlIE1hciAyOCAwODoxMTowOSAyMDAwDQorKysgUHl0aG9uLWdjL09iamVjdHMvb2Jq
> ZWN0LmMJU2F0IEFwciAgOCAwMjoxMDowNiAyMDAwDQpAQCAtMTA3LDIwICsxMDcsMTIgQEAN
> CiB9DQogI2VuZGlmDQogDQotI2lmbmRlZiBNU19DT1JFRExMDQotUHlPYmplY3QgKg0KLV9Q
> eU9iamVjdF9OZXcodHApDQotCVB5VHlwZU9iamVjdCAqdHA7DQotI2Vsc2UNCisNCiBQeU9i
> amVjdCAqDQotX1B5T2JqZWN0X05ldyh0cCxvcCkNCitfUHlPYmplY3RfRnJvbVR5cGUodHAs
> b3ApDQogCVB5VHlwZU9iamVjdCAqdHA7DQogCVB5T2JqZWN0ICpvcDsNCi0jZW5kaWYNCiB7
> DQotI2lmbmRlZiBNU19DT1JFRExMDQotCVB5T2JqZWN0ICpvcCA9IChQeU9iamVjdCAqKSBt
> YWxsb2ModHAtPnRwX2Jhc2ljc2l6ZSk7DQotI2VuZGlmDQogCWlmIChvcCA9PSBOVUxMKQ0K
> IAkJcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7DQogCW9wLT5vYl90eXBlID0gdHA7DQpAQCAt
> MTI4LDI5ICsxMjAsNzggQEANCiAJcmV0dXJuIG9wOw0KIH0NCiANCi0jaWZuZGVmIE1TX0NP
> UkVETEwNCi1QeVZhck9iamVjdCAqDQotX1B5T2JqZWN0X05ld1Zhcih0cCwgc2l6ZSkNCi0J
> UHlUeXBlT2JqZWN0ICp0cDsNCi0JaW50IHNpemU7DQotI2Vsc2UNCiBQeVZhck9iamVjdCAq
> DQotX1B5T2JqZWN0X05ld1Zhcih0cCwgc2l6ZSwgb3ApDQorX1B5T2JqZWN0X1ZhckZyb21U
> eXBlKHRwLCBzaXplLCBvcCkNCiAJUHlUeXBlT2JqZWN0ICp0cDsNCiAJaW50IHNpemU7DQog
> CVB5VmFyT2JqZWN0ICpvcDsNCi0jZW5kaWYNCiB7DQotI2lmbmRlZiBNU19DT1JFRExMDQot
> CVB5VmFyT2JqZWN0ICpvcCA9IChQeVZhck9iamVjdCAqKQ0KLQkJbWFsbG9jKHRwLT50cF9i
> YXNpY3NpemUgKyBzaXplICogdHAtPnRwX2l0ZW1zaXplKTsNCi0jZW5kaWYNCiAJaWYgKG9w
> ID09IE5VTEwpDQogCQlyZXR1cm4gKFB5VmFyT2JqZWN0ICopUHlFcnJfTm9NZW1vcnkoKTsN
> CiAJb3AtPm9iX3R5cGUgPSB0cDsNCiAJb3AtPm9iX3NpemUgPSBzaXplOw0KIAlfUHlfTmV3
> UmVmZXJlbmNlKChQeU9iamVjdCAqKW9wKTsNCiAJcmV0dXJuIG9wOw0KK30NCisNCitQeU9i
> amVjdCAqDQorX1B5T2JqZWN0X05ldyh0cCkNCisJUHlUeXBlT2JqZWN0ICp0cDsNCit7DQor
> CVB5T2JqZWN0ICpvcDsNCisjaWZkZWYgV0lUSF9DWUNMRV9HQw0KKwlpZiAoUFlfVFlQRUlT
> R0ModHApKSB7DQorCQlQeUdDSW5mbyAqZzsNCisJCWcgPSAoUHlHQ0luZm8gKikgbWFsbG9j
> KHNpemVvZigqZykgKyB0cC0+dHBfYmFzaWNzaXplKTsNCisJCWlmIChnID09IE5VTEwpIHsN
> CisJCQlvcCA9IE5VTEw7DQorCQl9IGVsc2Ugew0KKwkJCW9wID0gUFlfR0NPQkooZyk7DQor
> CQl9DQorCX0gZWxzZQ0KKyNlbmRpZiAvKiBXSVRIX0NZQ0xFX0dDICovDQorCXsNCisJCW9w
> ID0gKFB5T2JqZWN0ICopIG1hbGxvYyh0cC0+dHBfYmFzaWNzaXplKTsNCisJfQ0KKwlyZXR1
> cm4gX1B5T2JqZWN0X0Zyb21UeXBlKHRwLCBvcCk7DQorfQ0KKw0KK1B5VmFyT2JqZWN0ICoN
> CitfUHlPYmplY3RfTmV3VmFyKHRwLCBzaXplKQ0KKwlQeVR5cGVPYmplY3QgKnRwOw0KKwlp
> bnQgc2l6ZTsNCit7DQorCVB5VmFyT2JqZWN0ICpvcDsNCisjaWZkZWYgV0lUSF9DWUNMRV9H
> Qw0KKwlpZiAoUFlfVFlQRUlTR0ModHApKSB7DQorCQlQeUdDSW5mbyAqZzsNCisJCWcgPSAo
> UHlHQ0luZm8gKikgbWFsbG9jKHNpemVvZigqZykgKyANCisJCQkJCXRwLT50cF9iYXNpY3Np
> emUgKw0KKwkJCQkJc2l6ZSAqIHRwLT50cF9pdGVtc2l6ZSk7DQorCQlpZiAoZyA9PSBOVUxM
> KSB7DQorCQkJb3AgPSBOVUxMOw0KKwkJfSBlbHNlIHsNCisJCQlvcCA9IChQeVZhck9iamVj
> dCAqKVBZX0dDT0JKKGcpOw0KKwkJfQ0KKwl9IGVsc2UNCisjZW5kaWYgLyogV0lUSF9DWUNM
> RV9HQyAqLw0KKwl7DQorCQlvcCA9IChQeVZhck9iamVjdCAqKQ0KKwkJCW1hbGxvYyh0cC0+
> dHBfYmFzaWNzaXplICsgc2l6ZSAqIHRwLT50cF9pdGVtc2l6ZSk7DQorCX0NCisJcmV0dXJu
> IF9QeU9iamVjdF9WYXJGcm9tVHlwZSh0cCwgc2l6ZSwgb3ApOw0KK30NCisNCit2b2lkDQor
> UHlPYmplY3RfRGVsKG9wKQ0KKwlQeU9iamVjdCAqb3A7DQorew0KKyNpZmRlZiBXSVRIX0NZ
> Q0xFX0dDDQorCWlmIChQWV9JU0dDKG9wKSkgew0KKwkJb3AgPSAoUHlPYmplY3QgKilQWV9H
> Q0lORk9fVU5TQUZFKG9wKTsNCisJfQ0KKyNlbmRpZg0KKwlmcmVlKG9wKTsNCiB9DQogDQog
> aW50DQotLS0gUHl0aG9uLWN2cy9PYmplY3RzL3R1cGxlb2JqZWN0LmMJRnJpIE1hciAyNCAy
> MjozMjozMCAyMDAwDQorKysgUHl0aG9uLWdjL09iamVjdHMvdHVwbGVvYmplY3QuYwlNb24g
> QXByIDI0IDIxOjIxOjU5IDIwMDANCkBAIC04Miw4ICs4Miw4IEBADQogI2VuZGlmDQogI2lm
> ZGVmIFB5X1RSQUNFX1JFRlMNCiAJCW9wLT5vYl90eXBlID0gJlB5VHVwbGVfVHlwZTsNCi0J
> CW9wLT5vYl9zaXplID0gc2l6ZTsNCiAjZW5kaWYNCisJCV9QeV9OZXdSZWZlcmVuY2UoKFB5
> T2JqZWN0ICopb3ApOw0KIAl9DQogCWVsc2UNCiAjZW5kaWYNCkBAIC05NywyMyArOTcsMjMg
> QEANCiAJCQlyZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsNCiAJCX0NCiAJCTsNCi0JCW9wID0g
> KFB5VHVwbGVPYmplY3QgKikgbWFsbG9jKG5ieXRlcyk7DQorCQlvcCA9IFB5T2JqZWN0X05l
> d1ZhcihQeVR1cGxlT2JqZWN0LCAmUHlUdXBsZV9UeXBlLCBzaXplKTsNCiAJCWlmIChvcCA9
> PSBOVUxMKQ0KIAkJCXJldHVybiBQeUVycl9Ob01lbW9yeSgpOw0KIA0KLQkJb3AtPm9iX3R5
> cGUgPSAmUHlUdXBsZV9UeXBlOw0KLQkJb3AtPm9iX3NpemUgPSBzaXplOw0KIAl9DQogCWZv
> ciAoaSA9IDA7IGkgPCBzaXplOyBpKyspDQogCQlvcC0+b2JfaXRlbVtpXSA9IE5VTEw7DQot
> CV9QeV9OZXdSZWZlcmVuY2UoKFB5T2JqZWN0ICopb3ApOw0KKw0KICNpZiBNQVhTQVZFU0la
> RSA+IDANCiAJaWYgKHNpemUgPT0gMCkgew0KIAkJZnJlZV90dXBsZXNbMF0gPSBvcDsNCi0J
> CSsrbnVtX2ZyZWVfdHVwbGVzWzBdOw0KIAkJUHlfSU5DUkVGKG9wKTsJLyogZXh0cmEgSU5D
> UkVGIHNvIHRoYXQgdGhpcyBpcyBuZXZlciBmcmVlZCAqLw0KIAl9DQogI2VuZGlmDQorI2lm
> ZGVmIFdJVEhfQ1lDTEVfR0MNCisJUHlHQ19JbnNlcnQoKFB5T2JqZWN0ICopb3ApOw0KKyNl
> bmRpZg0KIAlyZXR1cm4gKFB5T2JqZWN0ICopIG9wOw0KIH0NCiANCkBAIC0xODAsNiArMTgw
> LDkgQEANCiAJcmVnaXN0ZXIgaW50IGk7DQogCXJlZ2lzdGVyIGludCBsZW4gPSAgb3AtPm9i
> X3NpemU7DQogCVB5X1RSQVNIQ0FOX1NBRkVfQkVHSU4ob3ApDQorI2lmZGVmIFdJVEhfQ1lD
> TEVfR0MNCisJUHlHQ19SZW1vdmUoKFB5T2JqZWN0ICopb3ApOw0KKyNlbmRpZg0KIAlpZiAo
> bGVuID4gMCkgew0KIAkJaSA9IGxlbjsNCiAJCXdoaWxlICgtLWkgPj0gMCkNCkBAIC0xOTMs
> NyArMTk2LDcgQEANCiAJCX0NCiAjZW5kaWYNCiAJfQ0KLQlmcmVlKChBTlkgKilvcCk7DQor
> CVB5T2JqZWN0X0RlbCgoUHlPYmplY3QgKilvcCk7DQogZG9uZToNCiAJUHlfVFJBU0hDQU5f
> U0FGRV9FTkQob3ApDQogfQ0KQEAgLTQwMSw2ICs0MDQsMjIgQEANCiAJcmV0dXJuIChQeU9i
> amVjdCAqKSBucDsNCiB9DQogDQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCitzdGF0aWMgaW50
> DQordHVwbGVyZWN1cnNlKFB5VHVwbGVPYmplY3QgKm8sIHZpc2l0cHJvYyB2aXNpdCwgdm9p
> ZCAqY2xvc3VyZSkNCit7DQorCWludCBpOw0KKwlQeU9iamVjdCAqeDsNCisNCisJZm9yIChp
> ID0gby0+b2Jfc2l6ZTsgLS1pID49IDA7ICkgew0KKwkJeCA9IG8tPm9iX2l0ZW1baV07DQor
> CQlpZiAoeCAhPSBOVUxMICYmICF2aXNpdCh4LCBjbG9zdXJlKSkNCisJCQlyZXR1cm4gMDsN
> CisJfQ0KKwlyZXR1cm4gMTsNCit9DQorI2VuZGlmIC8qIFdJVEhfQ1lDTEVfR0MgKi8NCisN
> CiBzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgdHVwbGVfYXNfc2VxdWVuY2UgPSB7DQogCShp
> bnF1aXJ5KXR1cGxlbGVuZ3RoLCAvKnNxX2xlbmd0aCovDQogCShiaW5hcnlmdW5jKXR1cGxl
> Y29uY2F0LCAvKnNxX2NvbmNhdCovDQpAQCAtNDI3LDYgKzQ0NiwxNiBAQA0KIAkmdHVwbGVf
> YXNfc2VxdWVuY2UsCS8qdHBfYXNfc2VxdWVuY2UqLw0KIAkwLAkJLyp0cF9hc19tYXBwaW5n
> Ki8NCiAJKGhhc2hmdW5jKXR1cGxlaGFzaCwgLyp0cF9oYXNoKi8NCisjaWZkZWYgV0lUSF9D
> WUNMRV9HQw0KKwkwLAkJLyogdHBfY2FsbCAqLw0KKwkwLAkJLyogdHBfc3RyICovDQorCTAs
> CQkvKiB0cF9nZXRhdHRybyAqLw0KKwkwLAkJLyogdHBfc2V0YXR0cm8gKi8NCisJMCwJCS8q
> IHRwX2FzX2J1ZmZlciAqLw0KKwlQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hB
> VkVfR0NJTkZPLAkvKiB0cF9mbGFncyAqLw0KKwkwLAkJLyogdHBfZG9jICovDQorCShyZWN1
> cnNlcHJvYyl0dXBsZXJlY3Vyc2UsCS8qIHRwX3JlY3Vyc2UgKi8NCisjZW5kaWYNCiB9Ow0K
> IA0KIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYnJlYWtzIHRoZSBub3Rpb24gdGhhdCB0
> dXBsZXMgYXJlIGltbXV0YWJsZToNCkBAIC00NDksNiArNDc4LDkgQEANCiAJaW50IGk7DQog
> CWludCBzaXplZGlmZjsNCiANCisjaWZkZWYgV0lUSF9DWUNMRV9HQw0KKwlQeUdDSW5mbyAq
> ZyA9IFBZX0dDSU5GTygqcHYpOyANCisjZW5kaWYNCiAJdiA9IChQeVR1cGxlT2JqZWN0ICop
> ICpwdjsNCiAJaWYgKHYgPT0gTlVMTCB8fCAhUHlUdXBsZV9DaGVjayh2KSB8fCB2LT5vYl9y
> ZWZjbnQgIT0gMSkgew0KIAkJKnB2ID0gMDsNCkBAIC00NzksNyArNTExLDYgQEANCiAJfQ0K
> ICNpZiBNQVhTQVZFU0laRSA+IDANCiAJaWYgKG5ld3NpemUgPT0gMCAmJiBmcmVlX3R1cGxl
> c1swXSkgew0KLQkJbnVtX2ZyZWVfdHVwbGVzWzBdLS07DQogCQlzdiA9IGZyZWVfdHVwbGVz
> WzBdOw0KIAkJc3YtPm9iX3NpemUgPSAwOw0KIAkJUHlfSU5DUkVGKHN2KTsNCkBAIC01MTEs
> OSArNTQyLDIyIEBADQogCX0gZWxzZSANCiAjZW5kaWYJCQ0KIAl7DQorI2lmZGVmIFdJVEhf
> Q1lDTEVfR0MNCisJCVB5R0NfUmVtb3ZlKChQeU9iamVjdCAqKXYpOw0KKw0KKwkJZyA9IChQ
> eUdDSW5mbyAqKSByZWFsbG9jKChjaGFyICopZywgc2l6ZW9mKCpnKSArIA0KKwkJCQlzaXpl
> b2YoUHlUdXBsZU9iamVjdCkgKyANCisJCQkJbmV3c2l6ZSAqIHNpemVvZihQeU9iamVjdCAq
> KSk7DQorCQlpZiAoZyA9PSBOVUxMKSB7DQorCQkJc3YgPT0gTlVMTDsNCisJCX0gZWxzZSB7
> DQorCQkJc3YgPSAoUHlUdXBsZU9iamVjdCAqKSBQWV9HQ09CSihnKTsNCisJCX0NCisjZWxz
> ZQ0KIAkJc3YgPSAoUHlUdXBsZU9iamVjdCAqKQ0KIAkJCXJlYWxsb2MoKGNoYXIgKil2LA0K
> IAkJCQlzaXplb2YoUHlUdXBsZU9iamVjdCkgKyBuZXdzaXplICogc2l6ZW9mKFB5T2JqZWN0
> ICopKTsNCisjZW5kaWYNCiAJCSpwdiA9IChQeU9iamVjdCAqKSBzdjsNCiAJCWlmIChzdiA9
> PSBOVUxMKSB7DQogCQkJUHlNZW1fREVMKHYpOw0KQEAgLTUyMiw2ICs1NjYsOSBAQA0KIAkJ
> fQ0KIAl9DQogCV9QeV9OZXdSZWZlcmVuY2UoKFB5T2JqZWN0ICopc3YpOw0KKyNpZmRlZiBX
> SVRIX0NZQ0xFX0dDDQorCVB5R0NfSW5zZXJ0KChQeU9iamVjdCAqKXN2KTsNCisjZW5kaWYN
> CiAJZm9yIChpID0gc3YtPm9iX3NpemU7IGkgPCBuZXdzaXplOyBpKyspDQogCQlzdi0+b2Jf
> aXRlbVtpXSA9IE5VTEw7DQogCWlmIChsYXN0X2lzX3N0aWNreSAmJiBzaXplZGlmZiA+IDAp
> IHsNCkBAIC01NTEsNyArNTk4LDExIEBADQogCQl3aGlsZSAocCkgew0KIAkJCXEgPSBwOw0K
> IAkJCXAgPSAoUHlUdXBsZU9iamVjdCAqKShwLT5vYl9pdGVtWzBdKTsNCi0JCQlQeU1lbV9E
> RUwocSk7DQorI2lmZGVmIFB5X1RSQUNFX1JFRlMNCisJCQlxLT5vYl90eXBlID0gICZQeVR1
> cGxlX1R5cGU7DQorI2VuZGlmDQorCQkJUHlPYmplY3RfRGVsKChQeU9iamVjdCAqKXEpOw0K
> KwkJCQ0KIAkJfQ0KIAl9DQogI2VuZGlmDQotLS0gUHl0aG9uLWN2cy9QQy9jb25maWcuYwlG
> cmkgQXByICA3IDE1OjI3OjA0IDIwMDANCisrKyBQeXRob24tZ2MvUEMvY29uZmlnLmMJU2F0
> IEFwciAgOCAwMzoxMjo1OCAyMDAwDQpAQCAtNDEsNiArNDEsOSBAQA0KIGV4dGVybiB2b2lk
> IGluaXRiaW5hc2NpaSgpOw0KIGV4dGVybiB2b2lkIGluaXRjbWF0aCgpOw0KIGV4dGVybiB2
> b2lkIGluaXRlcnJubygpOw0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorZXh0ZXJuIHZvaWQg
> aW5pdGdjKCk7DQorI2VuZGlmDQogZXh0ZXJuIHZvaWQgaW5pdGltYWdlb3AoKTsNCiBleHRl
> cm4gdm9pZCBpbml0bWF0aCgpOw0KIGV4dGVybiB2b2lkIGluaXRtZDUoKTsNCkBAIC04MCw2
> ICs4Myw5IEBADQogICAgICAgICB7ImJpbmFzY2lpIiwgaW5pdGJpbmFzY2lpfSwNCiAgICAg
> ICAgIHsiY21hdGgiLCBpbml0Y21hdGh9LA0KICAgICAgICAgeyJlcnJubyIsIGluaXRlcnJu
> b30sDQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisgICAgICAgIHsiZ2MiLCBpbml0Z2N9LA0K
> KyNlbmRpZg0KICAgICAgICAgeyJpbWFnZW9wIiwgaW5pdGltYWdlb3B9LA0KICAgICAgICAg
> eyJtYXRoIiwgaW5pdG1hdGh9LA0KICAgICAgICAgeyJtZDUiLCBpbml0bWQ1fSwNCi0tLSBQ
> eXRob24tY3ZzL1BDL2NvbmZpZy5oCVRodSBNYXIgMzAgMjI6MDI6NTMgMjAwMA0KKysrIFB5
> dGhvbi1nYy9QQy9jb25maWcuaAlTYXQgQXByICA4IDAyOjI0OjAwIDIwMDANCkBAIC0zODEs
> NiArMzgxLDkgQEANCiAvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBHTlUgcmVh
> ZGxpbmUgbGlicmFyeSAqLw0KIC8qICNkZWZpbmUgV0lUSF9SRUFETElORSAxICovDQogDQor
> LyogRGVmaW5lIGlmIHlvdSB3YW50IGN5Y2xlIGdhcmJhZ2UgY29sbGVjdGlvbiAqLw0KKyNk
> ZWZpbmUgV0lUSF9DWUNMRV9HQyAxDQorDQogLyogRGVmaW5lIGlmIHlvdSBoYXZlIGNsb2Nr
> LiAgKi8NCiAvKiAjZGVmaW5lIEhBVkVfQ0xPQ0sgKi8NCiANCi0tLSBQeXRob24tY3ZzL01h
> a2VmaWxlLmluCVN1biBBcHIgIDIgMjI6NTY6MjUgMjAwMA0KKysrIFB5dGhvbi1nYy9NYWtl
> ZmlsZS5pbglTYXQgQXByICA4IDAxOjM4OjI1IDIwMDANCkBAIC00MDEsNyArNDAxLDcgQEAN
> CiAJCSQoSU5TVEFMTF9EQVRBKSBNb2R1bGVzL01ha2VmaWxlICQoTElCUEwpL01ha2VmaWxl
> DQogCQkkKElOU1RBTExfREFUQSkgTW9kdWxlcy9TZXR1cCAkKExJQlBMKS9TZXR1cA0KIAkJ
> JChJTlNUQUxMX0RBVEEpIE1vZHVsZXMvU2V0dXAubG9jYWwgJChMSUJQTCkvU2V0dXAubG9j
> YWwNCi0JCSQoSU5TVEFMTF9EQVRBKSBNb2R1bGVzL1NldHVwLnRocmVhZCAkKExJQlBMKS9T
> ZXR1cC50aHJlYWQNCisJCSQoSU5TVEFMTF9EQVRBKSBNb2R1bGVzL1NldHVwLmF1dG8gJChM
> SUJQTCkvU2V0dXAuYXV0bw0KIAkJJChJTlNUQUxMX1BST0dSQU0pICQoc3JjZGlyKS9Nb2R1
> bGVzL21ha2VzZXR1cCAkKExJQlBMKS9tYWtlc2V0dXANCiAJCSQoSU5TVEFMTF9QUk9HUkFN
> KSAkKHNyY2RpcikvaW5zdGFsbC1zaCAkKExJQlBMKS9pbnN0YWxsLXNoDQogCQkkKElOU1RB
> TExfREFUQSkgJChzcmNkaXIpL01pc2MvTWFrZWZpbGUucHJlLmluICQoTElCUEwpL01ha2Vm
> aWxlLnByZS5pbg0KLS0tIFB5dGhvbi1jdnMvY29uZmlnLmguaW4JRnJpIE1hciAyNCAyMjoz
> MTo0MiAyMDAwDQorKysgUHl0aG9uLWdjL2NvbmZpZy5oLmluCVNhdCBBcHIgIDggMDE6Mzg6
> MjUgMjAwMA0KQEAgLTIwNCw2ICsyMDQsOSBAQA0KICAgIChzaGFyZWQgbGlicmFyeSBwbHVz
> IGFjY2Vzc29yeSBmaWxlcykuICovDQogI3VuZGVmIFdJVEhfTkVYVF9GUkFNRVdPUksNCiAN
> CisvKiBEZWZpbmUgaWYgeW91IHdhbnQgY3ljbGUgZ2FyYmFnZSBjb2xsZWN0aW9uICovDQor
> I3VuZGVmIFdJVEhfQ1lDTEVfR0MNCisNCiAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFu
> IG9mZl90LiAqLw0KICN1bmRlZiBTSVpFT0ZfT0ZGX1QNCiANCi0tLSBQeXRob24tY3ZzL2Nv
> bmZpZ3VyZS5pbglTdW4gQXByICAyIDIyOjU2OjI1IDIwMDANCisrKyBQeXRob24tZ2MvY29u
> ZmlndXJlLmluCVNhdCBBcHIgIDggMDE6Mzg6MjUgMjAwMA0KQEAgLTEwNjksMTAgKzEwNjks
> MjEgQEANCiBmaV0sDQogW0FDX01TR19SRVNVTFQobm8pXSkNCiANCitBQ19TVUJTVChVU0Vf
> R0NfTU9EVUxFKQ0KK1VTRV9HQ19NT0RVTEU9IiMiDQorDQorQUNfTVNHX0NIRUNLSU5HKGZv
> ciAtLXdpdGgtY3ljbGUtZ2MpDQorQUNfQVJHX1dJVEgoY3ljbGUtZ2MsIFstLXdpdGgtY3lj
> bGUtZ2MgICAgICAgICAgIGVuYWJsZSBnYXJiYWdlIGNvbGxlY3Rpb25dLCBbDQorQUNfTVNH
> X1JFU1VMVCgkd2l0aHZhbCkNCitBQ19ERUZJTkUoV0lUSF9DWUNMRV9HQykNCitVU0VfR0Nf
> TU9EVUxFPQ0KK10sDQorQUNfTVNHX1JFU1VMVChubykpDQorDQogIyBnZW5lcmF0ZSBvdXRw
> dXQgZmlsZXMNCiBBQ19PVVRQVVQoTWFrZWZpbGUgXA0KICBPYmplY3RzL01ha2VmaWxlIFwN
> CiAgUGFyc2VyL01ha2VmaWxlIFwNCiAgUHl0aG9uL01ha2VmaWxlIFwNCiAgTW9kdWxlcy9N
> YWtlZmlsZS5wcmUgXA0KLSBNb2R1bGVzL1NldHVwLnRocmVhZCkNCisgTW9kdWxlcy9TZXR1
> cC5hdXRvKQ0KLS0tIFB5dGhvbi1jdnMvTWlzYy9NYWtlZmlsZS5wcmUuaW4JV2VkIERlYyAg
> OSAxMDowNTozMyAxOTk4DQorKysgUHl0aG9uLWdjL01pc2MvTWFrZWZpbGUucHJlLmluCVNh
> dCBBcHIgIDggMDE6Mzg6MjUgMjAwMA0KQEAgLTE2OCw3ICsxNjgsNyBAQA0KIE1BS0VGSUxF
> PQkkKExJQlBMKS9NYWtlZmlsZQ0KIENPTkZJR0M9CSQoTElCUEwpL2NvbmZpZy5jDQogQ09O
> RklHQ0lOPQkkKExJQlBMKS9jb25maWcuYy5pbg0KLVNFVFVQPQkJJChMSUJQTCkvU2V0dXAu
> dGhyZWFkICQoTElCUEwpL1NldHVwLmxvY2FsICQoTElCUEwpL1NldHVwDQorU0VUVVA9CQkk
> KExJQlBMKS9TZXR1cC5hdXRvICQoTElCUEwpL1NldHVwLmxvY2FsICQoTElCUEwpL1NldHVw
> DQogDQogU1lTTElCUz0JJChMSUJNKSAkKExJQkMpDQogDQotLS0gUHl0aG9uLWN2cy9Nb2R1
> bGVzL01ha2VmaWxlLnByZS5pbglGcmkgTWFyIDI0IDIyOjMyOjI1IDIwMDANCisrKyBQeXRo
> b24tZ2MvTW9kdWxlcy9NYWtlZmlsZS5wcmUuaW4JU2F0IEFwciAgOCAwMTozODoyNSAyMDAw
> DQpAQCAtMTQ3LDEwICsxNDcsMTAgQEANCiAjIGdldHMgcmVtYWRlIGZyb20gc2NyYXRjaDsg
> dGhpcyBlbnN1cmVzIHRvIHJlbW92ZSBtb2R1bGVzIHRoYXQgYXJlIG5vDQogIyBsb25nZXIg
> cGVydGluZW50IChidXQgdGhhdCB3ZXJlIGluIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiku
> DQogY29uZmlnLmMgTWFrZWZpbGU6IE1ha2VmaWxlLnByZSBjb25maWcuYy5pbiAkKE1BS0VT
> RVRVUCkNCi1jb25maWcuYyBNYWtlZmlsZTogU2V0dXAudGhyZWFkIFNldHVwIFNldHVwLmxv
> Y2FsDQorY29uZmlnLmMgTWFrZWZpbGU6IFNldHVwLmF1dG8gU2V0dXAgU2V0dXAubG9jYWwN
> CiBjb25maWcuYyBNYWtlZmlsZToNCiAJCS1ybSAtZiAkKExJQlJBUlkpDQotCQkkKFNIRUxM
> KSAkKE1BS0VTRVRVUCkgU2V0dXAudGhyZWFkIFNldHVwLmxvY2FsIFNldHVwDQorCQkkKFNI
> RUxMKSAkKE1BS0VTRVRVUCkgU2V0dXAuYXV0byBTZXR1cC5sb2NhbCBTZXR1cA0KIA0KIGhh
> c3NpZ25hbDoNCiAJCS1ybSAtZiBoYXNzaWduYWwNCi0tLSBQeXRob24tY3ZzL01vZHVsZXMv
> U2V0dXAuaW4JU3VuIEFwciAgMiAyMjo1NjozNyAyMDAwDQorKysgUHl0aG9uLWdjL01vZHVs
> ZXMvU2V0dXAuaW4JU2F0IEFwciAgOCAwMTozODoyNSAyMDAwDQpAQCAtMTAwLDcgKzEwMCw3
> IEBADQogR0xIQUNLPS1EY2xlYXI9X19HTGNsZWFyDQogI2dsIGdsbW9kdWxlLmMgY2dlbnN1
> cHBvcnQuYyAtSSQoc3JjZGlyKSAkKEdMSEFDSykgLWxnbCAtbFgxMQ0KIA0KLSMgVGhlIHRo
> cmVhZCBtb2R1bGUgaXMgbm93IGF1dG9tYXRpY2FsbHkgZW5hYmxlZCwgc2VlIFNldHVwLnRo
> cmVhZC4NCisjIFRoZSB0aHJlYWQgbW9kdWxlIGlzIG5vdyBhdXRvbWF0aWNhbGx5IGVuYWJs
> ZWQsIHNlZSBTZXR1cC5hdXRvLg0KIA0KICMgUHVyZSBtb2R1bGUuICBDYW5ub3QgYmUgbGlu
> a2VkIGR5bmFtaWNhbGx5Lg0KICMgLURXSVRIX1FVQU5USUZZLCAtRFdJVEhfUFVSSUZZLCBv
> ciAtRFdJVEhfQUxMX1BVUkUNCi0tLSBQeXRob24tY3ZzL01vZHVsZXMvU2V0dXAuYXV0by5p
> bg0KKysrIFB5dGhvbi1nYy9Nb2R1bGVzL1NldHVwLmF1dG8uaW4JU2F0IEFwciAgOCAwMToz
> ODoyNSAyMDAwDQpAQCAtMCwwICsxLDE2IEBADQorIyBUaGlzIGZpbGUgaXMgdHJhbnNtb2dy
> aWZpZWQgaW50byBTZXR1cC5hdXRvIGJ5IGNvbmZpZy5zdGF0dXMuICBJdHMNCisjIHB1cnBv
> c2UgaXMgdG8gYXV0b21hdGljYWxseSBlbmFibGUgbW9kdWxlcyBnaXZlbiB3aGVuIGNlcnRh
> aW4NCisjIGFyZ3VtZW50cyBhcmUgZ2l2ZW4gdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuICBJ
> dCByZXBsYWNlcyB0aGUgb2xkDQorIyBTZXR1cC50aHJlYWQuaW4gZmlsZS4NCisNCisjIElu
> Y2x1ZGUgdGhlIHRocmVhZCBtb2R1bGUgd2hlbiB0aGUgLS13aXRoLXRocmVhZCBhcmd1bWVu
> dCBpcyBnaXZlbiB0bw0KKyMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuDQorIw0KKyMgKk5PVEUq
> OiBpZiB0aGUgY29uZmlndXJlIHNjcmlwdCBkZWNpZGVzIGl0IGNhbid0IHN1cHBvcnQgdGhy
> ZWFkcywgdGhlDQorIyB0aHJlYWQgbW9kdWxlIHdpbGwgc3RpbGwgYmUgZW5hYmxlZCBhbmQg
> Y2F1c2UgY29tcGlsZSBlcnJvcnMuICBUaGUNCisjIHNvbHV0aW9uIGlzIG5vdCB0byB1c2Ug
> LS13aXRoLXRocmVhZCBvbiBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0DQorIyB0aHJl
> YWRzLg0KK0BVU0VfVEhSRUFEX01PRFVMRUB0aHJlYWQgdGhyZWFkbW9kdWxlLmMNCisNCisj
> IEdhcmJhZ2UgY29sbGVjdGlvbiBlbmFibGVkIHdpdGggLS13aXRoLWN5Y2xlLWdjDQorQFVT
> RV9HQ19NT0RVTEVAZ2MgZ2Ntb2R1bGUuYw0KLS0tIFB5dGhvbi1jdnMvTGliL3Rlc3QvdGVz
> dF9nYy5weQ0KKysrIFB5dGhvbi1nYy9MaWIvdGVzdC90ZXN0X2djLnB5CVNhdCBBcHIgIDgg
> MDM6MjU6MjUgMjAwMA0KQEAgLTAsMCArMSw5MCBAQA0KK2ltcG9ydCBnYw0KKw0KK2RlZiB0
> ZXN0X2xpc3QoKToNCisgICAgbCA9IFtdDQorICAgIGwuYXBwZW5kKGwpDQorICAgIHByaW50
> ICdsaXN0IDB4JXgnICUgaWQobCkNCisgICAgZ2MuY29sbGVjdCgpDQorICAgIGRlbCBsDQor
> ICAgIGFzc2VydCBnYy5jb2xsZWN0KCkgPT0gMQ0KKw0KK2RlZiB0ZXN0X2RpY3QoKToNCisg
> ICAgZCA9IHt9DQorICAgIGRbMV0gPSBkDQorICAgIHByaW50ICdkaWN0IDB4JXgnICUgaWQo
> ZCkNCisgICAgZ2MuY29sbGVjdCgpDQorICAgIGRlbCBkDQorICAgIGFzc2VydCBnYy5jb2xs
> ZWN0KCkgPT0gMQ0KKw0KK2RlZiB0ZXN0X3R1cGxlKCk6DQorICAgIGwgPSBbXQ0KKyAgICB0
> ID0gKGwsKQ0KKyAgICBsLmFwcGVuZCh0KQ0KKyAgICBwcmludCAnbGlzdCAweCV4JyAlIGlk
> KGwpDQorICAgIHByaW50ICd0dXBsZSAweCV4JyAlIGlkKHQpDQorICAgIGdjLmNvbGxlY3Qo
> KQ0KKyAgICBkZWwgdA0KKyAgICBkZWwgbA0KKyAgICBhc3NlcnQgZ2MuY29sbGVjdCgpID09
> IDINCisNCitkZWYgdGVzdF9jbGFzcygpOg0KKyAgICBjbGFzcyBBOg0KKyAgICAgICAgcGFz
> cw0KKyAgICBBLmEgPSBBDQorICAgIHByaW50ICdjbGFzcyAweCV4JyAlIGlkKEEpDQorICAg
> IGdjLmNvbGxlY3QoKQ0KKyAgICBkZWwgQQ0KKyAgICBhc3NlcnQgZ2MuY29sbGVjdCgpID09
> IDINCisNCitkZWYgdGVzdF9pbnN0YW5jZSgpOg0KKyAgICBjbGFzcyBBOg0KKyAgICAgICAg
> cGFzcw0KKyAgICBhID0gQSgpDQorICAgIGEuYSA9IGENCisgICAgcHJpbnQgcmVwcihhKQ0K
> KyAgICBnYy5jb2xsZWN0KCkNCisgICAgZGVsIGENCisgICAgYXNzZXJ0IGdjLmNvbGxlY3Qo
> KSA9PSAyDQorDQorZGVmIHRlc3RfZmluYWxpemVyKCk6DQorICAgIGNsYXNzIEE6DQorICAg
> ICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcw0KKyAgICBjbGFzcyBCOg0KKyAgICAgICAg
> cGFzcw0KKyAgICBhID0gQSgpDQorICAgIGEuYSA9IGENCisgICAgaWRfYSA9IGlkKGEpDQor
> ICAgIGIgPSBCKCkNCisgICAgYi5iID0gYg0KKyAgICBwcmludCAnYScsIHJlcHIoYSkNCisg
> ICAgcHJpbnQgJ2InLCByZXByKGIpDQorICAgIGdjLmNvbGxlY3QoKQ0KKyAgICBnYy5nYXJi
> YWdlWzpdID0gW10NCisgICAgZGVsIGENCisgICAgZGVsIGINCisgICAgYXNzZXJ0IGdjLmNv
> bGxlY3QoKSA9PSA0DQorICAgIGFzc2VydCBpZChnYy5nYXJiYWdlWzBdKSA9PSBpZF9hDQor
> DQorZGVmIHRlc3RfZnVuY3Rpb24oKToNCisgICAgZCA9IHt9DQorICAgIGV4ZWMoImRlZiBm
> KCk6IHBhc3NcbiIpIGluIGQNCisgICAgcHJpbnQgJ2RpY3QgMHgleCcgJSBpZChkKQ0KKyAg
> ICBwcmludCAnZnVuYyAweCV4JyAlIGlkKGRbJ2YnXSkNCisgICAgZ2MuY29sbGVjdCgpDQor
> ICAgIGRlbCBkDQorICAgIGFzc2VydCBnYy5jb2xsZWN0KCkgPT0gMg0KKw0KKw0KK2RlZiB0
> ZXN0X2FsbCgpOg0KKyAgICBkZWJ1ZyA9IGdjLmdldF9kZWJ1ZygpDQorICAgIGdjLnNldF9k
> ZWJ1ZyhnYy5ERUJVR19MRUFLIHwgZ2MuREVCVUdfU1RBVFMpDQorICAgIHRlc3RfbGlzdCgp
> DQorICAgIHRlc3RfZGljdCgpDQorICAgIHRlc3RfdHVwbGUoKQ0KKyAgICB0ZXN0X2NsYXNz
> KCkNCisgICAgdGVzdF9pbnN0YW5jZSgpDQorICAgIHRlc3RfZmluYWxpemVyKCkNCisgICAg
> dGVzdF9mdW5jdGlvbigpDQorICAgIGdjLnNldF9kZWJ1ZyhkZWJ1ZykNCisNCit0ZXN0X2Fs
> bCgpDQotLS0gUHl0aG9uLWN2cy9QQ2J1aWxkL3B5dGhvbjE2LmRzcAlGcmkgQXByICA3IDE1
> OjI3OjA0IDIwMDANCisrKyBQeXRob24tZ2MvUENidWlsZC9weXRob24xNi5kc3AJU2F0IEFw
> ciAgOCAwMjoyMjo0OCAyMDAwDQpAQCAtNjQ1LDYgKzY0NSwyMSBAQA0KICMgRW5kIFNvdXJj
> ZSBGaWxlDQ0KICMgQmVnaW4gU291cmNlIEZpbGUNDQogDQ0KK1NPVVJDRT0uLlxNb2R1bGVz
> XGdjbW9kdWxlLmMNDQorDQ0KKyFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbjE2IC0gV2luMzIg
> UmVsZWFzZSINDQorDQ0KKyFFTFNFSUYgICIkKENGRykiID09ICJweXRob24xNiAtIFdpbjMy
> IERlYnVnIg0NCisNDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbjE2IC0gV2luMzIg
> QWxwaGEgRGVidWciDQ0KKw0NCishRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9uMTYgLSBX
> aW4zMiBBbHBoYSBSZWxlYXNlIg0NCisNDQorIUVORElGIA0NCisNDQorIyBFbmQgU291cmNl
> IEZpbGUNDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0NCisNDQogU09VUkNFPS4uXFB5dGhvblxn
> ZXRhcmdzLmMNDQogDQ0KICFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbjE2IC0gV2luMzIgUmVs
> ZWFzZSIN
>
>
>
>
> --__--__--
>
> _______________________________________________
> Patches mailing list
> Patches@python.org
> http://www.python.org/mailman/listinfo/patches
>
>
> End of Patches Digest_______________________________________________
> Patches mailing list
> Patches@python.org
> http://www.python.org/mailman/listinfo/patches