local Objects = { 435 , 1948 , 7771 }
local Doors = { 7727 , 8265 , 1629 , 1632 , 8266 , 7728 , 1211 , 1220 , 1224 , 1228 , 1233 , 1238 , 1242 , 1246 , 1251 , 1256 , 1260 , 1540 , 3546 , 3548 , 3550 , 3552 , 4915 , 5083 , 5109 , 5111 , 5113 , 5115 , 5127 , 5129 , 5131 ,
5133 , 5142 , 5145 , 5283 , 5285 , 5289 , 5293 , 5516 , 5737 , 5749 , 6194 , 6199 , 6203 , 6207 , 6251 , 6256 , 6260 , 6264 , 6798 , 6802 , 6902 , 6904 , 6906 , 6908 , 7044 ,
7046 , 7048 , 7050 , 7055 , 8543 , 8548 , 8552 , 8556 , 9167 , 9172 , 9269 , 9274 , 9274 , 9269 , 9278 , 9282 , 10270 , 10275 , 10279 , 10283 , 10479 , 10481 , 10485 , 10483 ,
10786 , 12101 , 12199 , 19851 , 19853 , 19991 , 19993 , 20284 , 20286 , 17238 , 13021 , 10790 , 12103 , 12205 , 19855 , 19995 , 20288 , 10792 , 12105 , 12203 , 19857 , 19997 ,
20290 , 22825 , 22827 , 22829 , 22831 , 1214 , 1222 , 1226 , 1230 , 1236 , 1240 , 1244 , 1248 , 1254 , 1258 , 1262 , 1542 , 3537 , 3539 , 3541 , 3543 , 4918 , 5085 , 5100 , 5102 , 5104 , 5106 , 5118 ,
5120 , 5122 , 5124 , 5136 , 5139 , 5280 , 5287 , 5291 , 5295 , 5518 , 5734 , 5746 , 6197 , 6201 , 6205 , 6209 , 6254 , 6258 , 6262 , 6266 , 6796 , 6800 , 6893 ,
6895 , 6897 , 6899 , 7035 , 7037 , 7039 , 7041 , 7057 , 8546 , 8550 , 8554 , 8558 , 9170 , 9174 , 9272 , 9276 , 9280 , 9284 , 10273 , 10277 , 10281 , 10285 ,
10470 , 10472 , 10476 , 10474 , 10777 , 12094 , 12190 , 19842 , 19844 , 19982 , 19984 , 20275 , 20277 , 17236 , 18209 , 13023 , 10781 , 12096 , 12196 ,
19846 , 19986 , 20279 , 10783 , 12098 , 12194 , 19848 , 19988 , 20281 , 22816 , 22818 , 22820 , 22822 , 1224 , 1226 , 1228 , 1230 , 1242 , 1244 , 1246 , 1248 , 1256 , 1258 , 1260 , 1262 , 3541 , 3543 , 3550 , 3552 , 5104 , 5106 , 5113 , 5115 , 5122 , 5124 , 5131 , 5133 ,
5289 , 5291 , 5293 , 5295 , 6203 , 6205 , 6207 , 6209 , 6260 , 6262 , 6264 , 6266 , 6897 , 6899 , 6906 , 6908 , 7039 , 7041 , 7048 , 7050 , 8552 , 8554 , 8556 , 8558 ,
9176 , 9178 , 9180 , 9182 , 9278 , 9280 , 9282 , 9284 , 10279 , 10281 , 10283 , 10285 , 10474 , 10476 , 10483 , 10485 , 10781 , 12096 , 12196 , 19846 , 19986 , 20279 ,
10783 , 12098 , 12194 , 19848 , 19988 , 20281 , 10790 , 12103 , 12205 , 19855 , 19995 , 20288 , 10792 , 12105 , 12203 , 19857 , 19997 , 20290 , 1223 , 1225 , 1241 , 1243 , 1255 , 1257 , 3542 , 3551 , 5105 , 5114 , 5123 , 5132 , 5288 , 5290 , 5745 , 5748 , 6202 , 6204 , 6259 , 6261 , 6898 , 6907 , 7040 , 7049 ,
8551 , 8553 , 9175 ,9177 , 9277 , 9279 , 10278 , 10280 , 10475 , 10484 , 10782 , 12097 , 19847 , 19987 , 20280 , 10791 , 12104 , 12204 , 12195 , 19856 , 19996 , 20289 ,
22821 , 22830 , 1227 , 1229 , 1245 , 1247 , 1259 , 1261 , 3540 , 3549 , 5103 , 5112 , 5121 , 5130 , 5292 , 5294 , 6206 , 6208 , 6263 , 6265 , 6896 , 6905 , 7038 , 7047 , 8555 , 8557 ,9179 , 9181 ,
9281 , 9283 , 10282 , 10284 , 10473 , 10482 , 10780 , 10789 , 10780 , 12095 , 12195 , 19845 , 19985 , 20278 , 10789 , 12102 , 12193 , 12202 , 19854 , 19994 , 20287 }
followName = "Name"
if not storage[ followName] then storage[ followName] = { player = 'name' } end
local toFollowPos = { }
UI.Separator ( )
followTE = UI.TextEdit ( storage[ followName] .player or "name" , function( widget, newText)
storage[ followName] .player = newText
end)
local followChange = macro( 200 , "Follow Change" , function( ) end)
local followMacro = macro( 20 , "Follow" , function( )
local position = pos( )
local target = getCreatureByName( storage[ followName] .player )
if target then
local tpos = target: getPosition( )
toFollowPos[ tpos.z ] = tpos
end
if not player: isWalking( ) and target and ( getDistanceBetween( pos( ) , target: getPosition( ) ) > 2 ) then
for i,interact in ipairs( Doors) do
if ( player: getDirection( ) == 1 or player: getDirection( ) == 3 ) then
for x=- 1 ,2 ,2 do
position[ "x" ] = posx( ) + x
position[ "y" ] = posy( )
for y=- 1 ,3 ,2 do
if g_map.getTile ( position) then
for u,item in ipairs( g_map.getTile ( position) : getItems( ) ) do
if item: getId( ) == interact then
g_game.use ( item)
return
end
end
position[ "y" ] = posy( ) + y
end
end
end
end
position = pos( )
if ( player: getDirection( ) == 0 or player: getDirection( ) == 2 ) then
for y=- 1 ,2 ,2 do
position[ "x" ] = posx( )
position[ "y" ] = posy( ) + y
for x=- 1 ,3 ,2 do
for u,item in ipairs( g_map.getTile ( position) : getItems( ) ) do
if item: getId( ) == interact then
g_game.use ( item)
return
end
end
position[ "x" ] = posx( ) + x
end
end
end
position = pos( )
end
elseif not player: isWalking( ) and not target and toFollowPos[ posz( ) ] then
for i,interact in ipairs( Objects) do
for x=- 1 ,2 ,1 do
for y=- 1 ,2 ,1 do
position[ "x" ] = toFollowPos[ posz( ) ] .x + x
position[ "y" ] = toFollowPos[ posz( ) ] .y + y
if getDistanceBetween( pos( ) , position) <= 8 and g_map.getTile ( position) then
for u,item in ipairs( g_map.getTile ( position) : getItems( ) ) do
if item: getId( ) == interact then
g_game.use ( item)
delay( 500 )
end
end
end
end
end
end
end
local p = toFollowPos[ posz( ) ]
if not p then return end
if autoWalk( p, 20 , { ignoreNonPathable = true , precision = 1 } ) then delay( 100 ) end
end)
UI.Separator ( )
onPlayerPositionChange( function( newPos, oldPos)
if followChange: isOff( ) then return end
if ( g_game.isFollowing ( ) ) then
tfollow = g_game.getFollowingCreature ( )
if tfollow then
if tfollow: getName( ) ~= storage[ followName] .player then
followTE: setText( tfollow: getName( ) )
storage[ followName] .player = tfollow: getName( )
end
end
end
end)
onCreaturePositionChange( function( creature, newPos, oldPos)
if creature: getName( ) == storage[ followName] .player and newPos then
toFollowPos[ newPos.z ] = newPos
end
end)
bG9jYWwgT2JqZWN0cyA9IHs0MzUsIDE5NDgsIDc3NzF9CmxvY2FsIERvb3JzID0gezc3MjcsIDgyNjUsIDE2MjksIDE2MzIsIDgyNjYsIDc3MjgsIDEyMTEsIDEyMjAsIDEyMjQsIDEyMjgsIDEyMzMsIDEyMzgsIDEyNDIsIDEyNDYsIDEyNTEsIDEyNTYsIDEyNjAsIDE1NDAsIDM1NDYsIDM1NDgsIDM1NTAsIDM1NTIsIDQ5MTUsIDUwODMsIDUxMDksIDUxMTEsIDUxMTMsIDUxMTUsIDUxMjcsIDUxMjksIDUxMzEsCiAgICA1MTMzLCA1MTQyLCA1MTQ1LCA1MjgzLCA1Mjg1LCA1Mjg5LCA1MjkzLCA1NTE2LCA1NzM3LCA1NzQ5LCA2MTk0LCA2MTk5LCA2MjAzLCA2MjA3LCA2MjUxLCA2MjU2LCA2MjYwLCA2MjY0LCA2Nzk4LCA2ODAyLCA2OTAyLCA2OTA0LCA2OTA2LCA2OTA4LCA3MDQ0LAogICAgNzA0NiwgNzA0OCwgNzA1MCwgNzA1NSwgODU0MywgODU0OCwgODU1MiwgODU1NiwgOTE2NywgOTE3MiwgOTI2OSwgOTI3NCwgOTI3NCwgOTI2OSwgOTI3OCwgOTI4MiwgMTAyNzAsIDEwMjc1LCAxMDI3OSwgMTAyODMsIDEwNDc5LCAxMDQ4MSwgMTA0ODUsIDEwNDgzLAogICAgMTA3ODYsIDEyMTAxLCAxMjE5OSwgMTk4NTEsIDE5ODUzLCAxOTk5MSwgMTk5OTMsIDIwMjg0LCAyMDI4NiwgMTcyMzgsIDEzMDIxLCAxMDc5MCwgMTIxMDMsIDEyMjA1LCAxOTg1NSwgMTk5OTUsIDIwMjg4LCAxMDc5MiwgMTIxMDUsIDEyMjAzLCAxOTg1NywgMTk5OTcsCiAgICAyMDI5MCwgMjI4MjUsIDIyODI3LCAyMjgyOSwgMjI4MzEsIDEyMTQsIDEyMjIsIDEyMjYsIDEyMzAsIDEyMzYsIDEyNDAsIDEyNDQsIDEyNDgsIDEyNTQsIDEyNTgsIDEyNjIsIDE1NDIsIDM1MzcsIDM1MzksIDM1NDEsIDM1NDMsIDQ5MTgsIDUwODUsIDUxMDAsIDUxMDIsIDUxMDQsIDUxMDYsIDUxMTgsCiAgICA1MTIwLCA1MTIyLCA1MTI0LCA1MTM2LCA1MTM5LCA1MjgwLCA1Mjg3LCA1MjkxLCA1Mjk1LCA1NTE4LCA1NzM0LCA1NzQ2LCA2MTk3LCA2MjAxLCA2MjA1LCA2MjA5LCA2MjU0LCA2MjU4LCA2MjYyLCA2MjY2LCA2Nzk2LCA2ODAwLCA2ODkzLAogICAgNjg5NSwgNjg5NywgNjg5OSwgNzAzNSwgNzAzNywgNzAzOSwgNzA0MSwgNzA1NywgODU0NiwgODU1MCwgODU1NCwgODU1OCwgOTE3MCwgOTE3NCwgOTI3MiwgOTI3NiwgOTI4MCwgOTI4NCwgMTAyNzMsIDEwMjc3LCAxMDI4MSwgMTAyODUsCiAgICAxMDQ3MCwgMTA0NzIsIDEwNDc2LCAxMDQ3NCwgMTA3NzcsIDEyMDk0LCAxMjE5MCwgMTk4NDIsIDE5ODQ0LCAxOTk4MiwgMTk5ODQsIDIwMjc1LCAyMDI3NywgMTcyMzYsIDE4MjA5LCAxMzAyMywgMTA3ODEsIDEyMDk2LCAxMjE5NiwKICAgIDE5ODQ2LCAxOTk4NiwgMjAyNzksIDEwNzgzLCAxMjA5OCwgMTIxOTQsIDE5ODQ4LCAxOTk4OCwgMjAyODEsIDIyODE2LCAyMjgxOCwgMjI4MjAsIDIyODIyLCAxMjI0LCAxMjI2LCAxMjI4LCAxMjMwLCAxMjQyLCAxMjQ0LCAxMjQ2LCAxMjQ4LCAxMjU2LCAxMjU4LCAxMjYwLCAxMjYyLCAzNTQxLCAzNTQzLCAzNTUwLCAzNTUyLCA1MTA0LCA1MTA2LCA1MTEzLCA1MTE1LCA1MTIyLCA1MTI0LCA1MTMxLCA1MTMzLAogICAgNTI4OSwgNTI5MSwgNTI5MywgNTI5NSwgNjIwMywgNjIwNSwgNjIwNywgNjIwOSwgNjI2MCwgNjI2MiwgNjI2NCwgNjI2NiwgNjg5NywgNjg5OSwgNjkwNiwgNjkwOCwgNzAzOSwgNzA0MSwgNzA0OCwgNzA1MCwgODU1MiwgODU1NCwgODU1NiwgODU1OCwKICAgIDkxNzYsIDkxNzgsIDkxODAsIDkxODIsIDkyNzgsIDkyODAsIDkyODIsIDkyODQsIDEwMjc5LCAxMDI4MSwgMTAyODMsIDEwMjg1LCAxMDQ3NCwgMTA0NzYsIDEwNDgzLCAxMDQ4NSwgMTA3ODEsIDEyMDk2LCAxMjE5NiwgMTk4NDYsIDE5OTg2LCAyMDI3OSwKICAgIDEwNzgzLCAxMjA5OCwgMTIxOTQsIDE5ODQ4LCAxOTk4OCwgMjAyODEsIDEwNzkwLCAxMjEwMywgMTIyMDUsIDE5ODU1LCAxOTk5NSwgMjAyODgsIDEwNzkyLCAxMjEwNSwgMTIyMDMsIDE5ODU3LCAxOTk5NywgMjAyOTAsIDEyMjMsIDEyMjUsIDEyNDEsIDEyNDMsIDEyNTUsIDEyNTcsIDM1NDIsIDM1NTEsIDUxMDUsIDUxMTQsIDUxMjMsIDUxMzIsIDUyODgsIDUyOTAsIDU3NDUsIDU3NDgsIDYyMDIsIDYyMDQsIDYyNTksIDYyNjEsIDY4OTgsIDY5MDcsIDcwNDAsIDcwNDksCiAgICA4NTUxLCA4NTUzLCA5MTc1LDkxNzcsIDkyNzcsIDkyNzksIDEwMjc4LCAxMDI4MCwgMTA0NzUsIDEwNDg0LCAxMDc4MiwgMTIwOTcsIDE5ODQ3LCAxOTk4NywgMjAyODAsIDEwNzkxLCAxMjEwNCwgMTIyMDQsIDEyMTk1LCAxOTg1NiwgMTk5OTYsIDIwMjg5LAogICAgMjI4MjEsIDIyODMwLCAxMjI3LCAxMjI5LCAxMjQ1LCAxMjQ3LCAxMjU5LCAxMjYxLCAzNTQwLCAzNTQ5LCA1MTAzLCA1MTEyLCA1MTIxLCA1MTMwLCA1MjkyLCA1Mjk0LCA2MjA2LCA2MjA4LCA2MjYzLCA2MjY1LCA2ODk2LCA2OTA1LCA3MDM4LCA3MDQ3LCA4NTU1LCA4NTU3LDkxNzksIDkxODEsCiAgICA5MjgxLCA5MjgzLCAxMDI4MiwgMTAyODQsIDEwNDczLCAxMDQ4MiwgMTA3ODAsIDEwNzg5LCAxMDc4MCwgMTIwOTUsIDEyMTk1LCAxOTg0NSwgMTk5ODUsIDIwMjc4LCAxMDc4OSwgMTIxMDIsIDEyMTkzLCAxMjIwMiwgMTk4NTQsIDE5OTk0LCAyMDI4N30KZm9sbG93TmFtZSA9ICJOYW1lIgppZiBub3Qgc3RvcmFnZVtmb2xsb3dOYW1lXSB0aGVuIHN0b3JhZ2VbZm9sbG93TmFtZV0gPSB7IHBsYXllciA9ICduYW1lJ30gZW5kCmxvY2FsIHRvRm9sbG93UG9zID0ge30KIApVSS5TZXBhcmF0b3IoKQpVSS5MYWJlbCgiQXV0byBGb2xsb3ciKQogCmZvbGxvd1RFID0gVUkuVGV4dEVkaXQoc3RvcmFnZVtmb2xsb3dOYW1lXS5wbGF5ZXIgb3IgIm5hbWUiLCBmdW5jdGlvbih3aWRnZXQsIG5ld1RleHQpCiAgICBzdG9yYWdlW2ZvbGxvd05hbWVdLnBsYXllciA9IG5ld1RleHQKZW5kKQogCmxvY2FsIGZvbGxvd0NoYW5nZSA9IG1hY3JvKDIwMCwgIkZvbGxvdyBDaGFuZ2UiLCBmdW5jdGlvbigpIGVuZCkKbG9jYWwgZm9sbG93TWFjcm8gPSBtYWNybygyMCwgIkZvbGxvdyIsIGZ1bmN0aW9uKCkgCmxvY2FsIHBvc2l0aW9uID0gcG9zKCkKICAgIGxvY2FsIHRhcmdldCA9IGdldENyZWF0dXJlQnlOYW1lKHN0b3JhZ2VbZm9sbG93TmFtZV0ucGxheWVyKQoJaWYgdGFyZ2V0IHRoZW4KICAgICAgICBsb2NhbCB0cG9zID0gdGFyZ2V0OmdldFBvc2l0aW9uKCkKICAgICAgICB0b0ZvbGxvd1Bvc1t0cG9zLnpdID0gdHBvcwoJZW5kCglpZiBub3QgcGxheWVyOmlzV2Fsa2luZygpIGFuZCB0YXJnZXQgYW5kIChnZXREaXN0YW5jZUJldHdlZW4ocG9zKCksIHRhcmdldDpnZXRQb3NpdGlvbigpKSA+MikgdGhlbgoJCWZvciBpLGludGVyYWN0IGluIGlwYWlycyhEb29ycykgZG8KCQkJaWYgKHBsYXllcjpnZXREaXJlY3Rpb24oKSA9PSAxIG9yIHBsYXllcjpnZXREaXJlY3Rpb24oKSA9PSAzKSB0aGVuCgkJCQlmb3IgeD0tMSwyLDIgZG8KCQkJCQlwb3NpdGlvblsieCJdID0gcG9zeCgpICsgeAoJCQkJCXBvc2l0aW9uWyJ5Il0gPSBwb3N5KCkKCQkJCQlmb3IgeT0tMSwzLDIgZG8KCQkJCQkJaWYgZ19tYXAuZ2V0VGlsZShwb3NpdGlvbikgdGhlbgoJCQkJCQkJZm9yIHUsaXRlbSBpbiBpcGFpcnMoZ19tYXAuZ2V0VGlsZShwb3NpdGlvbik6Z2V0SXRlbXMoKSkgZG8KCQkJCQkJCQlpZiBpdGVtOmdldElkKCkgPT0gaW50ZXJhY3QgdGhlbgoJCQkJCQkJCQlnX2dhbWUudXNlKGl0ZW0pCgkJCQkJCQkJCXJldHVybgoJCQkJCQkJCWVuZAoJCQkJCQkJZW5kCgkJCQkJCXBvc2l0aW9uWyJ5Il0gPSBwb3N5KCkreQoJCQkJCQllbmQKCQkJCQllbmQKCQkJCWVuZAoJCQllbmQKCQkJcG9zaXRpb24gPSBwb3MoKQoJCQlpZiAocGxheWVyOmdldERpcmVjdGlvbigpID09IDAgb3IgcGxheWVyOmdldERpcmVjdGlvbigpID09IDIpIHRoZW4KCQkJCWZvciB5PS0xLDIsMiBkbwoJCQkJCXBvc2l0aW9uWyJ4Il0gPSBwb3N4KCkKCQkJCQlwb3NpdGlvblsieSJdID0gcG9zeSgpK3kKCQkJCQlmb3IgeD0tMSwzLDIgZG8KCQkJCQkJZm9yIHUsaXRlbSBpbiBpcGFpcnMoZ19tYXAuZ2V0VGlsZShwb3NpdGlvbik6Z2V0SXRlbXMoKSkgZG8KCQkJCQkJCWlmIGl0ZW06Z2V0SWQoKSA9PSBpbnRlcmFjdCB0aGVuCgkJCQkJCQkJZ19nYW1lLnVzZShpdGVtKQoJCQkJCQkJCXJldHVybgoJCQkJCQkJZW5kCgkJCQkJCWVuZAoJCQkJCQlwb3NpdGlvblsieCJdID0gcG9zeCgpK3gKCQkJCQllbmQKCQkJCWVuZAoJCQllbmQKCQkJcG9zaXRpb24gPSBwb3MoKQoJCWVuZAoJZWxzZWlmIG5vdCBwbGF5ZXI6aXNXYWxraW5nKCkgYW5kIG5vdCB0YXJnZXQgYW5kIHRvRm9sbG93UG9zW3Bvc3ooKV0gdGhlbgoJCWZvciBpLGludGVyYWN0IGluIGlwYWlycyhPYmplY3RzKSBkbwoJCQlmb3IgeD0tMSwyLDEgZG8KCQkJCWZvciB5PS0xLDIsMSBkbwoJCQkJcG9zaXRpb25bIngiXSA9IHRvRm9sbG93UG9zW3Bvc3ooKV0ueCArIHgKCQkJCXBvc2l0aW9uWyJ5Il0gPSB0b0ZvbGxvd1Bvc1twb3N6KCldLnkgKyB5CgkJCQkJaWYgZ2V0RGlzdGFuY2VCZXR3ZWVuKHBvcygpLCBwb3NpdGlvbikgPD0gOCBhbmQgZ19tYXAuZ2V0VGlsZShwb3NpdGlvbikgdGhlbgoJCQkJCQlmb3IgdSxpdGVtIGluIGlwYWlycyhnX21hcC5nZXRUaWxlKHBvc2l0aW9uKTpnZXRJdGVtcygpKSBkbwoJCQkJCQkJaWYgaXRlbTpnZXRJZCgpID09IGludGVyYWN0IHRoZW4KCQkJCQkJCQlnX2dhbWUudXNlKGl0ZW0pCgkJCQkJCQkJZGVsYXkoNTAwKQoJCQkJCQkJZW5kCgkJCQkJCWVuZAoJCQkJCWVuZAoJCQkJZW5kCgkJCWVuZAoJCWVuZAkJCQogICAgZW5kCiAgICBsb2NhbCBwID0gdG9Gb2xsb3dQb3NbcG9zeigpXQogICAgaWYgbm90IHAgdGhlbiByZXR1cm4gZW5kCiAgICBpZiBhdXRvV2FsayhwLCAyMCwgeyBpZ25vcmVOb25QYXRoYWJsZSA9IHRydWUsIHByZWNpc2lvbiA9IDF9KSB0aGVuIGRlbGF5KDEwMCkgZW5kCmVuZCkKVUkuU2VwYXJhdG9yKCkKb25QbGF5ZXJQb3NpdGlvbkNoYW5nZShmdW5jdGlvbihuZXdQb3MsIG9sZFBvcykKICBpZiBmb2xsb3dDaGFuZ2U6aXNPZmYoKSB0aGVuIHJldHVybiBlbmQKICBpZiAoZ19nYW1lLmlzRm9sbG93aW5nKCkpIHRoZW4KICAgIHRmb2xsb3cgPSBnX2dhbWUuZ2V0Rm9sbG93aW5nQ3JlYXR1cmUoKQogCiAgICBpZiB0Zm9sbG93IHRoZW4KICAgICAgaWYgdGZvbGxvdzpnZXROYW1lKCkgfj0gc3RvcmFnZVtmb2xsb3dOYW1lXS5wbGF5ZXIgdGhlbgogICAgICAgIGZvbGxvd1RFOnNldFRleHQodGZvbGxvdzpnZXROYW1lKCkpCiAgICAgICAgc3RvcmFnZVtmb2xsb3dOYW1lXS5wbGF5ZXIgPSB0Zm9sbG93OmdldE5hbWUoKQogICAgICBlbmQKICAgIGVuZAogIGVuZAplbmQpCiAKb25DcmVhdHVyZVBvc2l0aW9uQ2hhbmdlKGZ1bmN0aW9uKGNyZWF0dXJlLCBuZXdQb3MsIG9sZFBvcykKICAgIGlmIGNyZWF0dXJlOmdldE5hbWUoKSA9PSBzdG9yYWdlW2ZvbGxvd05hbWVdLnBsYXllciBhbmQgbmV3UG9zIHRoZW4KICAgICAgICB0b0ZvbGxvd1Bvc1tuZXdQb3Muel0gPSBuZXdQb3MKICAgIGVuZAplbmQp