From alinefm at linux.vnet.ibm.com Thu Nov 5 07:16:29 2015 Content-Type: multipart/mixed; boundary="===============1224851307170228753==" MIME-Version: 1.0 From: Aline Manera To: kimchi-devel at ovirt.org Subject: Re: [Kimchi-devel] [PATCH V2] Issue #737: Fix to remove twice calls of resource lookup on GET OPERATION Date: Thu, 05 Nov 2015 10:16:23 -0200 Message-ID: <563B4897.6060409@linux.vnet.ibm.com> In-Reply-To: 563B483C.1090203@linux.vnet.ibm.com --===============1224851307170228753== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On 05/11/2015 10:14, Aline Manera wrote: > > Hi Archana, > > After some tests, I verified this patch set broke the guest = > authorization feature. > > The guest authorization feature allows user to specify which users and = > groups can access a specific resource. > > For example, in my system: > > GET /plugins/kimchi/vms/fedora22 > { > *"users":[** > ** "guest"** > ** ],* > "screenshot":null, > "cpus":2, > "persistent":true, > *"groups":[],* > "graphics":{ > "passwd":null, > "passwdValidTo":null, > "type":"vnc", > "port":null, > "listen":"127.0.0.1" > }, > "icon":null, > "stats":{ > "cpu_utilization":0, > "io_throughput":0, > "io_throughput_peak":100, > "net_throughput":0, > "mem_utilization":0, > "net_throughput_peak":100 > }, > "name":"fedora22", > "uuid":"7a07310c-6fd9-47e4-b8e1-ac5a7bd82c79", > "access":"full", > "state":"shutoff", > "memory":4096.0 > } > > That means, in addition to sysadmin the user 'guest' can also have = > access to the virtual machine "fedora22" > > After applying this patch, any user can has access to any virtual = > machine, ie, the guest authorization configuration is being ignored. > See below: > > GET /plugins/kimchi/vms/ubuntu15.04 > { > * "users":[],* > "screenshot":null, > "cpus":1, > "persistent":true, > * "groups":[],* > "graphics":{ > "passwd":null, > "passwdValidTo":null, > "type":"vnc", > "port":null, > "listen":"127.0.0.1" > }, > "icon":null, > "stats":{ > "cpu_utilization":0, > "io_throughput":0, > "io_throughput_peak":100, > "net_throughput":0, > "mem_utilization":0, > "net_throughput_peak":100 > }, > "name":"ubuntu15.04", > "uuid":"aafc4eb0-9f8e-4f8e-b001-390b180c3675", > "access":"full", > "state":"shutoff", > "memory":4096.0 > } > > If I log into Kimchi as 'guest' user, I can also perform operation on = > 'ubuntu15.04' virtual machine but as you can see, only the sysadmin = > should be able to do that. > Just one more information. Without your patch, while trying to access = the 'ubuntu15.04' virtual machine as 'guest' user I get the following: 403 Forbidden

403 Forbidden

WOKAPI0009E: WOKAPI0009E

Traceback (most recent call last):
   File "/usr/lib/python2.7/dist-packages/cherrypy/_cprequest.py", line =

670, in respond
     response.body =3D self.handler()
   File "/usr/lib/python2.7/dist-packages/cherrypy/lib/encoding.py", =

line 217, in __call__
     self.body =3D self.oldhandler(*args, **kwargs)
   File "/usr/lib/python2.7/dist-packages/cherrypy/_cpdispatch.py", line =

61, in __call__
     return self.callable(*self.args, **self.kwargs)
   File "/home/alinefm/kimchi/src/wok/control/base.py", line 178, in index
     raise cherrypy.HTTPError(403, e.message)
HTTPError: (403, u'WOKAPI0009E: WOKAPI0009E')
Powered by CherryPy 3.5.0
> On 03/11/2015 16:54, archus(a)linux.vnet.ibm.com wrote: >> From: Archana Singh >> >> Incase of GET lookup was called twice. >> Once lookup() before is_authorized() and then in self.get(). >> This added overhead to system when lookup() is called >> for each value in list from get_list() of Collection. >> So to avoid this overhead, lookup() should not be called >> before self.get(). >> = >> 1) Added lookup() call from Resource's update(), delete(). >> 2) Removed lookup() call from Resource's index(). >> 2) As is_authorized() calls self.data which calls self.info. >> Added check to make sure that self.data only get called >> if self.info is not None. And intialized self.info as None >> in __init__. As its value is getting assigned in lookup(). >> 3) In _generate_action_handler_base(), lookup() was getting >> called before is_authorized(), move its call after is_authorized(). >> >> Archana Singh (1): >> Issue #737: Fix to remove twice calls of resource lookup on GET >> OPERATION >> >> src/wok/control/base.py | 16 ++++++++++------ >> 1 file changed, 10 insertions(+), 6 deletions(-) >> > > > > _______________________________________________ > Kimchi-devel mailing list > Kimchi-devel(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/kimchi-devel --===============1224851307170228753== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+CiAgPGhlYWQ+CiAgICA8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2lu ZG93cy0xMjUyIgogICAgICBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiPgogIDwvaGVhZD4KICA8 Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4KICAgIDxicj4KICAgIDxicj4K ICAgIDxkaXYgY2xhc3M9Im1vei1jaXRlLXByZWZpeCI+T24gMDUvMTEvMjAxNSAxMDoxNCwgQWxp bmUgTWFuZXJhCiAgICAgIHdyb3RlOjxicj4KICAgIDwvZGl2PgogICAgPGJsb2NrcXVvdGUgY2l0 ZT0ibWlkOjU2M0I0ODNDLjEwOTAyMDNAbGludXgudm5ldC5pYm0uY29tIgogICAgICB0eXBlPSJj aXRlIj4KICAgICAgPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1 MiIKICAgICAgICBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiPgogICAgICA8YnI+CiAgICAgIEhp IEFyY2hhbmEsPGJyPgogICAgICA8YnI+CiAgICAgIEFmdGVyIHNvbWUgdGVzdHMsIEkgdmVyaWZp ZWQgdGhpcyBwYXRjaCBzZXQgYnJva2UgdGhlIGd1ZXN0CiAgICAgIGF1dGhvcml6YXRpb24gZmVh dHVyZS48YnI+CiAgICAgIDxicj4KICAgICAgVGhlIGd1ZXN0IGF1dGhvcml6YXRpb24gZmVhdHVy ZSBhbGxvd3MgdXNlciB0byBzcGVjaWZ5IHdoaWNoIHVzZXJzCiAgICAgIGFuZCBncm91cHMgY2Fu IGFjY2VzcyBhIHNwZWNpZmljIHJlc291cmNlLjxicj4KICAgICAgPGJyPgogICAgICBGb3IgZXhh bXBsZSwgaW4gbXkgc3lzdGVtOjxicj4KICAgICAgPGJyPgogICAgICBHRVQgL3BsdWdpbnMva2lt Y2hpL3Ztcy9mZWRvcmEyMjxicj4KICAgICAgezxicj4KICAgICAgoCA8Yj4idXNlcnMiOls8L2I+ PGI+PGJyPgogICAgICA8L2I+PGI+oKCgICJndWVzdCI8L2I+PGI+PGJyPgogICAgICA8L2I+PGI+ oCBdLDwvYj48YnI+CiAgICAgIKAgInNjcmVlbnNob3QiOm51bGwsPGJyPgogICAgICCgICJjcHVz IjoyLDxicj4KICAgICAgoCAicGVyc2lzdGVudCI6dHJ1ZSw8YnI+CiAgICAgIKAgPGI+Imdyb3Vw cyI6W10sPC9iPjxicj4KICAgICAgoCAiZ3JhcGhpY3MiOns8YnI+CiAgICAgIKCgoCAicGFzc3dk IjpudWxsLDxicj4KICAgICAgoKCgICJwYXNzd2RWYWxpZFRvIjpudWxsLDxicj4KICAgICAgoKCg ICJ0eXBlIjoidm5jIiw8YnI+CiAgICAgIKCgoCAicG9ydCI6bnVsbCw8YnI+CiAgICAgIKCgoCAi bGlzdGVuIjoiMTI3LjAuMC4xIjxicj4KICAgICAgoCB9LDxicj4KICAgICAgoCAiaWNvbiI6bnVs bCw8YnI+CiAgICAgIKAgInN0YXRzIjp7PGJyPgogICAgICCgoKAgImNwdV91dGlsaXphdGlvbiI6 MCw8YnI+CiAgICAgIKCgoCAiaW9fdGhyb3VnaHB1dCI6MCw8YnI+CiAgICAgIKCgoCAiaW9fdGhy b3VnaHB1dF9wZWFrIjoxMDAsPGJyPgogICAgICCgoKAgIm5ldF90aHJvdWdocHV0IjowLDxicj4K ICAgICAgoKCgICJtZW1fdXRpbGl6YXRpb24iOjAsPGJyPgogICAgICCgoKAgIm5ldF90aHJvdWdo cHV0X3BlYWsiOjEwMDxicj4KICAgICAgoCB9LDxicj4KICAgICAgoCAibmFtZSI6ImZlZG9yYTIy Iiw8YnI+CiAgICAgIKAgInV1aWQiOiI3YTA3MzEwYy02ZmQ5LTQ3ZTQtYjhlMS1hYzVhN2JkODJj NzkiLDxicj4KICAgICAgoCAiYWNjZXNzIjoiZnVsbCIsPGJyPgogICAgICCgICJzdGF0ZSI6InNo dXRvZmYiLDxicj4KICAgICAgoCAibWVtb3J5Ijo0MDk2LjA8YnI+CiAgICAgIH08YnI+CiAgICAg IDxicj4KICAgICAgVGhhdCBtZWFucywgaW4gYWRkaXRpb24gdG8gc3lzYWRtaW4gdGhlIHVzZXIg J2d1ZXN0JyBjYW4gYWxzbyBoYXZlCiAgICAgIGFjY2VzcyB0byB0aGUgdmlydHVhbCBtYWNoaW5l ICJmZWRvcmEyMiI8YnI+CiAgICAgIDxicj4KICAgICAgQWZ0ZXIgYXBwbHlpbmcgdGhpcyBwYXRj aCwgYW55IHVzZXIgY2FuIGhhcyBhY2Nlc3MgdG8gYW55IHZpcnR1YWwKICAgICAgbWFjaGluZSwg aWUsIHRoZSBndWVzdCBhdXRob3JpemF0aW9uIGNvbmZpZ3VyYXRpb24gaXMgYmVpbmcKICAgICAg aWdub3JlZC48YnI+CiAgICAgIFNlZSBiZWxvdzo8YnI+CiAgICAgIDxicj4KICAgICAgR0VUIC9w bHVnaW5zL2tpbWNoaS92bXMvdWJ1bnR1MTUuMDQ8YnI+CiAgICAgIHs8YnI+CiAgICAgIDxiPqAg InVzZXJzIjpbXSw8L2I+PGJyPgogICAgICCgICJzY3JlZW5zaG90IjpudWxsLDxicj4KICAgICAg oCAiY3B1cyI6MSw8YnI+CiAgICAgIKAgInBlcnNpc3RlbnQiOnRydWUsPGJyPgogICAgICA8Yj6g ICJncm91cHMiOltdLDwvYj48YnI+CiAgICAgIKAgImdyYXBoaWNzIjp7PGJyPgogICAgICCgoKAg InBhc3N3ZCI6bnVsbCw8YnI+CiAgICAgIKCgoCAicGFzc3dkVmFsaWRUbyI6bnVsbCw8YnI+CiAg ICAgIKCgoCAidHlwZSI6InZuYyIsPGJyPgogICAgICCgoKAgInBvcnQiOm51bGwsPGJyPgogICAg ICCgoKAgImxpc3RlbiI6IjEyNy4wLjAuMSI8YnI+CiAgICAgIKAgfSw8YnI+CiAgICAgIKAgImlj b24iOm51bGwsPGJyPgogICAgICCgICJzdGF0cyI6ezxicj4KICAgICAgoKCgICJjcHVfdXRpbGl6 YXRpb24iOjAsPGJyPgogICAgICCgoKAgImlvX3Rocm91Z2hwdXQiOjAsPGJyPgogICAgICCgoKAg ImlvX3Rocm91Z2hwdXRfcGVhayI6MTAwLDxicj4KICAgICAgoKCgICJuZXRfdGhyb3VnaHB1dCI6 MCw8YnI+CiAgICAgIKCgoCAibWVtX3V0aWxpemF0aW9uIjowLDxicj4KICAgICAgoKCgICJuZXRf dGhyb3VnaHB1dF9wZWFrIjoxMDA8YnI+CiAgICAgIKAgfSw8YnI+CiAgICAgIKAgIm5hbWUiOiJ1 YnVudHUxNS4wNCIsPGJyPgogICAgICCgICJ1dWlkIjoiYWFmYzRlYjAtOWY4ZS00ZjhlLWIwMDEt MzkwYjE4MGMzNjc1Iiw8YnI+CiAgICAgIKAgImFjY2VzcyI6ImZ1bGwiLDxicj4KICAgICAgoCAi c3RhdGUiOiJzaHV0b2ZmIiw8YnI+CiAgICAgIKAgIm1lbW9yeSI6NDA5Ni4wPGJyPgogICAgICB9 PGJyPgogICAgICA8YnI+CiAgICAgIElmIEkgbG9nIGludG8gS2ltY2hpIGFzICdndWVzdCcgdXNl ciwgSSBjYW4gYWxzbyBwZXJmb3JtIG9wZXJhdGlvbgogICAgICBvbiAndWJ1bnR1MTUuMDQnIHZp cnR1YWwgbWFjaGluZSBidXQgYXMgeW91IGNhbiBzZWUsIG9ubHkgdGhlCiAgICAgIHN5c2FkbWlu IHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoYXQuPGJyPgogICAgICA8YnI+CiAgICA8L2Jsb2NrcXVv dGU+CiAgICA8YnI+CiAgICBKdXN0IG9uZSBtb3JlIGluZm9ybWF0aW9uLiBXaXRob3V0IHlvdXIg cGF0Y2gsIHdoaWxlIHRyeWluZyB0bwogICAgYWNjZXNzIHRoZSAndWJ1bnR1MTUuMDQnIHZpcnR1 YWwgbWFjaGluZSBhcyAnZ3Vlc3QnIHVzZXIgSSBnZXQgdGhlCiAgICBmb2xsb3dpbmc6PGJyPgog ICAgPGJyPgogICAgJmx0OyFET0NUWVBFIGh0bWwgUFVCTElDPGJyPgogICAgIi0vL1czQy8vRFRE IFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIjxicj4KICAgIDxhIGNsYXNzPSJtb3otdHh0LWxp bmstcmZjMjM5NkUiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwx LXRyYW5zaXRpb25hbC5kdGQiPiJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1s MS10cmFuc2l0aW9uYWwuZHRkIjwvYT4mZ3Q7PGJyPgogICAgJmx0O2h0bWwmZ3Q7PGJyPgogICAg Jmx0O2hlYWQmZ3Q7PGJyPgogICAgoKCgICZsdDttZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlw ZSIgY29udGVudD0idGV4dC9odG1sOwogICAgY2hhcnNldD11dGYtOCImZ3Q7Jmx0Oy9tZXRhJmd0 Ozxicj4KICAgIKCgoCAmbHQ7dGl0bGUmZ3Q7NDAzIEZvcmJpZGRlbiZsdDsvdGl0bGUmZ3Q7PGJy PgogICAgoKCgICZsdDtzdHlsZSB0eXBlPSJ0ZXh0L2NzcyImZ3Q7PGJyPgogICAgoKCgICNwb3dl cmVkX2J5IHs8YnI+CiAgICCgoKCgoKCgIG1hcmdpbi10b3A6IDIwcHg7PGJyPgogICAgoKCgoKCg oCBib3JkZXItdG9wOiAycHggc29saWQgYmxhY2s7PGJyPgogICAgoKCgoKCgoCBmb250LXN0eWxl OiBpdGFsaWM7PGJyPgogICAgoKCgIH08YnI+CiAgICA8YnI+CiAgICCgoKAgI3RyYWNlYmFjayB7 PGJyPgogICAgoKCgoKCgoCBjb2xvcjogcmVkOzxicj4KICAgIKCgoCB9PGJyPgogICAgoKCgICZs dDsvc3R5bGUmZ3Q7PGJyPgogICAgJmx0Oy9oZWFkJmd0Ozxicj4KICAgIKCgoCAmbHQ7Ym9keSZn dDs8YnI+CiAgICCgoKCgoKCgICZsdDtoMiZndDs0MDMgRm9yYmlkZGVuJmx0Oy9oMiZndDs8YnI+ CiAgICCgoKCgoKCgICZsdDtwJmd0O1dPS0FQSTAwMDlFOiBXT0tBUEkwMDA5RSZsdDsvcCZndDs8 YnI+CiAgICCgoKCgoKCgICZsdDtwcmUgaWQ9InRyYWNlYmFjayImZ3Q7VHJhY2ViYWNrIChtb3N0 IHJlY2VudCBjYWxsIGxhc3QpOjxicj4KICAgIKAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi43L2Rp c3QtcGFja2FnZXMvY2hlcnJ5cHkvX2NwcmVxdWVzdC5weSIsCiAgICBsaW5lIDY3MCwgaW4gcmVz cG9uZDxicj4KICAgIKCgoCByZXNwb25zZS5ib2R5ID0gc2VsZi5oYW5kbGVyKCk8YnI+CiAgICCg IEZpbGUgIi91c3IvbGliL3B5dGhvbjIuNy9kaXN0LXBhY2thZ2VzL2NoZXJyeXB5L2xpYi9lbmNv ZGluZy5weSIsCiAgICBsaW5lIDIxNywgaW4gX19jYWxsX188YnI+CiAgICCgoKAgc2VsZi5ib2R5 ID0gc2VsZi5vbGRoYW5kbGVyKCphcmdzLCAqKmt3YXJncyk8YnI+CiAgICCgIEZpbGUgIi91c3Iv bGliL3B5dGhvbjIuNy9kaXN0LXBhY2thZ2VzL2NoZXJyeXB5L19jcGRpc3BhdGNoLnB5IiwKICAg IGxpbmUgNjEsIGluIF9fY2FsbF9fPGJyPgogICAgoKCgIHJldHVybiBzZWxmLmNhbGxhYmxlKCpz ZWxmLmFyZ3MsICoqc2VsZi5rd2FyZ3MpPGJyPgogICAgoCBGaWxlICIvaG9tZS9hbGluZWZtL2tp bWNoaS9zcmMvd29rL2NvbnRyb2wvYmFzZS5weSIsIGxpbmUgMTc4LCBpbgogICAgaW5kZXg8YnI+ CiAgICCgoKAgcmFpc2UgY2hlcnJ5cHkuSFRUUEVycm9yKDQwMywgZS5tZXNzYWdlKTxicj4KICAg IEhUVFBFcnJvcjogKDQwMywgdSdXT0tBUEkwMDA5RTogV09LQVBJMDAwOUUnKTxicj4KICAgICZs dDsvcHJlJmd0Ozxicj4KICAgIKCgoCAmbHQ7ZGl2IGlkPSJwb3dlcmVkX2J5IiZndDs8YnI+CiAg ICCgoKCgoCAmbHQ7c3BhbiZndDs8YnI+CiAgICCgoKCgoKCgIFBvd2VyZWQgYnkgJmx0O2EgaHJl Zj08YSBjbGFzcz0ibW96LXR4dC1saW5rLXJmYzIzOTZFIiBocmVmPSJodHRwOi8vd3d3LmNoZXJy eXB5Lm9yZyI+Imh0dHA6Ly93d3cuY2hlcnJ5cHkub3JnIjwvYT4mZ3Q7Q2hlcnJ5UHkKICAgIDMu NS4wJmx0Oy9hJmd0Ozxicj4KICAgIKCgoKCgICZsdDsvc3BhbiZndDs8YnI+CiAgICCgoKAgJmx0 Oy9kaXYmZ3Q7PGJyPgogICAgoKCgICZsdDsvYm9keSZndDs8YnI+CiAgICAmbHQ7L2h0bWwmZ3Q7 PGJyPgogICAgPGJyPgogICAgPGJsb2NrcXVvdGUgY2l0ZT0ibWlkOjU2M0I0ODNDLjEwOTAyMDNA bGludXgudm5ldC5pYm0uY29tIgogICAgICB0eXBlPSJjaXRlIj4KICAgICAgPGRpdiBjbGFzcz0i bW96LWNpdGUtcHJlZml4Ij5PbiAwMy8xMS8yMDE1IDE2OjU0LCA8YQogICAgICAgICAgbW96LWRv LW5vdC1zZW5kPSJ0cnVlIiBjbGFzcz0ibW96LXR4dC1saW5rLWFiYnJldmlhdGVkIgogICAgICAg ICAgaHJlZj0ibWFpbHRvOmFyY2h1c0BsaW51eC52bmV0LmlibS5jb20iPmFyY2h1c0BsaW51eC52 bmV0LmlibS5jb208L2E+CiAgICAgICAgd3JvdGU6PGJyPgogICAgICA8L2Rpdj4KICAgICAgPGJs b2NrcXVvdGUKICAgICAgICBjaXRlPSJtaWQ6MTQ0NjU3Njg3My0xNTUxMS0xLWdpdC1zZW5kLWVt YWlsLWFyY2h1c0BsaW51eC52bmV0LmlibS5jb20iCiAgICAgICAgdHlwZT0iY2l0ZSI+CiAgICAg ICAgPHByZSB3cmFwPSIiPkZyb206IEFyY2hhbmEgU2luZ2ggPGEgbW96LWRvLW5vdC1zZW5kPSJ0 cnVlIiBjbGFzcz0ibW96LXR4dC1saW5rLXJmYzIzOTZFIiBocmVmPSJtYWlsdG86YXJjaHVzQGxp bnV4LnZuZXQuaWJtLmNvbSI+Jmx0O2FyY2h1c0BsaW51eC52bmV0LmlibS5jb20mZ3Q7PC9hPgoK SW5jYXNlIG9mIEdFVCBsb29rdXAgd2FzIGNhbGxlZCB0d2ljZS4KICAgIE9uY2UgbG9va3VwKCkg YmVmb3JlIGlzX2F1dGhvcml6ZWQoKSBhbmQgdGhlbiBpbiBzZWxmLmdldCgpLgogICAgVGhpcyBh ZGRlZCBvdmVyaGVhZCB0byBzeXN0ZW0gd2hlbiBsb29rdXAoKSBpcyBjYWxsZWQKICAgIGZvciBl YWNoIHZhbHVlIGluIGxpc3QgZnJvbSBnZXRfbGlzdCgpIG9mIENvbGxlY3Rpb24uCiAgICBTbyB0 byBhdm9pZCB0aGlzIG92ZXJoZWFkLCBsb29rdXAoKSBzaG91bGQgbm90IGJlIGNhbGxlZAogICAg YmVmb3JlIHNlbGYuZ2V0KCkuCiAgICAKICAgIDEpIEFkZGVkIGxvb2t1cCgpIGNhbGwgZnJvbSBS ZXNvdXJjZSdzIHVwZGF0ZSgpLCBkZWxldGUoKS4KICAgIDIpIFJlbW92ZWQgbG9va3VwKCkgY2Fs bCBmcm9tIFJlc291cmNlJ3MgaW5kZXgoKS4KICAgIDIpIEFzIGlzX2F1dGhvcml6ZWQoKSBjYWxs cyBzZWxmLmRhdGEgd2hpY2ggY2FsbHMgc2VsZi5pbmZvLgogICAgQWRkZWQgY2hlY2sgdG8gbWFr ZSBzdXJlIHRoYXQgc2VsZi5kYXRhIG9ubHkgZ2V0IGNhbGxlZAogICAgaWYgc2VsZi5pbmZvIGlz IG5vdCBOb25lLiBBbmQgaW50aWFsaXplZCBzZWxmLmluZm8gYXMgTm9uZQogICAgaW4gX19pbml0 X18uIEFzIGl0cyB2YWx1ZSBpcyBnZXR0aW5nIGFzc2lnbmVkIGluIGxvb2t1cCgpLgogICAgMykg SW4gX2dlbmVyYXRlX2FjdGlvbl9oYW5kbGVyX2Jhc2UoKSwgbG9va3VwKCkgd2FzIGdldHRpbmcK ICAgIGNhbGxlZCBiZWZvcmUgaXNfYXV0aG9yaXplZCgpLCBtb3ZlIGl0cyBjYWxsIGFmdGVyIGlz X2F1dGhvcml6ZWQoKS4KCkFyY2hhbmEgU2luZ2ggKDEpOgogIElzc3VlICM3Mzc6IEZpeCB0byBy ZW1vdmUgdHdpY2UgY2FsbHMgb2YgcmVzb3VyY2UgbG9va3VwIG9uIEdFVAogICAgT1BFUkFUSU9O Cgogc3JjL3dvay9jb250cm9sL2Jhc2UucHkgfCAxNiArKysrKysrKysrLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCjwvcHJlPgogICAgICA8 L2Jsb2NrcXVvdGU+CiAgICAgIDxicj4KICAgICAgPGJyPgogICAgICA8ZmllbGRzZXQgY2xhc3M9 Im1pbWVBdHRhY2htZW50SGVhZGVyIj48L2ZpZWxkc2V0PgogICAgICA8YnI+CiAgICAgIDxwcmUg d3JhcD0iIj5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpL aW1jaGktZGV2ZWwgbWFpbGluZyBsaXN0CjxhIGNsYXNzPSJtb3otdHh0LWxpbmstYWJicmV2aWF0 ZWQiIGhyZWY9Im1haWx0bzpLaW1jaGktZGV2ZWxAb3ZpcnQub3JnIj5LaW1jaGktZGV2ZWxAb3Zp cnQub3JnPC9hPgo8YSBjbGFzcz0ibW96LXR4dC1saW5rLWZyZWV0ZXh0IiBocmVmPSJodHRwOi8v bGlzdHMub3ZpcnQub3JnL21haWxtYW4vbGlzdGluZm8va2ltY2hpLWRldmVsIj5odHRwOi8vbGlz dHMub3ZpcnQub3JnL21haWxtYW4vbGlzdGluZm8va2ltY2hpLWRldmVsPC9hPgo8L3ByZT4KICAg IDwvYmxvY2txdW90ZT4KICAgIDxicj4KICA8L2JvZHk+CjwvaHRtbD4K --===============1224851307170228753==--