Re: Re: simulated arm/gripper

Tim Oates <[email protected]> Mon, 25 Jul 2005 14:34:57 -0400 (EDT)
Newsgroups gmane.comp.breve
Message-ID <Pine.LNX.4.30.0507251426180.19617-101000@ite336-pc-01.cs.umbc.edu>
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to [email protected] for more info.

--1434600542-14261042-1122316497=:19617
Content-Type: TEXT/PLAIN; charset=US-ASCII

Andrei,

Attached to this mail is a tar file with my current arm code.  Just untar
it and run breve on ArmDemo.tz.  You'll have to use the latest breve beta
or the servo classes I wrote won't work correctly.  The code isn't as clean
as I'd like, but it should be pretty readable.

As for instability, I have noticed that small changes in the order in which
things are linked or the choice of the root link can lead to dramatically
different behaviors.  In some cases, however, I've done dumb things like
fixing the arm at a point that's closer to the floor than the arm is long,
and the simulation does the best it can to deal with that, which usually
involves lots of flailing around.

Comments/questions on the attached code are welcome.

One kink I'd like to work out has to do with orienting the arm.  I've got a
method called "attach" that allows you to specify a link and location on
the link where you'd like the arm to be attached.  I'd also like to specify
an orientation.  If I use set-relative-rotation, I get the orientation, but
the physics engine tries to swing the arm from its current orientation to
the new one in one tick, and the arm flails wildly as it tries to return
its joints to their nominal positions.  I'd like to know how to rotate the
arm without having this happen.  I suspect it might have something to do
with the timing of the set-relative-rotation, e.g. before the other
components of the arm are linked together.

  - tim

On Mon, 25 Jul 2005, Andrei Androsoff wrote:

> Tim, all,
>
> I've been trying to build an articulated arm too and have been
> running into a lot of problems with the physics engine. It seems that
> if I add too many links to my MultiBody, the arm tends to fly apart
> or fly away (!) when the simulation starts (often preceded by a
> painful-looking squirming and wiggling). If I tweak the physical
> dimensions of the Joints or Shapes it often removes the problem,
> until I move a particular joint too far, and then the machine flies
> apart.
>
> Sometimes the coordinate system of child objects seems to get messed
> up as well - moving a parent object will cause the child to rotate
> (e.g. flexing your elbow will cause your wrist to twist). Again if
> you make the joint a little bigger or longer, keeping the normals the
> same, the problem will go away or get worse). I don't know of any
> more genteel way to put it other than the physics engine is "freaking
> out".
>
> I have also built walking robots and experienced similar problems.
> The behaviour is sometimes determinate (same thing happens every time
> you start the sim) but sometimes it actually varies between runs (no
> random numbers in the code of course).
>
> Tim, since you say your arm works, did you run into anything like
> this? Any pointers? Does anybody else experience these things?
>
> By the way, I'm not enabling self-collisions and I'm not using set-
> relative-rotation for any of the joints. All my joints are instances
> of a subclass of RevoluteJoint.
>
> I know this screams for a code example but I want to clean it up a
> bit and see if there is any obvious fix in the meantime.
>
> Andrei
>
>
> _______________________________________________
> breve mailing list
> [email protected]
> http://lists.spiderland.org/mailman/listinfo/breve
>

---------------------------------------
Tim Oates, Assistant Professor
Department of CS and EE
University of Maryland Baltimore County
(410) 455-3082
http://www.cs.umbc.edu/~oates


--1434600542-14261042-1122316497=:19617
Content-Type: APPLICATION/x-tar; name="demo.tar"
Content-Transfer-Encoding: BASE64
Content-ID: <[email protected]>
Content-Description: 
Content-Disposition: attachment; filename="demo.tar"

ZGVtby8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADAwNDA3NTUAMDAwMjAwMgAwMDAwMDI0ADAwMDAwMDAwMDAw
ADEwMjcxMjI3MzQxADAxMDc2NQAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAG9hdGVz
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAABkZW1vL0FybS50egAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY0NAAwMDAyMDAyADAw
MDAwMjQAMDAwMDAwMTYyNDAAMTAyNzEyMjcxMzYAMDEyMDY1ACAwAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAHVzdGFyICAAb2F0ZXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABz
dGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMKIyBBIDYgRE9G
IGFybSAoMiBET0Ygc2hvdWxkZXIsIDEgRE9GIGVsYm93LCAyIERPRiB3cmlz
dCwgMSBET0YgZ3JpcHBlcikuCiMKCkB1c2UgSm9pbnQuCkB1c2UgTXVsdGlC
b2R5LgpAdXNlIExpbmsuCkB1c2UgU2hhcGUuCkB1c2UgU3RhdGlvbmFyeS4K
QHVzZSBSZXZvbHV0ZVNlcnZvLgpAdXNlIFVuaXZlcnNhbFNlcnZvLgoKCgpA
ZGVmaW5lIEJBU0VfSEVJR0hUIDAuMS4KCgoKTXVsdGlCb2R5IDogQXJtIHsK
CgogICAgKyB2YXJpYWJsZXM6CgogICAgICAgIGJhc2UsIGJhc2VTaGFwZSAo
b2JqZWN0KS4gICAgICAgICAgICAgICAgICAgICAjIEJhc2UKICAgICAgICB1
cHBlcmFybSwgdXBwZXJhcm1TaGFwZSAob2JqZWN0KS4gICAgICAgICAgICAg
IyBVcHBlciBhcm0KICAgICAgICBmb3JlYXJtLCBmb3JlYXJtU2hhcGUgKG9i
amVjdCkuICAgICAgICAgICAgICAgIyBGb3JlYXJtCiAgICAgICAgcGFsbSwg
cGFsbVNoYXBlIChvYmplY3QpLiAgICAgICAgICAgICAgICAgICAgICMgUGFs
bQogICAgICAgIGdyaXBwZXIxLCBncmlwcGVyMiwgZ3JpcHBlclNoYXBlIChv
YmplY3QpLiAgICAjIEdyaXBwZXJzCiAgICAgICAgYmFzZUpvaW50LCBzaG91
bGRlciwgZWxib3csIHdyaXN0IChvYmplY3QpLiAgICMgSm9pbnRzCiAgICAg
ICAgcHJpc21hdGljMSwgcHJpc21hdGljMiAob2JqZWN0KS4gICAgICAgICAg
ICAgICMgSm9pbnRzCiAgICAgICAgdXBwZXJhcm1MZW5ndGgsIHBhbG1XaWR0
aCwgd2lkdGggKGZsb2F0KS4KICAgICAgICBncmlwcGVyUG9zaXRpb24gKGZs
b2F0KS4KICAgICAgICBqb2ludFZlbG9jaXR5LCBncmlwcGVyVmVsb2NpdHkg
KGZsb2F0KS4KCgogICAgIwogICAgIyBBcm1zIG11c3QgYmUgaW5pdGlhbGl6
ZWQgdXNpbmcgdGhpcyBtZXRob2QgdG8gc3BlY2lmaXkgcGFyYW1ldGVycwog
ICAgIwogICAgKyB0byBpbml0LXdpdGggdXBwZXJhcm1MZW5ndGggdGhlVXBw
ZXJhcm1MZW5ndGggKGZsb2F0KQogICAgICAgICAgICAgICAgICAgZm9yZWFy
bUxlbmd0aCB0aGVGb3JlYXJtTGVuZ3RoIChmbG9hdCkKICAgICAgICAgICAg
ICAgICAgIHBhbG1XaWR0aCB0aGVQYWxtV2lkdGggKGZsb2F0KQogICAgICAg
ICAgICAgICAgICAgZ3JpcHBlckxlbmd0aCB0aGVHcmlwcGVyTGVuZ3RoIChm
bG9hdCkKICAgICAgICAgICAgICAgICAgIHdpZHRoIHRoZVdpZHRoIChmbG9h
dCkKICAgICAgICAgICAgICAgICAgIGNvbG9yIHRoZUNvbG9yID0gKDAuMywg
MC4zLCAwLjMpICh2ZWN0b3IpOgoKICAgICAgICAjIENyZWF0ZSBTaGFwZXMK
ICAgICAgICBiYXNlU2hhcGUgPSAKICAgICAgICAgIChuZXcgQ3ViZSBpbml0
LXdpdGggc2l6ZSAoMiAqIHRoZVdpZHRoLCBCQVNFX0hFSUdIVCwgMiAqIHRo
ZVdpZHRoKSkuCiAgICAgICAgdXBwZXJhcm1TaGFwZSA9IAogICAgICAgICAg
KG5ldyBDdWJlIGluaXQtd2l0aCBzaXplICh0aGVXaWR0aCwgdGhlVXBwZXJh
cm1MZW5ndGgsIHRoZVdpZHRoKSkuCiAgICAgICAgZm9yZWFybVNoYXBlID0g
CiAgICAgICAgICAobmV3IEN1YmUgaW5pdC13aXRoIHNpemUgKHRoZVdpZHRo
LCB0aGVGb3JlYXJtTGVuZ3RoLCB0aGVXaWR0aCkpLgogICAgICAgIHBhbG1T
aGFwZSA9IAogICAgICAgICAgKG5ldyBDdWJlIGluaXQtd2l0aCBzaXplICh0
aGVQYWxtV2lkdGgsIHRoZVdpZHRoLCB0aGVXaWR0aCkpLgogICAgICAgIGdy
aXBwZXJTaGFwZSA9IAogICAgICAgICAgKG5ldyBDdWJlIGluaXQtd2l0aCBz
aXplICh0aGVXaWR0aCwgdGhlR3JpcHBlckxlbmd0aCwgdGhlV2lkdGgpKS4K
CiAgICAgICAgIyBDcmVhdGUgbGlua3MKICAgICAgICBiYXNlID0gbmV3IExp
bmsuCiAgICAgICAgdXBwZXJhcm0gPSBuZXcgTGluay4KICAgICAgICBmb3Jl
YXJtID0gbmV3IExpbmsuCiAgICAgICAgcGFsbSA9IG5ldyBMaW5rLgogICAg
ICAgIGdyaXBwZXIxID0gbmV3IExpbmsuCiAgICAgICAgZ3JpcHBlcjIgPSBu
ZXcgTGluay4KCiAgICAgICAgIyBJbml0aWFsaXplIHNoYXBlcwogICAgICAg
IGJhc2Ugc2V0LXNoYXBlIHRvIGJhc2VTaGFwZS4KICAgICAgICB1cHBlcmFy
bSBzZXQtc2hhcGUgdG8gdXBwZXJhcm1TaGFwZS4KICAgICAgICBmb3JlYXJt
IHNldC1zaGFwZSB0byBmb3JlYXJtU2hhcGUuCiAgICAgICAgcGFsbSBzZXQt
c2hhcGUgdG8gcGFsbVNoYXBlLgogICAgICAgIGdyaXBwZXIxIHNldC1zaGFw
ZSB0byBncmlwcGVyU2hhcGUuCiAgICAgICAgZ3JpcHBlcjIgc2V0LXNoYXBl
IHRvIGdyaXBwZXJTaGFwZS4KCiAgICAgICAgIyBJbml0aWFsaXplIGNvbG9y
cwogICAgICAgIGJhc2Ugc2V0LWNvbG9yIHRvIHRoZUNvbG9yLgogICAgICAg
IHVwcGVyYXJtIHNldC1jb2xvciB0byB0aGVDb2xvci4KICAgICAgICBmb3Jl
YXJtIHNldC1jb2xvciB0byB0aGVDb2xvci4KICAgICAgICBwYWxtIHNldC1j
b2xvciB0byB0aGVDb2xvci4KICAgICAgICBncmlwcGVyMSBzZXQtY29sb3Ig
dG8gdGhlQ29sb3IuCiAgICAgICAgZ3JpcHBlcjIgc2V0LWNvbG9yIHRvIHRo
ZUNvbG9yLgoKICAgICAgICAjIE1pc2MgaW5pdGlhbGl6YXRpb25zCiAgICAg
ICAgZ3JpcHBlcjEgc2V0LW11IHRvIDEwMDAwMC4wLgogICAgICAgIGdyaXBw
ZXIyIHNldC1tdSB0byAxMDAwMDAuMC4KCiAgICAgICAgIyBDb25uZWN0IGJh
c2UgYW5kIHVwcGVyIGFybSB2aWEgc2hvdWxkZXIgICAgICAgIAogICAgICAg
IHNob3VsZGVyID0gbmV3IFVuaXZlcnNhbFNlcnZvLgogICAgICAgIHNob3Vs
ZGVyIGxpbmsgcGFyZW50IGJhc2UgdG8tY2hpbGQgdXBwZXJhcm0KICAgICAg
ICAgICAgICAgICB3aXRoLXBhcmVudC1wb2ludCAoMCwgLUJBU0VfSEVJR0hU
LCAwKSAKICAgICAgICAgICAgICAgICB3aXRoLWNoaWxkLXBvaW50ICgwLCB0
aGVVcHBlcmFybUxlbmd0aC8yLCAwKSAKICAgICAgICAgICAgICAgICB3aXRo
LW5vcm1hbCAoMCwgMSwgMCkuCiAgICAgICAgc2hvdWxkZXIgc2V0LXN0cmVu
Z3RoLWxpbWl0IHRvIChzaG91bGRlciBnZXQtc3RyZW5ndGgtaGFyZC1saW1p
dCkuCgogICAgICAgICMgQ29ubmVjdCB1cHBlciBhcm0gYW5kIGZvcmVhcm0g
dmlhIGVsYm93CiAgICAgICAgZWxib3cgPSBuZXcgUmV2b2x1dGVTZXJ2by4K
ICAgICAgICBlbGJvdyBsaW5rIHBhcmVudCB1cHBlcmFybSB0by1jaGlsZCBm
b3JlYXJtCiAgICAgICAgICAgICAgICAgICB3aXRoLXBhcmVudC1wb2ludCAo
MCwgLXRoZVVwcGVyYXJtTGVuZ3RoLzIsIDApIAogICAgICAgICAgICAgICAg
ICAgd2l0aC1jaGlsZC1wb2ludCAoMCwgdGhlRm9yZWFybUxlbmd0aC8yLCAw
KSAKICAgICAgICAgICAgICAgICAgIHdpdGgtbm9ybWFsICgxLCAwLCAwKS4K
ICAgICAgICBlbGJvdyBzZXQtc3RyZW5ndGgtbGltaXQgdG8gKGVsYm93IGdl
dC1zdHJlbmd0aC1oYXJkLWxpbWl0KS4KCiAgICAgICAgIyBDb25uZWN0IGZv
cmVhcm0gYW5kIHBhbG0gdmlhIHdyaXN0CiAgICAgICAgd3Jpc3QgPSBuZXcg
VW5pdmVyc2FsU2Vydm8uCiAgICAgICAgd3Jpc3QgbGluayBwYXJlbnQgZm9y
ZWFybSB0by1jaGlsZCBwYWxtCiAgICAgICAgICAgICAgICAgICB3aXRoLXBh
cmVudC1wb2ludCAoMCwgLXRoZUZvcmVhcm1MZW5ndGgvMiwgMCkgCiAgICAg
ICAgICAgICAgICAgICB3aXRoLWNoaWxkLXBvaW50ICgwLCAwLCAwKSAKICAg
ICAgICAgICAgICAgICAgIHdpdGgtbm9ybWFsICgwLCAxLCAwKS4KICAgICAg
ICB3cmlzdCBzZXQtc3RyZW5ndGgtbGltaXQgdG8gKHdyaXN0IGdldC1zdHJl
bmd0aC1oYXJkLWxpbWl0KS4KCiAgICAgICAgIyBDb25uZWN0IGdyaXBwZXIg
dG8gcGFsbSB2aWEgcHJpc21hdGljIGpvaW50CiAgICAgICAgcHJpc21hdGlj
MSA9IG5ldyBQcmlzbWF0aWNKb2ludC4KICAgICAgICBwcmlzbWF0aWMxIGxp
bmsgcGFyZW50IHBhbG0gdG8tY2hpbGQgZ3JpcHBlcjEKICAgICAgICAgICAg
ICAgICAgICB3aXRoLW5vcm1hbCAoMSwgMCwgMCkKICAgICAgICAgICAgICAg
ICAgICB3aXRoLXBhcmVudC1wb2ludCAoLXRoZVBhbG1XaWR0aC8yLCB0aGVX
aWR0aC8yLCAwKQogICAgICAgICAgICAgICAgICAgIHdpdGgtY2hpbGQtcG9p
bnQgKDAsIHRoZUdyaXBwZXJMZW5ndGgvMiwgMCkuCiAgICAgICAgcHJpc21h
dGljMSBzZXQtc3RyZW5ndGgtbGltaXQgdG8gKHByaXNtYXRpYzEgZ2V0LXN0
cmVuZ3RoLWhhcmQtbGltaXQpLgogICAgICAgIHByaXNtYXRpYzEgc2V0LWpv
aW50LWxpbWl0cyAKICAgICAgICAgICAgICAgICAgIG1heCAwLjAKICAgICAg
ICAgICAgICAgICAgIG1pbiAtdGhlUGFsbVdpZHRoLzIgKyB0aGVXaWR0aC8y
LgoKICAgICAgICAjIENvbm5lY3QgZ3JpcHBlciB0byBwYWxtIHZpYSBwcmlz
bWF0aWMgam9pbnQKICAgICAgICBwcmlzbWF0aWMyID0gbmV3IFByaXNtYXRp
Y0pvaW50LgogICAgICAgIHByaXNtYXRpYzIgbGluayBwYXJlbnQgcGFsbSB0
by1jaGlsZCBncmlwcGVyMgogICAgICAgICAgICAgICAgICAgd2l0aC1ub3Jt
YWwgKDEsIDAsIDApCiAgICAgICAgICAgICAgICAgICB3aXRoLXBhcmVudC1w
b2ludCAodGhlUGFsbVdpZHRoLzIsIHRoZVdpZHRoLzIsIDApCiAgICAgICAg
ICAgICAgICAgICB3aXRoLWNoaWxkLXBvaW50ICgwLCB0aGVHcmlwcGVyTGVu
Z3RoLzIsIDApLgogICAgICAgIHByaXNtYXRpYzIgc2V0LXN0cmVuZ3RoLWxp
bWl0IHRvIChwcmlzbWF0aWMyIGdldC1zdHJlbmd0aC1oYXJkLWxpbWl0KS4K
ICAgICAgICBwcmlzbWF0aWMyIHNldC1qb2ludC1saW1pdHMgbWluIDAuMCAK
ICAgICAgICAgICAgICAgICAgIG1heCB0aGVQYWxtV2lkdGgvMiAtIHRoZVdp
ZHRoLzIuCgogICAgICAgICMgQ3JlYXRlIGJhc2Ugam9pbnQuCiAgICAgICAg
YmFzZUpvaW50ID0gbmV3IEZpeGVkSm9pbnQuCgogICAgICAgICMgU3RvcmUg
c29tZSB2YWx1ZXMgZm9yIHVzZSBieSBvdGhlciBtZXRob2RzCiAgICAgICAg
dXBwZXJhcm1MZW5ndGggPSB0aGVVcHBlcmFybUxlbmd0aC4KICAgICAgICBw
YWxtV2lkdGggPSB0aGVQYWxtV2lkdGguCiAgICAgICAgd2lkdGggPSB0aGVX
aWR0aC4KICAgICAgICBncmlwcGVyUG9zaXRpb24gPSAxLgogICAgICAgIGpv
aW50VmVsb2NpdHkgPSAxLgogICAgICAgIGdyaXBwZXJWZWxvY2l0eSA9IDAu
NS4KCiAgICAgICAgc2VsZiBzZXQtcm9vdCB0byBiYXNlLgoKICAgICAgICBy
ZXR1cm4gc2VsZi4KCgogICMgCiAgIyBBdHRhY2ggdGhlIGFybSB0byB0aGVQ
YXJlbnQgb2JqZWN0IGF0IHRoZUxvY2F0aW9uIG9uIHBhcmVudAogICMKICAr
IHRvIGF0dGFjaCB0byB0aGVQYXJlbnQgKG9iamVjdCkgYXQgdGhlTG9jYXRp
b24gKHZlY3Rvcik6CgogICAgICAgYmFzZUpvaW50IGxpbmsgcGFyZW50IHRo
ZVBhcmVudCB0by1jaGlsZCBiYXNlIAogICAgICAgICAgICAgICAgICAgICAg
d2l0aC1wYXJlbnQtcG9pbnQgdGhlTG9jYXRpb24KICAgICAgICAgICAgICAg
ICAgICAgIHdpdGgtY2hpbGQtcG9pbnQgKDAsIC11cHBlcmFybUxlbmd0aC8y
LCAwKS4KCgogICsgdG8gc2V0LWpvaW50LXZlbG9jaXR5IHRvIHRoZVZlbG9j
aXR5IChmbG9hdCk6CgogICAgICBqb2ludFZlbG9jaXR5ID0gdGhlVmVsb2Np
dHkuCgoKICArIHRvIHNldC1ncmlwcGVyLXZlbG9jaXR5IHRvIHRoZVZlbG9j
aXR5IChmbG9hdCk6CiAKICAgICAgZ3JpcHBlclZlbG9jaXR5ID0gdGhlVmVs
b2NpdHkuCgoKICArIHRvIHNldC1lbGJvdy1hbmdsZSB0byBhbmdsZSAoZmxv
YXQpOgoKICAgICAgZWxib3cgc2V0LWFuZ2xlIHRvIGFuZ2xlLgoKCiAgKyB0
byBzZXQtd3Jpc3QtYW5nbGUxIHRvIGFuZ2xlIChmbG9hdCk6CgogICAgICB3
cmlzdCBzZXQtYW5nbGUxIHRvIGFuZ2xlLgoKCiAgKyB0byBzZXQtd3Jpc3Qt
YW5nbGUyIHRvIGFuZ2xlIChmbG9hdCk6CgogICAgICB3cmlzdCBzZXQtYW5n
bGUyIHRvIGFuZ2xlLgoKCiAgKyB0byBzZXQtc2hvdWxkZXItYW5nbGUxIHRv
IGFuZ2xlIChmbG9hdCk6CgogICAgICBzaG91bGRlciBzZXQtYW5nbGUxIHRv
IGFuZ2xlLgoKCiAgKyB0byBzZXQtc2hvdWxkZXItYW5nbGUyIHRvIGFuZ2xl
IChmbG9hdCk6CgogICAgICBzaG91bGRlciBzZXQtYW5nbGUyIHRvIGFuZ2xl
LgoKCiAgKyB0byBzZXQtZ3JpcHBlci1wb3NpdGlvbiB0byBwb3NpdGlvbiAo
ZmxvYXQpOgoKICAgICAgIGdyaXBwZXJQb3NpdGlvbiA9IHBvc2l0aW9uLgoK
CiAgKyB0byBpdGVyYXRlOgoKICAgICAgIHBvc2l0aW9uMSwgcG9zaXRpb24y
IChmbG9hdCkuICAgIyBDdXJyZW50IGdyaXBwZXIgcG9zaXRpb25zCiAgICAg
ICB0YXJnZXQxLCB0YXJnZXQyIChmbG9hdCkuICAgICAgICMgVGFyZ2V0IGdy
aXBwZXIgcG9zaXRpb25zCgoKICAgICAgICMgVXBkYXRlIGpvaW50IHZlbG9j
aXRpZXMKICAgICAgIHNob3VsZGVyIHNldC12ZWxvY2l0eSB0byBqb2ludFZl
bG9jaXR5LgogICAgICAgZWxib3cgc2V0LXZlbG9jaXR5IHRvIGpvaW50VmVs
b2NpdHkuCiAgICAgICB3cmlzdCBzZXQtdmVsb2NpdHkgdG8gam9pbnRWZWxv
Y2l0eS4KCgogICAgICAgIyBDb21wdXRlIGFuZCBzZXQgdmVsb2NpdHkgZm9y
IGdyaXBwZXIxCiAgICAgICBwb3NpdGlvbjEgPSAocHJpc21hdGljMSBnZXQt
am9pbnQtcG9zaXRpb24pLgogICAgICAgdGFyZ2V0MSA9IC0oMSAtIGdyaXBw
ZXJQb3NpdGlvbikgKiAocGFsbVdpZHRoLzIgLSB3aWR0aC8yKS4KCiAgICAg
ICBpZiAoYWJzKHBvc2l0aW9uMSAtIHRhcmdldDEpIDwgMC4wNSkgOiB7CiAg
ICAgICAgIHByaXNtYXRpYzEgc2V0LWpvaW50LXZlbG9jaXR5IHRvIDAuCiAg
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAocG9zaXRpb24xIDwgdGFyZ2V0
MSkgOgogICAgICAgICAgIHByaXNtYXRpYzEgc2V0LWpvaW50LXZlbG9jaXR5
IHRvIGdyaXBwZXJWZWxvY2l0eS4KICAgICAgICAgZWxzZQogICAgICAgICAg
IHByaXNtYXRpYzEgc2V0LWpvaW50LXZlbG9jaXR5IHRvIC1ncmlwcGVyVmVs
b2NpdHkuCiAgICAgICB9CgoKICAgICAgICMgQ29tcHV0ZSBhbmQgc2V0IHZl
bG9jaXR5IGZvciBncmlwcGVyMgogICAgICAgcG9zaXRpb24yID0gKHByaXNt
YXRpYzIgZ2V0LWpvaW50LXBvc2l0aW9uKS4KICAgICAgIHRhcmdldDIgPSAo
MSAtIGdyaXBwZXJQb3NpdGlvbikgKiAocGFsbVdpZHRoLzIgLSB3aWR0aC8y
KS4KCiAgICAgICBpZiAoYWJzKHBvc2l0aW9uMiAtIHRhcmdldDIpIDwgMC4w
NSkgOiB7CiAgICAgICAgIHByaXNtYXRpYzIgc2V0LWpvaW50LXZlbG9jaXR5
IHRvIDAuCiAgICAgICB9IGVsc2UgewogICAgICAgICBpZiAocG9zaXRpb24y
IDwgdGFyZ2V0MikgOgogICAgICAgICAgIHByaXNtYXRpYzIgc2V0LWpvaW50
LXZlbG9jaXR5IHRvIGdyaXBwZXJWZWxvY2l0eS4KICAgICAgICAgZWxzZQog
ICAgICAgICAgIHByaXNtYXRpYzIgc2V0LWpvaW50LXZlbG9jaXR5IHRvIC1n
cmlwcGVyVmVsb2NpdHkuCiAgICAgICB9Cn0KAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAGRlbW8vQXJtRGVtby50egAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQ0ADAwMDIwMDIA
MDAwMDAyNAAwMDAwMDAwNjQ2MwAxMDI3MTIyNzMwMAAwMTI2NzEAIDAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAdXN0YXIgIABvYXRlcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwojIEEgZGVt
byBzY3JpcHQgZm9yIHRoZSA2IERPRiBhcm0KIwojIDA3LzE1LzA1IEpUTyAt
IENyZWF0ZWQKIwoKCgpAdXNlIFBoeXNpY2FsQ29udHJvbC4KQHVzZSBBcm0u
CgoKCkNvbnRyb2xsZXIgQXJtVGVzdC4KCgoKUGh5c2ljYWxDb250cm9sIDog
QXJtVGVzdCB7CgoKICAgICsgdmFyaWFibGVzOgoKICAgICAgICBhcm0gKG9i
amVjdCkuICAgICAgICAjIFRoZSBhcm0KICAgICAgICBzdGF0ZSAoaW50KS4g
ICAgICAgICAjIEN1cnJlbnQgc3RhdGUgb2YgZGVtbyBmaW5pdGUgc3RhdGUg
bWFjaGluZQogICAgICAgIGJveCAob2JqZWN0KS4gICAgICAgICMgQW4gb2Jq
ZWN0IGZvciB0aGUgYXJtIHRvIGludGVyYWN0IHdpdGgKICAgICAgICBib3hT
aGFwZSAob2JqZWN0KS4gICAjIFNoYXBlIG9mIHRoZSBvYmplY3QKCgogICAg
KyB0byBpbml0OgoKICAgICAgICAjIFNldCB1cCBlbnZpcm9ubWVudAogICAg
ICAgIHNlbGYgc2V0LWJhY2tncm91bmQtY29sb3IgdG8gKC40LCAuNCwgLjQp
LgogICAgICAgIG5ldyBTdGF0aW9uYXJ5IAogICAgICAgICAgICByZWdpc3Rl
ciB3aXRoLXNoYXBlIChuZXcgQ3ViZSBpbml0LXdpdGggc2l6ZSAoMTAwLCAw
LjEsIDEwMCkpIAogICAgICAgICAgICAgICAgICAgICBhdC1sb2NhdGlvbiAo
MCwgMCwgMCkuCgogICAgICAgICMgQ3JlYXRlIGFuIG9iamVjdCB0byBpbnRl
cmFjdCB3aXRoIAogICAgICAgIGJveFNoYXBlID0gKG5ldyBDdWJlIGluaXQt
d2l0aCBzaXplICgxLCA2LCAxKSkuCiAgICAgICAgYm94U2hhcGUgc2V0LW1h
c3MgdG8gMC41LgogICAgICAgIGJveCA9IG5ldyBNb2JpbGUuCiAgICAgICAg
Ym94IHNldC1zaGFwZSB0byBib3hTaGFwZS4KICAgICAgICBib3ggbW92ZSB0
byAoMi41LCA0LCAyLjUpLgogICAgICAgIGJveCBlbmFibGUtcGh5c2ljcy4K
ICAgICAgICBib3ggc2V0LW11IHRvIDEwMDAwMC4KICAgICAgICBib3ggc2V0
LWUgdG8gMC4wLgogICAgICAgIGJveCBzZXQtY29sb3IgdG8gKDAuOCwgMC4w
LCAwLjApLgoKICAgICAgICAjIENyZWF0ZSBhcm0KICAgICAgICBhcm0gPSAo
bmV3IEFybSBpbml0LXdpdGggdXBwZXJhcm1MZW5ndGggNC4wCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhcm1MZW5ndGggNC4wCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbG1XaWR0aCAzLjAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpcHBlckxlbmd0
aCAzLjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgg
MC41KS4KICAgICAgICBhcm0gYXR0YWNoIHRvIDAgYXQgKDAsIDEyLCAwKS4K
ICAgICAgICBhcm0gc2V0LWpvaW50LXZlbG9jaXR5IHRvIDAuNS4KICAgICAg
ICBhcm0gc2V0LWdyaXBwZXItdmVsb2NpdHkgdG8gMC41LgoKICAgICAgICAj
IFNldCB1cCB2aWV3cG9pbnQgICAgICAgIAogICAgICAgIHNlbGYgcG9pbnQt
Y2FtZXJhIGF0ICgwLCAxMCwgMCkgZnJvbSAoMTUsIDIwLCAxNSkuCiAgICAg
ICAgc2VsZiB3YXRjaCBpdGVtIGFybS4KCiAgICAgICAgIyBSdW4gdGhlIGRl
bW8KICAgICAgICBzdGF0ZSA9IDAuCiAgICAgICAgc2VsZiBzY2hlZHVsZSBt
ZXRob2QtY2FsbCAiZGVtbyIgYXQtdGltZSAoKGNvbnRyb2xsZXIgZ2V0LXRp
bWUpICsgMTUpLgoKCiAgKyB0byBkZW1vOgoKICAgICAgIyBCZW5kIGVsYm93
IAogICAgICBpZiAoc3RhdGUgPT0gMCkgOiB7CiAgICAgICAgYXJtIHNldC1l
bGJvdy1hbmdsZSB0byBQSS8yLgogICAgICB9CgogICAgICAjIFJvdGF0ZSBz
aG91bGRlciBvbiBmaXJzdCBheGlzCiAgICAgIGlmIChzdGF0ZSA9PSAxKSA6
IHsKICAgICAgICBhcm0gc2V0LXNob3VsZGVyLWFuZ2xlMSB0byBQSS4KICAg
ICAgfQoKICAgICAgIyBSb3RhdGUgc2hvdWxkZXIgb24gc2Vjb25kIGF4aXMK
ICAgICAgaWYgKHN0YXRlID09IDIpIDogewogICAgICAgIGFybSBzZXQtc2hv
dWxkZXItYW5nbGUyIHRvIFBJLgogICAgICB9CgogICAgICAjIFJvdGF0ZSB3
cmlzdCBvbiBmaXJzdCBheGlzCiAgICAgIGlmIChzdGF0ZSA9PSAzKSA6IHsK
ICAgICAgICBhcm0gc2V0LXdyaXN0LWFuZ2xlMSB0byBQSS4KICAgICAgfQoK
ICAgICAgIyBSb3RhdGUgd3Jpc3Qgb24gc2Vjb25kIGF4aXMKICAgICAgaWYg
KHN0YXRlID09IDQpIDogewogICAgICAgIGFybSBzZXQtd3Jpc3QtYW5nbGUy
IHRvIFBJLzIuCiAgICAgIH0KCiAgICAgICMgUm90YXRlIHdyaXN0IGJhY2sK
ICAgICAgaWYgKHN0YXRlID09IDUpIDogewogICAgICAgIGFybSBzZXQtd3Jp
c3QtYW5nbGUxIHRvIDAuCiAgICAgICAgYXJtIHNldC13cmlzdC1hbmdsZTIg
dG8gMC4KICAgICAgfQoKICAgICAgIyBDbG9zZSBncmlwcGVyCiAgICAgIGlm
IChzdGF0ZSA9PSA2KSA6IHsKICAgICAgICBhcm0gc2V0LWdyaXBwZXItcG9z
aXRpb24gdG8gMC4wLgogICAgICB9CgogICAgICAjIFBpY2sgdXAgYm94CiAg
ICAgIGlmIChzdGF0ZSA9PSA3KSA6IHsKICAgICAgICBhcm0gc2V0LWdyaXBw
ZXItcG9zaXRpb24gdG8gMS4wLgogICAgICAgIGFybSBzZXQtc2hvdWxkZXIt
YW5nbGUxIHRvIC0wLjg1LgogICAgICAgIGFybSBzZXQtc2hvdWxkZXItYW5n
bGUyIHRvIDAuMC4KICAgICAgICBhcm0gc2V0LWVsYm93LWFuZ2xlIHRvIFBJ
LzIuCiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZSA9PSA4KSA6IHsKICAgICAg
ICBhcm0gc2V0LWVsYm93LWFuZ2xlIHRvIDAuNi4KICAgICAgfQoKICAgICAg
aWYgKHN0YXRlID09IDkpIDogewogICAgICAgIGFybSBzZXQtZ3JpcHBlci1w
b3NpdGlvbiB0byAwLjAuCiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZSA9PSAx
MCkgOiB7CiAgICAgICAgYXJtIHNldC1lbGJvdy1hbmdsZSB0byBQSS8yLgog
ICAgICB9CgogICAgICBpZiAoc3RhdGUgPT0gMTEpIDogewogICAgICAgIGFy
bSBzZXQtc2hvdWxkZXItYW5nbGUyIHRvIC1QSS8yLgogICAgICB9CgogICAg
ICBpZiAoc3RhdGUgPT0gMTIpIDogewogICAgICAgIGFybSBzZXQtZ3JpcHBl
ci1wb3NpdGlvbiB0byAxLjAuCiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZSA9
PSAxMykgOiB7CiAgICAgICAgYXJtIHNldC1zaG91bGRlci1hbmdsZTEgdG8g
MC4wLgogICAgICAgIGFybSBzZXQtc2hvdWxkZXItYW5nbGUyIHRvIDAuMC4K
ICAgICAgICBhcm0gc2V0LXdyaXN0LWFuZ2xlMSB0byAwLjAuCiAgICAgICAg
YXJtIHNldC13cmlzdC1hbmdsZTIgdG8gMC4wLgogICAgICAgIGFybSBzZXQt
ZWxib3ctYW5nbGUgdG8gMC4wLgogICAgICAgIGFybSBzZXQtZ3JpcHBlci1w
b3NpdGlvbiB0byAxLjAuCiAgICAgIH0KCiAgICAgIHNlbGYgc2NoZWR1bGUg
bWV0aG9kLWNhbGwgImRlbW8iIGF0LXRpbWUgKChjb250cm9sbGVyIGdldC10
aW1lKSArIDE1KS4KCiAgICAgIHN0YXRlID0gc3RhdGUgKyAxLgp9CgAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAABkZW1vL1Jldm9sdXRlU2Vydm8udHoAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY0NAAwMDAyMDAy
ADAwMDAwMjQAMDAwMDAwMDI0NjEAMTAyNzEyMjcwNTYAMDE0MTczACAwAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAHVzdGFyICAAb2F0ZXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMKIyBBIHJl
dm9sdXRlIGpvaW50IHRoYXQgYWN0cyBsaWtlIGEgc2Vydm8sIGkuZS4sIGZv
ciB3aGljaCB5b3UgY2FuIHNwZWNpZnkKIyBhIHRhcmdldCBhbmdsZS4KIwoj
IDA3LzE0LzA1IEpUTyAtIERvY3VtZW50ZWQKIwoKCgpAdXNlIEpvaW50LgpA
dXNlIFV0aWxzLgoKCgpSZXZvbHV0ZUpvaW50IDogUmV2b2x1dGVTZXJ2byB7
CgogICsgdmFyaWFibGVzOgogICAgICB0YXJnZXQgKGRvdWJsZSkuICAgIyBU
aGUgdGFyZ2V0IGFuZ2xlIGZvciB0aGUgc2Vydm8KICAgICAgZXBzaWxvbiAo
ZG91YmxlKS4gICMgVGhlIGxhcmdlc3QgYWNjZXB0YWJsZSBkaWZmZXJlbmNl
IGJldHdlZW4gdGFyZ2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAjIGFu
ZCBhY3R1YWwgYW5nbGUKICAgICAgdmVsb2NpdHkgKGRvdWJsZSkuICMgUmF0
ZSBvZiBzZXJ2byBtb3Rpb24KCiAgKyB0byBpbml0OgogICAgICB0YXJnZXQg
PSAwLiAgICAgICAgIyBJbml0aWFsaXplIGluc3RhbmNlIHZhcmlhYmxlcwog
ICAgICBlcHNpbG9uID0gMC4wNS4gICAgCiAgICAgIHZlbG9jaXR5ID0gMS4w
LgoKCiAgKyB0byBzZXQtYW5nbGUgdG8gYW5nbGUgKGRvdWJsZSk6CiAgICAg
IHRhcmdldCA9IGFuZ2xlLgoKCiAgKyB0byBzZXQtdmVsb2NpdHkgdG8gdGhl
VmVsb2NpdHkgKGRvdWJsZSk6CiAgICAgIHZlbG9jaXR5ID0gdGhlVmVsb2Np
dHkuCgoKICArIHRvIGF0LWFuZ2xlOgogICAgICBkaWZmZXJlbmNlIChkb3Vi
bGUpLgoKICAgICAgZGlmZmVyZW5jZSA9IGFicyh0YXJnZXQgLSAoc2VsZiBn
ZXQtam9pbnQtYW5nbGUpKS4KICAgICAgZGlmZmVyZW5jZSA9IG1pbihkaWZm
ZXJlbmNlLCAyKlBJIC0gZGlmZmVyZW5jZSkuCgogICAgICBpZiAoZGlmZmVy
ZW5jZSA+IGVwc2lsb24pIDoKCXJldHVybiAwLgogICAgICBlbHNlCiAgICAg
ICAgcmV0dXJuIDEuCgoKICArIHRvIGl0ZXJhdGU6CgogICAgICAjIFRlc3Qg
dG8gc2VlIGlmIHNlcnZvIGlzIGF0IHRhcmdldCBhbmdsZSBhbHJlYWR5CiAg
ICAgIGlmICgoc2VsZiBhdC1hbmdsZSkgPT0gMCkgOiB7ICAgICAgIAoKICAg
ICAgICAjIElmIGl0IGlzbid0LCB3ZSBuZWVkIHRvIG1vdmUgam9pbnQKICAg
ICAgICBpZiAodGFyZ2V0ID4gKHNlbGYgZ2V0LWpvaW50LWFuZ2xlKSkgOgog
ICAgICAgICAgc2VsZiBzZXQtam9pbnQtdmVsb2NpdHkgdG8gdmVsb2NpdHku
CiAgICAgICAgZWxzZQogICAgICAgICAgc2VsZiBzZXQtam9pbnQtdmVsb2Np
dHkgdG8gLXZlbG9jaXR5LgoKICAgICAgfSBlbHNlCgogICAgICAgICMgSWYg
aXQgaXMsIGRvbid0IG1vdmUgdGhlIGpvaW50CglzZWxmIHNldC1qb2ludC12
ZWxvY2l0eSB0byAwLgp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRl
bW8vVW5pdmVyc2FsU2Vydm8udHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAwMTAwNjQ0ADAwMDIwMDIAMDAwMDAyNAAwMDAwMDAwMzU2MQAx
MDI3MTIyNzA2MgAwMTQzMzUAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABvYXRlcwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAIwojIEEgdW5pdmVyc2FsIGpvaW50IHRoYXQgYWN0
cyBsaWtlIGEgc2Vydm8sIHdpdGggbWV0aG9kcyBmb3Igc3BlY2lmeWluZwoj
IHRhcmdldCBhbmdsZXMgYWxvbmcgYm90aCBheGVzLgojCiMgMDcvMTMvMDUg
SlRPIC0gRG9jdW1lbnRlZAojCgoKCkB1c2UgSm9pbnQuCkB1c2UgVXRpbHMu
CgoKClVuaXZlcnNhbEpvaW50IDogVW5pdmVyc2FsU2Vydm8gewoKICArIHZh
cmlhYmxlczoKICAgICAgdGFyZ2V0MSAoZG91YmxlKS4gICMgVGhlIHRhcmdl
dCBhbmdsZSBmb3IgdGhlIHNlcnZvJ3MgZmlyc3QgYXhpcwogICAgICB0YXJn
ZXQyIChkb3VibGUpLiAgIyBUaGUgdGFyZ2V0IGFuZ2xlIGZvciB0aGUgc2Vy
dm8ncyBzZWNvbmQgYXhpcwogICAgICBlcHNpbG9uIChkb3VibGUpLiAgIyBU
aGUgbGFyZ2VzdCBhY2NlcHRhYmxlIGRpZmZlcmVuY2UgYmV0d2VlbiB0YXJn
ZXQKICAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIGFjdHVhbCBhbmds
ZQogICAgICB2ZWxvY2l0eSAoZG91YmxlKS4gIyBSYXRlIG9mIHNlcnZvIG1v
dGlvbgoKICArIHRvIGluaXQ6CiAgICAgIHRhcmdldDEgPSAwLiAgICAgICAj
IEluaXRpYWxpemUgaW5zdGFuY2UgdmFyaWFibGVzCiAgICAgIHRhcmdldDIg
PSAwLiAgICAgICAKICAgICAgZXBzaWxvbiA9IDAuMDUuICAgIAogICAgICB2
ZWxvY2l0eSA9IDEuMC4KICAgICAgcmV0dXJuIHNlbGYuCgoKICArIHRvIHNl
dC1hbmdsZTEgdG8gYW5nbGUgKGRvdWJsZSk6CiAgICAgIHRhcmdldDEgPSBh
bmdsZS4KCgogICsgdG8gc2V0LWFuZ2xlMiB0byBhbmdsZSAoZG91YmxlKToK
ICAgICAgdGFyZ2V0MiA9IGFuZ2xlLgoKCiAgKyB0byBzZXQtdmVsb2NpdHkg
dG8gdGhlVmVsb2NpdHkgKGRvdWJsZSk6CiAgICAgIHZlbG9jaXR5ID0gdGhl
VmVsb2NpdHkuCgoKICArIHRvIGF0LWFuZ2xlMToKICAgICAgZGlmZmVyZW5j
ZSAoZG91YmxlKS4KCiAgICAgIGRpZmZlcmVuY2UgPSBhYnModGFyZ2V0MSAt
IChzZWxmIGdldC1qb2ludC1hbmdsZXMpOjp4KS4KICAgICAgZGlmZmVyZW5j
ZSA9IG1pbihkaWZmZXJlbmNlLCAyKlBJIC0gZGlmZmVyZW5jZSkuCgogICAg
ICBpZiAoZGlmZmVyZW5jZSA+IGVwc2lsb24pIDoKCXJldHVybiAwLgogICAg
ICBlbHNlCiAgICAgICAgcmV0dXJuIDEuCgoKICArIHRvIGF0LWFuZ2xlMjoK
ICAgICAgZGlmZmVyZW5jZSAoZG91YmxlKS4KCiAgICAgIGRpZmZlcmVuY2Ug
PSBhYnModGFyZ2V0MiAtIChzZWxmIGdldC1qb2ludC1hbmdsZXMpOjp5KS4K
ICAgICAgZGlmZmVyZW5jZSA9IG1pbihkaWZmZXJlbmNlLCAyKlBJIC0gZGlm
ZmVyZW5jZSkuCgogICAgICBpZiAoZGlmZmVyZW5jZSA+IGVwc2lsb24pIDoK
CXJldHVybiAwLgogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIDEuCgoKICAr
IHRvIGl0ZXJhdGU6CiAgICAgIHZlbG9jaXR5MSwgdmVsb2NpdHkyIChmbG9h
dCkuCgogICAgICBpZiAoKHNlbGYgYXQtYW5nbGUxKSA9PSAwKSA6IHsgICAg
ICAgCiAgICAgICAgaWYgKHRhcmdldDEgPiAoc2VsZiBnZXQtam9pbnQtYW5n
bGVzKTo6eCkgOgogICAgICAgICAgdmVsb2NpdHkxID0gdmVsb2NpdHkuCiAg
ICAgICAgZWxzZQogICAgICAgICAgdmVsb2NpdHkxID0gLXZlbG9jaXR5Lgog
ICAgICB9IGVsc2UKCXZlbG9jaXR5MSA9IDAuCgogICAgICBpZiAoKHNlbGYg
YXQtYW5nbGUyKSA9PSAwKSA6IHsgICAgICAgCiAgICAgICAgaWYgKHRhcmdl
dDIgPiAoc2VsZiBnZXQtam9pbnQtYW5nbGVzKTo6eSkgOgogICAgICAgICAg
dmVsb2NpdHkyID0gdmVsb2NpdHkuCiAgICAgICAgZWxzZQogICAgICAgICAg
dmVsb2NpdHkyID0gLXZlbG9jaXR5LgogICAgICB9IGVsc2UKCXZlbG9jaXR5
MiA9IDAuCgogICAgICBzZWxmIHNldC1qb2ludC12ZWxvY2l0eSBheGlzLTEg
dmVsb2NpdHkxIGF4aXMtMiB2ZWxvY2l0eTIuCn0KAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZW1vL1V0
aWxzLnR6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAMDEwMDY0NAAwMDAyMDAyADAwMDAwMjQAMDAwMDAwMDAwMjQAMTAyNzEy
MjcxMDIAMDEyNDMwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAb2F0ZXMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAEBkZWZpbmUgUEkgMy4xNDE1OS4KAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAA=
--1434600542-14261042-1122316497=:19617
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
breve mailing list
[email protected]
http://lists.spiderland.org/mailman/listinfo/breve

--1434600542-14261042-1122316497=:19617--