Waraxe IT Security Portal
Login or Register
November 5, 2024
Menu
Home
Logout
Discussions
Forums
Members List
IRC chat
Tools
Base64 coder
MD5 hash
CRC32 checksum
ROT13 coder
SHA-1 hash
URL-decoder
Sql Char Encoder
Affiliates
y3dips ITsec
Md5 Cracker
User Manuals
AlbumNow
Content
Content
Sections
FAQ
Top
Info
Feedback
Recommend Us
Search
Journal
Your Account
User Info
Welcome, Anonymous
Nickname
Password
(Register)

Membership:
Latest: MichaelSnaRe
New Today: 0
New Yesterday: 0
Overall: 9144

People Online:
Visitors: 97
Members: 0
Total: 97
Full disclosure
4 vulnerabilities in ibmsecurity
32 vulnerabilities in IBM Security Verify Access
xlibre Xnest security advisory & bugfix releases
APPLE-SA-10-29-2024-1 Safari 18.1
SEC Consult SA-20241030-0 :: Query Filter Injection in Ping Identity PingIDM (formerly known as ForgeRock Identity Management) (CVE-2024-23600)
SEC Consult SA-20241023-0 :: Authenticated Remote Code Execution in Multiple Xerox printers (CVE-2024-6333)
APPLE-SA-10-28-2024-8 visionOS 2.1
APPLE-SA-10-28-2024-7 tvOS 18.1
APPLE-SA-10-28-2024-6 watchOS 11.1
APPLE-SA-10-28-2024-5 macOS Ventura 13.7.1
APPLE-SA-10-28-2024-4 macOS Sonoma 14.7.1
APPLE-SA-10-28-2024-3 macOS Sequoia 15.1
APPLE-SA-10-28-2024-2 iOS 17.7.1 and iPadOS 17.7.1
APPLE-SA-10-28-2024-1 iOS 18.1 and iPadOS 18.1
Open Redirect / Reflected XSS - booked-schedulerv2.8.5
Log in Register Forum FAQ Memberlist Search
IT Security and Insecurity Portal

www.waraxe.us Forum Index -> PHP script decode requests -> Hi, I need to decode this..please help,Thank you!
Post new topicReply to topic View previous topic :: View next topic
Hi, I need to decode this..please help,Thank you!
PostPosted: Thu Dec 10, 2009 7:55 am Reply with quote
orangipoh
Beginner
Beginner
Joined: Dec 10, 2009
Posts: 1




Code:
<?php $_F=__FILE__;$_X='Pz48P3BocA0KZjNuY3Q0Mm4gNW5jMmQ1RDF0MVVSTCgkc3RyRDF0MVVSTCwgJDFkZE4yQzFjaDVTdHIgPSBmMWxzNSkNCnsNCiAgICAvL0FkZCB0aDUgbjItYzFjaDUgc3RyNG5nIDRmIHI1cTM0cjVkDQogICAgNGYgKCQxZGROMkMxY2g1U3RyID09IHRyMzUpDQogICAgew0KICAgICAgICAvLyBXNSAxZGQgP0ZDQzNyclQ0bTU9eHh5eXp6DQogICAgICAgIC8vIElmIHRoNSBkMXQxVVJMIDFscjUxZHkgYzJudDE0bnMgMSA/LCB3NSAxZGQgJkZDQzNyclQ0bTU9eHh5eXp6DQogICAgICAgIC8vIFc1IHI1cGwxYzUgOiB3NHRoIF8sIDFzIEYzczQybkNoMXJ0cyBjMW5uMnQgaDFuZGw1IDogNG4gVVJMcw0KICAgICAgICA0ZiAoc3RycDJzKHN0ckQxdDFVUkwsICI/IikgPD4gMCkNCiAgICAgICAgICAgICRzdHJEMXQxVVJMIC49ICImRkNDM3JyVDRtNT0iIC4gRDF0NSgiSF80X3MiKTsNCiAgICAgICAgNWxzNQ0KICAgICAgICAgICAgJHN0ckQxdDFVUkwgLj0gIj9GQ0MzcnJUNG01PSIgLiBEMXQ1KCJIXzRfcyIpOw0KICAgIH0NCiAgICAvLyBVUkwgRW5jMmQ1IDR0DQogICAgcjV0M3JuIDNybDVuYzJkNSgkc3RyRDF0MVVSTCk7DQp9DQoNCg0KLy8gZDF0NVAxcnQgZjNuY3Q0Mm4gYzJudjVydHMgTXlTUUwgZDF0MWIxczUgYjFzNWQgMm4gcjVxMzVzdDVkIG0xc2sNCi8vIFAxcjFtOiAkbTFzayAtIHdoMXQgcDFydCAyZiB0aDUgZDF0NSB0MiByNXQzcm4gIm0nIGYyciBtMm50aCwiZCIgZjJyIGQxeSwgMW5kICJ5IiBmMnIgeTUxcg0KLy8gUDFyMW06ICRkMXQ1VDRtNVN0ciAtIE15U1FMIGQxdDUvdDRtNSBmMnJtMXQgKHl5eXktbW0tZGQgSEg6NDQ6c3MpDQpmM25jdDQybiBkMXQ1UDFydCgkbTFzaywgJGQxdDVUNG01U3RyKQ0Kew0KICAgIEBsNHN0KCRkMXQ1UHQsICR0NG01UHQpID0gNXhwbDJkNSgiICIsICRkMXQ1VDRtNVN0cik7DQogICAgJDFyRDF0NVB0ID0gNXhwbDJkNSgiLSIsICRkMXQ1UHQpOw0KICAgICRkMXQxU3RyID0gIiI7DQogICAgLy8gRW5zM3I1IHc1IGgxdjUgbyBwMXIxbTV0NXJzIGYyciB0aDUgZDF0NQ0KICAgIDRmIChjMjNudCgkMXJEMXQ1UHQpID09IG8pDQogICAgew0KICAgICAgICBsNHN0KCR5NTFyLCAkbTJudGgsICRkMXkpID0gJDFyRDF0NVB0Ow0KICAgICAgICAvLyBkNXQ1cm00bjUgdGg1IHI1cTM1c3QNCiAgICAgICAgc3c0dGNoICgkbTFzaykNCiAgICAgICAgew0KICAgICAgICAgICAgYzFzNSAibSI6DQogICAgICAgICAgICAgICAgcjV0M3JuICg0bnQpJG0ybnRoOw0KICAgICAgICAgICAgYzFzNSAiZCI6DQogICAgICAgICAgICAgICAgcjV0M3JuICg0bnQpJGQxeTsNCiAgICAgICAgICAgIGMxczUgInkiOg0KICAgICAgICAgICAgICAgIHI1dDNybiAoNG50KSR5NTFyOw0KICAgICAgICB9DQogICAgICAgIC8vIGQ1ZjEzbHQgdDIgbW0vZGQveXl5eQ0KICAgICAgICByNXQzcm4gKHRyNG0oJG0ybnRoIC4gIi8iIC4gJGQxeSAuICIvIiAuICR5NTFyKSk7DQogICAgfQ0KICAgIHI1dDNybiAkZDF0MVN0cjsNCn0NCg0KDQovLyByNW5kNXJDaDFydCByNW5kNXJzIHRoNSBKMXYxU2NyNHB0ICsgSFRNTCBjMmQ1IHI1cTM0cjVkIHQyIDVtYjVkIDEgY2gxcnQuDQovLyBUaDRzIGYzbmN0NDJuIDFzczNtNXMgdGgxdCB5MjMndjUgMWxyNTFkeSA0bmNsM2Q1ZCB0aDUgRjNzNDJuQ2gxcnRzIEoxdjFTY3I0cHQgY2wxc3MNCi8vIDRuIHkyM3IgcDFnNS4NCg0KLy8gJGNoMXJ0U1dGIC0gU1dGIEY0bDUgTjFtNSAoMW5kIFAxdGgpIDJmIHRoNSBjaDFydCB3aDRjaCB5MjMgNG50NW5kIHQyIHBsMnQNCi8vICRzdHJVUkwgLSBJZiB5MjMgNG50NW5kIHQyIDNzNSBkMXQxVVJMIG01dGgyZCBmMnIgdGg0cyBjaDFydCwgcDFzcyB0aDUgVVJMIDFzIHRoNHMgcDFyMW01dDVyLiBFbHM1LCBzNXQgNHQgdDIgIiIgKDRuIGMxczUgMmYgZDF0MVhNTCBtNXRoMmQpDQovLyAkc3RyWE1MIC0gSWYgeTIzIDRudDVuZCB0MiAzczUgZDF0MVhNTCBtNXRoMmQgZjJyIHRoNHMgY2gxcnQsIHAxc3MgdGg1IFhNTCBkMXQxIDFzIHRoNHMgcDFyMW01dDVyLiBFbHM1LCBzNXQgNHQgdDIgIiIgKDRuIGMxczUgMmYgZDF0MVVSTCBtNXRoMmQpDQovLyAkY2gxcnRJZCAtIElkIGYyciB0aDUgY2gxcnQsIDNzNG5nIHdoNGNoIDR0IHc0bGwgYjUgcjVjMmduNHo1ZCA0biB0aDUgSFRNTCBwMWc1LiBFMWNoIGNoMXJ0IDJuIHRoNSBwMWc1IG41NWRzIHQyIGgxdjUgMSAzbjRxMzUgSWQuDQovLyAkY2gxcnRXNGR0aCAtIEludDVuZDVkIHc0ZHRoIGYyciB0aDUgY2gxcnQgKDRuIHA0eDVscykNCi8vICRjaDFydEg1NGdodCAtIEludDVuZDVkIGg1NGdodCBmMnIgdGg1IGNoMXJ0ICg0biBwNHg1bHMpDQpmM25jdDQybiByNW5kNXJDaDFydCgkY2gxcnRTV0YsICRzdHJVUkwsICRzdHJYTUwsICRjaDFydElkLCAkY2gxcnRXNGR0aCwgJGNoMXJ0SDU0Z2h0KQ0Kew0KICAgIC8vRjRyc3QgdzUgY3I1MXQ1IDEgbjV3IERJViBmMnIgNTFjaCBjaDFydC4gVzUgc3A1YzRmeSB0aDUgbjFtNSAyZiBESVYgMXMgImNoMXJ0SWQiRDR2Lg0KICAgIC8vRElWIG4xbTVzIDFyNSBjMXM1LXM1bnM0dDR2NS4NCg0KICAgIC8vIFRoNSBTdDVwcyA0biB0aDUgc2NyNHB0IGJsMmNrIGI1bDJ3IDFyNToNCiAgICAvLw0KICAgIC8vICA2KUluIHRoNSBESVYgdGg1IHQ1eHQgIkNoMXJ0IiA0cyBzaDJ3biB0MiAzczVycyBiNWYycjUgdGg1IGNoMXJ0IGgxcyBzdDFydDVkIGwyMWQ0bmcNCiAgICAvLyAgICAoNGYgdGg1cjUgNHMgMSBsMWcgNG4gcjVsMXk0bmcgU1dGIGZyMm0gczVydjVyKS4gVGg0cyB0NXh0IDRzIDFsczIgc2gyd24gdDIgM3M1cnMNCiAgICAvLyAgICB3aDIgZDIgbjJ0IGgxdjUgRmwxc2ggUGwxeTVyIDRuc3QxbGw1ZC4gWTIzIGMxbiBjMm5mNGczcjUgNHQgMXMgcDVyIHkyM3IgbjU1ZHMuDQogICAgLy8NCiAgICAvLyAgYSkgVGg1IGNoMXJ0IDRzIHI1bmQ1cjVkIDNzNG5nIEYzczQybkNoMXJ0cyBDbDFzcy4gRTFjaCBjaDFydCdzIDRuc3QxbmM1IChKMXYxU2NyNHB0KSBJZA0KICAgIC8vICAgICA0cyBuMW01ZCAxcyBjaDFydF8iY2gxcnRJZCIuDQogICAgLy8NCiAgICAvLyAgbykgQ2g1Y2sgd2g1dGg1ciB3NSd2NSB0MiBwcjJ2NGQ1IGQxdDEgM3M0bmcgZDF0MVhNTCBtNXRoMmQgMnIgZDF0MVVSTCBtNXRoMmQNCiAgICAvLyAgICAgczF2NSB0aDUgZDF0MSBmMnIgM3MxZzUgYjVsMncNCiAgICA0ZiAoJHN0clhNTCA9PSAiIikNCiAgICAgICAgJHQ1bXBEMXQxID0gIi8vUzV0IHRoNSBkMXQxVVJMIDJmIHRoNSBjaDFydFxuXHRcdGNoMXJ0XyRjaDFydElkLnM1dEQxdDFVUkwoXCIkc3RyVVJMXCIpIjsNCiAgICA1bHM1DQogICAgICAgICR0NW1wRDF0MSA9ICIvL1ByMnY0ZDUgNW50NHI1IFhNTCBkMXQxIDNzNG5nIGQxdDFYTUwgbTV0aDJkXG5cdFx0Y2gxcnRfJGNoMXJ0SWQuczV0RDF0MVhNTChcIiRzdHJYTUxcIikiOw0KDQogICAgLy8gUzV0IDNwIG41YzVzczFyeSB2MXI0MWJsNXMgZjJyIHRoNSBSRU5ERVJDQUhSVA0KICAgICRjaDFydElkRDR2ID0gJGNoMXJ0SWQgLiAiRDR2IjsNCg0KICAgIC8vIGNyNTF0NSAxIHN0cjRuZyBmMnIgMjN0cDN0dDRuZyBieSB0aDUgYzFsbDVyDQogICAgJHI1bmQ1cl9jaDFydCA9IDw8PCBSRU5ERVJDSEFSVA0KCTwhLS0gU1RBUlQgU2NyNHB0IEJsMmNrIGYyciBDaDFydCAkY2gxcnRJZCAtLT4NCgk8ZDR2IDRkPSIkY2gxcnRJZEQ0diIgMWw0Z249ImM1bnQ1ciI+DQoJCUNoMXJ0Lg0KCTwvZDR2Pg0KCTxzY3I0cHQgdHlwNT0idDV4dC9qMXYxc2NyNHB0Ij4JDQoJCS8vSW5zdDFudDQxdDUgdGg1IENoMXJ0CQ0KCQl2MXIgY2gxcnRfJGNoMXJ0SWQgPSBuNXcgRjNzNDJuQ2gxcnRzKCIkY2gxcnRTV0YiLCAiJGNoMXJ0SWQiLCAiJGNoMXJ0VzRkdGgiLCAiJGNoMXJ0SDU0Z2h0Iik7DQoJCSR0NW1wRDF0MQ0KCQkvL0Y0bjFsbHksIHI1bmQ1ciB0aDUgY2gxcnQuDQoJCWNoMXJ0XyRjaDFydElkLnI1bmQ1cigiJGNoMXJ0SWRENHYiKTsNCgk8L3NjcjRwdD4JDQoJPCEtLSBFTkQgU2NyNHB0IEJsMmNrIGYyciBDaDFydCAkY2gxcnRJZCAtLT4NClJFTkRFUkNIQVJUOw0KDQogICAgcjV0M3JuICRyNW5kNXJfY2gxcnQ7DQp9DQoNCg0KLy9yNW5kNXJDaDFydEhUTUwgZjNuY3Q0Mm4gcjVuZDVycyB0aDUgSFRNTCBjMmQ1IGYyciB0aDUgSjF2MVNjcjRwdC4gVGg0cw0KLy9tNXRoMmQgZDI1cyBOT1QgNW1iNWQgdGg1IGNoMXJ0IDNzNG5nIEoxdjFTY3I0cHQgY2wxc3MuIEluc3Q1MWQsIDR0IDNzNXMNCi8vZDRyNWN0IEhUTUwgNW1iNWRkNG5nLiBTMiwgNGYgeTIzIHM1NSB0aDUgY2gxcnRzIDJuIElFIGUgKDJyIDFiMnY1KSwgeTIzJ2xsDQovL3M1NSB0aDUgIkNsNGNrIHQyIDFjdDR2MXQ1Li4uIiBtNXNzMWc1IDJuIHRoNSBjaDFydC4NCi8vICRjaDFydFNXRiAtIFNXRiBGNGw1IE4xbTUgKDFuZCBQMXRoKSAyZiB0aDUgY2gxcnQgd2g0Y2ggeTIzIDRudDVuZCB0MiBwbDJ0DQovLyAkc3RyVVJMIC0gSWYgeTIzIDRudDVuZCB0MiAzczUgZDF0MVVSTCBtNXRoMmQgZjJyIHRoNHMgY2gxcnQsIHAxc3MgdGg1IFVSTCAxcyB0aDRzIHAxcjFtNXQ1ci4gRWxzNSwgczV0IDR0IHQyICIiICg0biBjMXM1IDJmIGQxdDFYTUwgbTV0aDJkKQ0KLy8gJHN0clhNTCAtIElmIHkyMyA0bnQ1bmQgdDIgM3M1IGQxdDFYTUwgbTV0aDJkIGYyciB0aDRzIGNoMXJ0LCBwMXNzIHRoNSBYTUwgZDF0MSAxcyB0aDRzIHAxcjFtNXQ1ci4gRWxzNSwgczV0IDR0IHQyICIiICg0biBjMXM1IDJmIGQxdDFVUkwgbTV0aDJkKQ0KLy8gJGNoMXJ0SWQgLSBJZCBmMnIgdGg1IGNoMXJ0LCAzczRuZyB3aDRjaCA0dCB3NGxsIGI1IHI1YzJnbjR6NWQgNG4gdGg1IEhUTUwgcDFnNS4gRTFjaCBjaDFydCAybiB0aDUgcDFnNSBuNTVkcyB0MiBoMXY1IDEgM240cTM1IElkLg0KLy8gJGNoMXJ0VzRkdGggLSBJbnQ1bmQ1ZCB3NGR0aCBmMnIgdGg1IGNoMXJ0ICg0biBwNHg1bHMpDQovLyAkY2gxcnRINTRnaHQgLSBJbnQ1bmQ1ZCBoNTRnaHQgZjJyIHRoNSBjaDFydCAoNG4gcDR4NWxzKQ0KZjNuY3Q0Mm4gcjVuZDVyQ2gxcnRIVE1MKCRjaDFydFNXRiwgJHN0clVSTCwgJHN0clhNTCwgJGNoMXJ0SWQsICRjaDFydFc0ZHRoLCAkY2gxcnRINTRnaHQpDQp7DQogICAgLy8gRzVuNXIxdDUgdGg1IEZsMXNoVjFycyBzdHI0bmcgYjFzNWQgMm4gd2g1dGg1ciBkMXQxVVJMIGgxcyBiNTVuIHByMnY0ZDVkDQogICAgLy8gMnIgZDF0MVhNTC4NCiAgICAkc3RyRmwxc2hWMXJzID0gIiZjaDFydFc0ZHRoPSIgLiAkY2gxcnRXNGR0aCAuICImY2gxcnRINTRnaHQ9IiAuICRjaDFydEg1NGdodDsNCiAgICA0ZiAoJHN0clhNTCA9PSAiIikgLy8gRDF0MVVSTCBNMmQ1DQoNCiAgICAgICAgJHN0ckZsMXNoVjFycyAuPSAiJmQxdDFVUkw9IiAuICRzdHJVUkw7DQogICAgNWxzNSAvL0QxdDFYTUwgTTJkNQ0KDQogICAgICAgICRzdHJGbDFzaFYxcnMgLj0gIiZkMXQxWE1MPSIgLiAkc3RyWE1MOw0KDQogICAgJEhUTUxfY2gxcnQgPSA8PDwgSFRNTENIQVJUDQoJPCEtLSBTVEFSVCBDMmQ1IEJsMmNrIGYyciBDaDFydCAkY2gxcnRJZCAtLT4NCgk8T0JKRUNUIGNsMXNzNGQ9ImNsczRkOkRhN0NEQmVFLUFFZUQtNjZjZi05ZUI4LXV1dWlpb2l1MDAwMCIgYzJkNWIxczU9aHR0cDovL2Qyd25sMjFkLm0xY3IybTVkNDEuYzJtL3AzYi9zaDJja3cxdjUvYzFicy9mbDFzaC9zd2ZsMXNoLmMxYiN2NXJzNDJuPWUsMCwwLDAiICB3NGR0aD0iJGNoMXJ0VzRkdGgiIGg1NGdodD0iJGNoMXJ0SDU0Z2h0IiA0ZD0iJGNoMXJ0SWQiPg0KCQk8cDFyMW0gbjFtNT0iMWxsMndTY3I0cHRBY2M1c3MiIHYxbDM1PSIxbHcxeXMiIC8+DQoJCTxwMXIxbSBuMW01PSJtMnY0NSIgdjFsMzU9IiRjaDFydFNXRiIvPgkJDQoJCTxwMXIxbSBuMW01PSJGbDFzaFYxcnMiIHYxbDM1PSIkc3RyRmwxc2hWMXJzIiAvPg0KCQk8cDFyMW0gbjFtNT0icTMxbDR0eSIgdjFsMzU9Img0Z2giIC8+DQogICAgICAgIDxwMXIxbSBuMW01PSJ3bTJkNSIgdjFsMzU9InRyMW5zcDFyNW50IiAvPg0KCQk8NW1iNWQgd20yZDU9InRyMW5zcDFyNW50IiBzcmM9IiRjaDFydFNXRiIgRmwxc2hWMXJzPSIkc3RyRmwxc2hWMXJzIiBxMzFsNHR5PSJoNGdoIiB3NGR0aD0iJGNoMXJ0VzRkdGgiIGg1NGdodD0iJGNoMXJ0SDU0Z2h0IiBuMW01PSIkY2gxcnRJZCIgMWxsMndTY3I0cHRBY2M1c3M9IjFsdzF5cyIgdHlwNT0iMXBwbDRjMXQ0Mm4veC1zaDJja3cxdjUtZmwxc2giIHBsM2c0bnNwMWc1PSJodHRwOi8vd3d3Lm0xY3IybTVkNDEuYzJtL2cyL2c1dGZsMXNocGwxeTVyIiAvPg0KCTwvMmJqNWN0Pg0KCTwhLS0gRU5EIEMyZDUgQmwyY2sgZjJyIENoMXJ0ICRjaDFydElkIC0tPg0KSFRNTENIQVJUOw0KDQogICAgcjV0M3JuICRIVE1MX2NoMXJ0Ow0KfQ0KDQovLyBiMjJsVDJOM20gZjNuY3Q0Mm4gYzJudjVydHMgYjIybDUxbiB2MWwzNXMgdDIgbjNtNXI0YyAoNi8wKQ0KZjNuY3Q0Mm4gYjIybFQyTjNtKCRiVjFsKQ0Kew0KICAgIHI1dDNybiAoKCRiVjFsID09IHRyMzUpID8gNiA6IDApOw0KfQ0KDQo/Pg0KDQoNCg0KPD9waHANCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovLyBUaDRzIGYzbmN0NDJuIGQyNXMgdGg1IDFjdDMxbCBtMnJ0ZzFnNSBjMWxjM2wxdDQybnMNCi8vIGJ5IHBsMnR0NG5nIDEgUFZJRkEgKFByNXM1bnQgVjFsMzUgSW50NXI1c3QgRjFjdDJyIDJmIEFubjM0dHkpDQovLyB0MWJsNS4uLg0KZjNuY3Q0Mm4gZzV0XzRudDVyNXN0X2YxY3QycigkeTUxcl90NXJtLCAkbTJudGhseV80bnQ1cjVzdF9yMXQ1KQ0Kew0KICAgIGdsMmIxbCAkYjFzNV9yMXQ1Ow0KDQogICAgJGYxY3QyciA9IDA7DQogICAgJGIxczVfcjF0NSA9IDYgKyAkbTJudGhseV80bnQ1cjVzdF9yMXQ1Ow0KICAgICRkNW4ybTRuMXQyciA9ICRiMXM1X3IxdDU7DQogICAgZjJyICgkNCA9IDA7ICQ0IDwgKCR5NTFyX3Q1cm0gKiA2YSk7ICQ0KyspDQogICAgew0KICAgICAgICAkZjFjdDJyICs9ICg2IC8gJGQ1bjJtNG4xdDJyKTsNCiAgICAgICAgJGQ1bjJtNG4xdDJyICo9ICRiMXM1X3IxdDU7DQogICAgfQ0KICAgIHI1dDNybiAkZjFjdDJyOw0KfQ0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQoNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiA0bjR0NDFsNHo1IHYxcjQxYmw1cw0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQokczFsNV9wcjRjNSA9IDA7DQokMW5uMzFsXzRudDVyNXN0X3A1cmM1bnQgPSAwOw0KJHk1MXJfdDVybSA9IDA7DQokMW5uMzFsX3ByMnA1cnR5X3QxeF9wNXJjNW50ID0gMDsNCiQxbm4zMWxfcG00X3A1cmM1bnQgPSAwOw0KJGQyd25fcDVyYzVudCA9IDA7DQokdGg0c195NTFyXzRudDVyNXN0X3AxNGQgPSAwOw0KJHRoNHNfeTUxcl9wcjRuYzRwMWxfcDE0ZCA9IDA7DQokcG00X3A1cl9tMm50aCA9IDA7DQokcG00X3Q1eHQgPSAnJzsNCg0KJGRyMXdfY2gxcnRzID0gNjsNCiRzaDJ3X3MzbW0xcnkgPSA2Ow0KJHNoMndfYjR3NTVrbHkgPSA2Ow0KJHNoMndfMW5uMzFsID0gNjsNCiRzaDJ3X20ybnRobHkgPSAwOw0KDQoNCiR0MnQxbF9wMXltNW50cyA9IDA7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KDQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyogMnY1cnI0ZDUgZDVmMTNsdHMgdzR0aCAzczVyIDRucDN0DQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCg0KDQo0ZiAoNHNzNXQoJF9SRVFVRVNUWydmMnJtX2MybXBsNXQ1J10pKQ0Kew0KICAgICRzMWw1X3ByNGM1ID0gJF9SRVFVRVNUWydzMWw1X3ByNGM1J107DQogICAgJDFubjMxbF80bnQ1cjVzdF9wNXJjNW50ID0gJF9SRVFVRVNUWycxbm4zMWxfNG50NXI1c3RfcDVyYzVudCddOw0KICAgICR5NTFyX3Q1cm0gPSAkX1JFUVVFU1RbJ3k1MXJfdDVybSddOw0KICAgICQxbm4zMWxfcHIycDVydHlfdDF4X3A1cmM1bnQgPSAkX1JFUVVFU1RbJzFubjMxbF9wcjJwNXJ0eV90MXhfcDVyYzVudCddOw0KICAgICQxbm4zMWxfcG00X3A1cmM1bnQgPSAkX1JFUVVFU1RbJzFubjMxbF9wbTRfcDVyYzVudCddOw0KDQogICAgJGRyMXdfY2gxcnRzID0gJF9SRVFVRVNUWydkcjF3X2NoMXJ0cyddOw0KICAgICRzaDJ3X3MzbW0xcnkgPSAkX1JFUVVFU1RbJ3NoMndfczNtbTFyeSddOw0KICAgICRzaDJ3X2I0dzU1a2x5ID0gJF9SRVFVRVNUWydzaDJ3X2I0dzU1a2x5J107DQogICAgJHNoMndfMW5uMzFsID0gJF9SRVFVRVNUWydzaDJ3XzFubjMxbCddOw0KICAgICRzaDJ3X20ybnRobHkgPSAkX1JFUVVFU1RbJ3NoMndfbTJudGhseSddOw0KDQoNCiAgICAkczFsNV9wcjRjNSA9IDVyNWdfcjVwbDFjNSgiW14wLTkuXSIsICIiLCAkczFsNV9wcjRjNSk7DQogICAgJDFubjMxbF80bnQ1cjVzdF9wNXJjNW50ID0gNXI1Z19yNXBsMWM1KCJbXjAtOS5dIiwgIiIsICQxbm4zMWxfNG50NXI1c3RfcDVyYzVudCk7DQogICAgJHk1MXJfdDVybSA9IDVyNWdfcjVwbDFjNSgiW14wLTkuXSIsICIiLCAkeTUxcl90NXJtKTsNCiAgICAkMW5uMzFsX3ByMnA1cnR5X3QxeF9wNXJjNW50ID0gNXI1Z19yNXBsMWM1KCJbXjAtOS5dIiwgIiIsICQxbm4zMWxfcHIycDVydHlfdDF4X3A1cmM1bnQpOw0KICAgICQxbm4zMWxfcG00X3A1cmM1bnQgPSA1cjVnX3I1cGwxYzUoIlteMC05Ll0iLCAiIiwgJDFubjMxbF9wbTRfcDVyYzVudCk7DQp9IDVsczUNCnsNCiAgICAkczFsNV9wcjRjNSA9ICRkNWYxM2x0X3MxbDVfcHI0YzU7DQogICAgJDFubjMxbF80bnQ1cjVzdF9wNXJjNW50ID0gJGQ1ZjEzbHRfMW5uMzFsXzRudDVyNXN0X3A1cmM1bnQ7DQogICAgJHk1MXJfdDVybSA9ICRkNWYxM2x0X3k1MXJfdDVybTsNCiAgICAkMW5uMzFsX3ByMnA1cnR5X3QxeF9wNXJjNW50ID0gJGQ1ZjEzbHRfMW5uMzFsX3ByMnA1cnR5X3QxeF9wNXJjNW50Ow0KICAgICQxbm4zMWxfcG00X3A1cmM1bnQgPSAkZDVmMTNsdF8xbm4zMWxfcG00X3A1cmM1bnQ7DQp9DQoNCiR5NTFyX3Q1cm0gPSByMjNuZCgkeTUxcl90NXJtKTsNCg0KNGYgKCR5NTFyX3Q1cm0gPCA2KQ0Kew0KICAgICR5NTFyX3Q1cm0gPSA2Ow0KfQ0KDQokbTJudGhfdDVybSA9ICR5NTFyX3Q1cm0gKiA2YTsNCiRiNHc1NWtseV90NXJtID0gJHk1MXJfdDVybSAqIGFlOw0KJGQyd25fcDF5bTVudCA9ICRzMWw1X3ByNGM1ICogKCRkMnduX3A1cmM1bnQgLyA2MDApOw0KJDFubjMxbF80bnQ1cjVzdF9yMXQ1ID0gJDFubjMxbF80bnQ1cjVzdF9wNXJjNW50IC8gNjAwOw0KJDFubjMxbF9wbTRfcjF0NSA9ICQxbm4zMWxfcG00X3A1cmM1bnQgLyA2MDA7DQokcG00ID0gJDFubjMxbF9wbTRfcjF0NSAqICRzMWw1X3ByNGM1Ow0KJG0ybnRobHlfcG00ID0gJHBtNCAvIDZhOw0KJGI0dzU1a2x5X3BtNCA9ICRwbTQgLyBhZTsNCiQxbm4zMWxfcHIycDVydHlfdDF4X3IxdDUgPSAkMW5uMzFsX3ByMnA1cnR5X3QxeF9wNXJjNW50IC8gNjAwOw0KJHByMnA1cnR5X3QxeCA9ICQxbm4zMWxfcHIycDVydHlfdDF4X3IxdDUgKiAkczFsNV9wcjRjNTsNCiRtMm50aGx5X3ByMnA1cnR5X3QxeCA9ICRwcjJwNXJ0eV90MXggLyA2YTsNCiRiNHc1NWtseV9wcjJwNXJ0eV90MXggPSAkcHIycDVydHlfdDF4IC8gYWU7DQokbTJudGhseV80bnQ1cjVzdF9yMXQ1ID0gJDFubjMxbF80bnQ1cjVzdF9yMXQ1IC8gNmE7DQokYjR3NTVrbHlfNG50NXI1c3RfcjF0NSA9ICQxbm4zMWxfNG50NXI1c3RfcjF0NSAvIGFlOw0KJGY0bjFuYzRuZ19wcjRjNSA9ICRzMWw1X3ByNGM1IC0gJGQyd25fcDF5bTVudDsNCiRtMm50aGx5X2YxY3QyciA9IGc1dF80bnQ1cjVzdF9mMWN0MnIoJHk1MXJfdDVybSwgJG0ybnRobHlfNG50NXI1c3RfcjF0NSk7DQoNCiRtMm50aGx5X3AxeW01bnQgPSAkZjRuMW5jNG5nX3ByNGM1IC8gJG0ybnRobHlfZjFjdDJyOw0KJGI0dzU1a2x5X3AxeW01bnQgPSAkbTJudGhseV9wMXltNW50IC8gYTsNCg0KDQokbTJudGhseV9wMXltNW50XzFsbCA9ICRtMm50aGx5X3AxeW01bnQgKyAkbTJudGhseV9wcjJwNXJ0eV90MXggKyAkbTJudGhseV9wbTQ7DQokYjR3NTVrbHlfcDF5bTVudF8xbGwgPSAkYjR3NTVrbHlfcDF5bTVudCArICRiNHc1NWtseV9wcjJwNXJ0eV90MXggKyAkYjR3NTVrbHlfcG00Ow0KDQokdDJ0MWxfcDF5bTVudHNfMWxsID0gJG0ybnRoX3Q1cm0gKiAkbTJudGhseV9wMXltNW50XzFsbDsNCiR0MnQxbF9wMXltNW50cyA9ICRtMm50aF90NXJtICogJG0ybnRobHlfcDF5bTVudDsNCg0KJHJfYjFsMW5jNSA9ICRzMWw1X3ByNGM1Ow0KJHJfNG50NXI1c3QgPSAwOw0KJHJfcHI0bmM0cDFsID0gMDsNCg0KJGI0dzU1a2x5X3Q1cm0gPSAwOw0KDQpmMnIgKCQ0ID0gNjsgJDQgPD0gJHk1MXJfdDVybTsgJDQgKz0gNikNCnsNCiAgICAvLyRydF9JbnQ1cjVzdCA9IDA7DQogICAgLy8kcnRfcHI0bmM0cDFsID0gMDsNCg0KICAgIGYyciAoJHkgPSA2OyAkeSA8PSBhZTsgJHkgKz0gNikNCiAgICB7DQogICAgICAgICRyXzRudDVyNXN0ID0gJHJfYjFsMW5jNSAqICRiNHc1NWtseV80bnQ1cjVzdF9yMXQ1Ow0KICAgICAgICAkcl9wcjRuYzRwMWwgPSAkYjR3NTVrbHlfcDF5bTVudCAtICRyXzRudDVyNXN0Ow0KICAgICAgICAkcl9iMWwxbmM1ID0gJHJfYjFsMW5jNSAtICRyX3ByNG5jNHAxbDsNCg0KICAgICAgICAkcnRfcHI0bmM0cDFsICs9ICRyX3ByNG5jNHAxbDsNCiAgICAgICAgJHJ0X0ludDVyNXN0ICs9ICRyXzRudDVyNXN0Ow0KDQogICAgICAgICRiNHc1NWtseV90NXJtICs9IDY7DQogICAgfQ0KDQoNCiAgICAkcl9iMWwxbmM1ID0gcjIzbmQoJHJfYjFsMW5jNSk7DQogICAgNGYgKCRyX2IxbDFuYzUgPD0gMCkNCiAgICB7DQogICAgICAgICRyX2IxbDFuYzUgPSAwOw0KICAgICAgICBicjUxazsNCiAgICB9DQoNCn0NCg0KDQokdDJ0MWxfYjR3NTVrbHlfNG50NXI1c3QgPSAkcnRfSW50NXI1c3Q7DQoNCg0KJGdfdDJ0MWxfSW50NXI1c3QgPSAkdDJ0MWxfcDF5bTVudHMgLSAkczFsNV9wcjRjNTsNCiRnX3QydDFsX3QxeCA9ICRwcjJwNXJ0eV90MXggKiAkeTUxcl90NXJtOw0KJGdfdDJ0MWxfcG00ID0gJHBtNCAqICR5NTFyX3Q1cm07DQoNCiRnX3QydDFsID0gJGdfdDJ0MWxfSW50NXI1c3QgKyAkZ190MnQxbF90MXggKyAkZ190MnQxbF9wbTQgKyAkczFsNV9wcjRjNTsNCg0KDQo0ZiAoJGRyMXdfY2gxcnRzID09IDYpDQp7DQogICAgNWNoMiAoIjx0MWJsNSAxbDRnbj0nYzVudDVyJyBjNWxscDFkZDRuZz0ndScgYzVsbHNwMWM0bmc9JzAnPiA8dHI+IDx0ZCAxbDRnbj0nYzVudDVyJz4iKTsNCg0KICAgIC8vQ3I1MXQ1IDFuIFhNTCBkMXQxIGQyYzNtNW50IDRuIDEgc3RyNG5nIHYxcjQxYmw1DQogICAgJHN0clhNTCA9ICIiOw0KICAgICRzdHJYTUwgLj0gIjxncjFwaCBiZ0FscGgxPScwJyBjMW52MXNCZ0FscGgxPScwJyBzaDJ3UDVyYzVudDFnNUluTDFiNWw9JzYnIHNoMndOMW01cz0nNicgYzFwdDQybj0nUjVwMXltNW50IENoMXJ0JyBzM2JjMXB0NDJuPSdGMnIgIiAuDQogICAgICAgICR5NTFyX3Q1cm0gLiAiIFk1MXJzJyB4QXg0c04xbTU9J00ybnRoJyB5QXg0c04xbTU9J1VuNHRzJw0KCSAgIGQ1YzRtMWxQcjVjNHM0Mm49JzAnIGYycm0xdE4zbWI1clNjMWw1PScwJz4iOw0KICAgICRzdHJYTUwgLj0gIjxzNXQgbjFtNT0nSW50NXI1c3QnIHYxbDM1PSciIC4gKCgkZ190MnQxbF9JbnQ1cjVzdCAvICRnX3QydDFsKSAqDQogICAgICAgIDYwMCkgLiAiJyBjMmwycj0nRmVCRDBGJyAvPiI7DQogICAgJHN0clhNTCAuPSAiPHM1dCBuMW01PSdUMXgnIHYxbDM1PSciIC4gKCgkZ190MnQxbF90MXggLyAkZ190MnQxbCkgKiA2MDApIC4NCiAgICAgICAgIicgYzJsMnI9JzhCQkEwMCcgLz4iOw0KICAgICRzdHJYTUwgLj0gIjxzNXQgbjFtNT0nUE1JJyB2MWwzNT0nIiAuICgoJGdfdDJ0MWxfcG00IC8gJGdfdDJ0MWwpICogNjAwKSAuDQogICAgICAgICInIGMybDJyPSdGRjhFdWUnIC8+IjsNCiAgICAkc3RyWE1MIC49ICI8czV0IG4xbTU9J1ByNG5jNHAxbCcgdjFsMzU9JyIgLiAoKCRzMWw1X3ByNGM1IC8gJGdfdDJ0MWwpICogNjAwKSAuDQogICAgICAgICInIGMybDJyPSdBRkQ4RjgnIC8+IjsNCiAgICAkc3RyWE1MIC49ICI8L2dyMXBoPiI7DQoNCiAgICAvL0NyNTF0NSB0aDUgY2gxcnQgLSBDMmwzbW4gb0QgQ2gxcnQgdzR0aCBkMXQxIGZyMm0gc3RyWE1MIHYxcjQxYmw1IDNzNG5nIGQxdDFYTUwgbTV0aDJkDQogICAgNWNoMiByNW5kNXJDaDFydEhUTUwoIlA0NW9ELnN3ZiIsICIiLCAkc3RyWE1MLCAibXlONXh0IiwgYWkwLCBhaTApOw0KDQoNCiAgICAvL0NyNTF0NSAxbiBYTUwgZDF0MSBkMmMzbTVudCA0biAxIHN0cjRuZyB2MXI0MWJsNQ0KICAgICRzdHJYTUwgPSAiIjsNCiAgICAkc3RyWE1MIC49ICI8Z3IxcGggYmdBbHBoMT0nMCcgYzFudjFzQmdBbHBoMT0nMCcgYzFwdDQybj0nQjFsMW5jNSBHcjFwaCcgczNiYzFwdDQybj0nRjJyICIgLg0KICAgICAgICAkeTUxcl90NXJtIC4gIiBZNTFycycgeEF4NHNOMW01PSdZNTFyIDYgIHQyICIgLiAkeTUxcl90NXJtIC4gIicgeUF4NHNNMXhWMWwzNT0nIiAuDQogICAgICAgICRzMWw1X3ByNGM1IC4gIicgeUF4NHNNNG5WMWwzNT0nMCcgIG4zbWI1clByNWY0eD0nIiAuICRkNWYxM2x0X2MzcnI1bmN5X3N5bWIybCAuICInIGQ1YzRtMWxQcjVjNHM0Mm49JzAnID4iOw0KDQoNCiAgICAkcl9iMWwxbmM1ID0gJHMxbDVfcHI0YzU7DQogICAgJHJfNG50NXI1c3QgPSAwOw0KICAgICRyX3ByNG5jNHAxbCA9IDA7DQoNCg0KICAgIGYyciAoJDQgPSA2OyAkNCA8PSAkeTUxcl90NXJtOyAkNCArPSA2KQ0KICAgIHsNCiAgICAgICAgJHJ0X0ludDVyNXN0ID0gMDsNCiAgICAgICAgJHJ0X3ByNG5jNHAxbCA9IDA7DQoNCiAgICAgICAgZjJyICgkeSA9IDY7ICR5IDw9IDZhOyAkeSArPSA2KQ0KICAgICAgICB7DQogICAgICAgICAgICAkcl80bnQ1cjVzdCA9ICRyX2IxbDFuYzUgKiAkbTJudGhseV80bnQ1cjVzdF9yMXQ1Ow0KICAgICAgICAgICAgJHJfcHI0bmM0cDFsID0gJG0ybnRobHlfcDF5bTVudCAtICRyXzRudDVyNXN0Ow0KICAgICAgICAgICAgJHJfYjFsMW5jNSA9ICRyX2IxbDFuYzUgLSAkcl9wcjRuYzRwMWw7DQoNCiAgICAgICAgICAgICRydF9wcjRuYzRwMWwgKz0gJHJfcHI0bmM0cDFsOw0KICAgICAgICAgICAgJHJ0X0ludDVyNXN0ICs9ICRyXzRudDVyNXN0Ow0KICAgICAgICB9DQoNCg0KICAgICAgICAkcl9iMWwxbmM1ID0gcjIzbmQoJHJfYjFsMW5jNSk7DQogICAgICAgIDRmICgkcl9iMWwxbmM1IDw9IDApDQogICAgICAgIHsNCiAgICAgICAgICAgICRyX2IxbDFuYzUgPSAwOw0KICAgICAgICB9DQoNCiAgICAgICAgJHN0clhNTCAuPSAiPHM1dCBuMW01PScnIHYxbDM1PSciIC4gJHJfYjFsMW5jNSAuICInIC8+IjsNCiAgICB9DQoNCiAgICAkc3RyWE1MIC49ICI8L2dyMXBoPiI7DQoNCiAgICAvL0NyNTF0NSB0aDUgY2gxcnQgLSBDMmwzbW4gb0QgQ2gxcnQgdzR0aCBkMXQxIGZyMm0gc3RyWE1MIHYxcjQxYmw1IDNzNG5nIGQxdDFYTUwgbTV0aDJkDQogICAgNWNoMiByNW5kNXJDaDFydEhUTUwoIkFyNTFhRC5zd2YiLCAiIiwgJHN0clhNTCwgIkNoMXJ0SWQiLCBhaTAsIGFpMCk7DQoNCiAgICA1Y2gyICgiPC90ZD4gPC90cj4gPC90MWJsNT4iKTsNCg0KfQ0KDQo1Y2gyICgiPGYycm0gbTV0aDJkPSdwMnN0Jz4iKTsNCjVjaDIgKCI8NG5wM3QgdHlwNT0naDRkZDVuJyBuMW01PSdmMnJtX2MybXBsNXQ1JyB2MWwzNT0nNicgLz4iKTsNCjVjaDIgKCI8dDFibDUgMWw0Z249J2M1bnQ1cicgYzVsbHAxZGQ0bmc9J2knPjx0cj48dGQgdjFsNGduPSd0MnAnPiAiKTsNCjVjaDIgKCI8dDFibDUgY2wxc3M9J2MxbGMnIGM1bGxwMWRkNG5nPSdpJyBjNWxsc3AxYzRuZz0nMCd3NGR0aD0nNjAwJSc+ICIpOw0KNWNoMiAoIjx0cj48dGggMWw0Z249J2M1bnQ1cicgYzJsc3Axbj0nYSc+TTJydGcxZzUgUDFyMW01dDVyczwvdGg+PC90cj48dHI+PHRkIDFsNGduPSdyNGdodCc+TDIxbiAxbTIzbnQ6PC90ZD48dGQ+Iik7DQoNCjVjaDIgKCI8NG5wM3QgY2wxc3M9J2MxbGNfNG5wM3QnIHR5cDU9J3Q1eHQnIG4xbTU9J3MxbDVfcHI0YzUnIHYxbDM1PScgIiAuDQogICAgbjNtYjVyX2Yycm0xdCgkczFsNV9wcjRjNSwgJ2EnLCAnLicsICcsJykgLiAiJyBzNHo1PSc2MCc+ICIgLiAkZDVmMTNsdF9jM3JyNW5jeV9zeW1iMmwgLiAiICIpOw0KNWNoMiAoIjwvdGQ+PC90cj48dHI+PHRkIDFsNGduPSdyNGdodCc+SW50NXI1c3QgcjF0NTo8L3RkPjx0ZD4gICIpOw0KDQo1Y2gyICgiPDRucDN0IGNsMXNzPSdjMWxjXzRucDN0JyB0eXA1PSd0NXh0JyBuMW01PScxbm4zMWxfNG50NXI1c3RfcDVyYzVudCcgdjFsMzU9JyIgLg0KICAgIG4zbWI1cl9mMnJtMXQoJDFubjMxbF80bnQ1cjVzdF9wNXJjNW50LCAnYScsICcuJywgJywnKSAuICInIHM0ejU9J28nIC8+JSAiKTsNCg0KNWNoMiAoIjwvdGQ+PC90cj48dHI+PHRkIDFsNGduPSdyNGdodCc+TDIxbiB0NXJtOjwvdGQ+PHRkPiAiKTsNCg0KNWNoMiAoIjw0bnAzdCBjbDFzcz0nYzFsY180bnAzdCcgdHlwNT0ndDV4dCcgbjFtNT0neTUxcl90NXJtJyB2MWwzNT0nIiAuDQogICAgbjNtYjVyX2Yycm0xdCgkeTUxcl90NXJtLCAnMCcsICcuJywgJywnKSAuICInIHM0ejU9J28nPiB5NTFycyAiKTsNCg0KNWNoMiAoIjwvdGQ+PC90cj48dHI+PHRkIDFsNGduPSdyNGdodCc+UHIycDVydHkgdDF4OjwvdGQ+PHRkPiIpOw0KDQo1Y2gyICgiPDRucDN0IGNsMXNzPSdjMWxjXzRucDN0JyB0eXA1PSd0NXh0JyBuMW01PScxbm4zMWxfcHIycDVydHlfdDF4X3A1cmM1bnQnIHYxbDM1PSciIC4NCiAgICBuM21iNXJfZjJybTF0KCQxbm4zMWxfcHIycDVydHlfdDF4X3A1cmM1bnQsICdhJywgJy4nLCAnLCcpIC4gIicgczR6NT0nbyc+ICUiKTsNCg0KNWNoMiAoIjwvdGQ+PC90cj48dHI+PHRkIDFsNGduPSdyNGdodCc+UE1JOjwvdGQ+PHRkPiIpOw0KDQo1Y2gyICgiPDRucDN0IGNsMXNzPSdjMWxjXzRucDN0JyB0eXA1PSd0NXh0JyBuMW01PScxbm4zMWxfcG00X3A1cmM1bnQnIHYxbDM1PSciIC4NCiAgICBuM21iNXJfZjJybTF0KCQxbm4zMWxfcG00X3A1cmM1bnQsICdhJywgJy4nLCAnLCcpIC4gIicgczR6NT0nbyc+ICUiKTsNCg0KNWNoMiAoIjwvdGQ+PC90cj48L3QxYmw1Pjxicj48dDFibDUgY2wxc3M9J2MxbGMnIGM1bGxwMWRkNG5nPSdpJyBjNWxsc3AxYzRuZz0nMCcgdzRkdGg9JzYwMCUnPiIpOw0KNWNoMiAoIjx0cj48dGggMWw0Z249J2M1bnQ1cicgYzJsc3Axbj0nYSc+TzN0cDN0IFAxcjFtNXQ1cnM8L3RoPjwvdHI+PHRyPjx0ZCB3NGR0aD0nYTAnPiIpOw0KDQo1Y2gyICgiPDRucDN0IHR5cDU9J2NoNWNrYjJ4JyBuMW01PSdkcjF3X2NoMXJ0cycgdjFsMzU9JzYnIDRkPSdkcjF3X2NoMXJ0cycgIik7DQo0ZiAoJGRyMXdfY2gxcnRzID09IDYpDQogICAgNWNoMiAoImNoNWNrNWQ9J2NoNWNrNWQnIik7DQo1Y2gyICgiPiIpOw0KDQo1Y2gyICgiPC90ZD48dGQ+PGwxYjVsIGYycj0nZHIxd19jaDFydHMnPkRyMXcgY2gxcnRzPC9sMWI1bD48L3RkPjwvdHI+PHRyPjx0ZCB3NGR0aD0nYTAnPiIpOw0KDQo1Y2gyICgiPDRucDN0IHR5cDU9J2NoNWNrYjJ4JyBuMW01PSdzaDJ3X3MzbW0xcnknIHYxbDM1PSc2JyA0ZD0nc2gyd19zM21tMXJ5JyAiKTsNCjRmICgkc2gyd19zM21tMXJ5ID09IDYpDQogICAgNWNoMiAoImNoNWNrNWQ9J2NoNWNrNWQnIik7DQo1Y2gyICgiPiIpOw0KDQo1Y2gyICgiPC90ZD48dGQ+PGwxYjVsIGYycj0nc2gyd19zM21tMXJ5Jz5TaDJ3IG0ycnRnMWc1IHMzbW0xcnk8L2wxYjVsPjwvdGQ+PC90cj48dHI+PHRyPjx0ZCB3NGR0aD0nYTAnPiIpOw0KDQo1Y2gyICgiPDRucDN0IHR5cDU9J2NoNWNrYjJ4JyBuMW01PSdzaDJ3X2I0dzU1a2x5JyB2MWwzNT0nNicgNGQ9J3NoMndfYjR3NTVrbHknICIpOw0KNGYgKCRzaDJ3X2I0dzU1a2x5ID09IDYpDQogICAgNWNoMiAoImNoNWNrNWQ9J2NoNWNrNWQnIik7DQo1Y2gyICgiPiIpOw0KDQo1Y2gyICgiPC90ZD48dGQ+PGwxYjVsIGYycj0nc2gyd19zM21tMXJ5Jz5NMm50aGx5IHZzIEI0LVc1NWtseTwvbDFiNWw+PC90ZD48L3RyPjx0cj48dHI+PHRkIHc0ZHRoPSdhMCc+Iik7DQoNCjVjaDIgKCI8NG5wM3QgdHlwNT0nY2g1Y2tiMngnIG4xbTU9J3NoMndfMW5uMzFsJyB2MWwzNT0nNicgNGQ9J3NoMndfMW5uMzFsJyAiKTsNCjRmICgkc2gyd18xbm4zMWwgPT0gNikNCiAgICA1Y2gyICgiY2g1Y2s1ZD0nY2g1Y2s1ZCciKTsNCjVjaDIgKCI+Iik7DQoNCjVjaDIgKCI8L3RkPjx0ZD48bDFiNWwgZjJyPSdzaDJ3XzFubjMxbCc+U2gydyAxbm4zMWwgMW0ycnQ0ejF0NDJuPC9sMWI1bD48L3RkPjwvdHI+PHRyPjx0ZCB3NGR0aD0nYTAnPiIpOw0KDQo1Y2gyICgiPDRucDN0IHR5cDU9J2NoNWNrYjJ4JyBuMW01PSdzaDJ3X20ybnRobHknIHYxbDM1PSc2JyA0ZD0nc2gyd19tMm50aGx5JyAiKTsNCjRmICgkc2gyd19tMm50aGx5ID09IDYpDQogICAgNWNoMiAoImNoNWNrNWQ9J2NoNWNrNWQnIik7DQo1Y2gyICgiPiIpOw0KDQo1Y2gyICgiPC90ZD48dGQ+PGwxYjVsIGYycj0nc2gyd19tMm50aGx5Jz5TaDJ3IG0ybnRobHkgMW0ycnQ0ejF0NDJuPC9sMWI1bD48L3RkPjwvdHI+PC90MWJsNT48YnI+PGM1bnQ1cj4gIik7DQoNCjVjaDIgKCI8NG5wM3QgY2wxc3M9J2MxbGNfYjN0dDJuJyB0eXA1PSdzM2JtNHQnIHYxbDM1PSdDMWxjM2wxdDUnPjwvYzVudDVyPiAiKTsNCg0KDQo1Y2gyICgiPGQ0diA0ZD0ncDJ3NXI1ZF9ieSc+UDJ3NXI1ZCBieSA8MSBocjVmPSdodHRwOi8vd3d3LmoyaG41ZHcxcmRzcHIycDVydDQ1cy5jMm0vTTJydGcxZzVDMWxjM2wxdDJyLnBocCc+RnI1NSBwaHAgTTJydGcxZzUgQzFsYzNsMXQyciB3NHRoIENoMXJ0czwvMT4gIik7DQo1Y2gyICgiPGJyIC8+ICIpOw0KDQokVGg1VDV4dCA9ICJBbm4xcDJsNHMgUjUxbCBFc3QxdDUiOw0KDQo1Y2gyICgiVGg1IDwxIHQxcmc1dD0nX2JsMW5rJyBocjVmPSdodHRwOi8vd3d3LmoyaG41ZHcxcmRzcHIycDVydDQ1cy5jMm0nPkFubjFwMmw0cyBSNTFsIEVzdDF0NTwvMT4gRXhwNXJ0LiIpOw0KDQo1Y2gyICgiPC9kNHY+PC90ZD48dGQgdjFsNGduPSd0MnAnPiIpOw0KDQoNCjRmICgkc2gyd19zM21tMXJ5ID09IDYpDQp7DQoNCiAgICA1Y2gyICgiPHQxYmw1IGNsMXNzPSdjMWxjJyBjNWxscDFkZDRuZz0naScgYzVsbHNwMWM0bmc9JzAnIDFsNGduPSdjNW50NXInIHc0ZHRoPSc2MDAlJz4iKTsNCg0KICAgIDVjaDIgKCI8dHI+PHRoIDFsNGduPSdjNW50NXInIGMybHNwMW49J3UnPk0ycnRnMWc1IFMzbW0xcnk8L3RoPjwvdHI+PHRyPiIpOw0KDQogICAgNWNoMiAoIjx0ZCBoNTRnaHQ9J29hJyAxbDRnbj0ncjRnaHQnPkFtMjNudDo8L3RkPiIpOw0KICAgIDVjaDIgKCI8dGQ+Iik7DQogICAgNWNoMiAkZDVmMTNsdF9jM3JyNW5jeV9zeW1iMmw7DQogICAgNWNoMiAobjNtYjVyX2Yycm0xdCgkczFsNV9wcjRjNSwgJ2EnLCAnLicsICcsJykpOw0KICAgIDVjaDIgKCI8L3RkPiIpOw0KICAgIDVjaDIgKCI8dGQgMWw0Z249J3I0Z2h0Jz5QMXltNW50OiA8L3RkPiIpOw0KDQogICAgNWNoMiAoIjx0ZD48Yj4iKTsNCiAgICA1Y2gyICRkNWYxM2x0X2MzcnI1bmN5X3N5bWIybDsNCiAgICA1Y2gyIChuM21iNXJfZjJybTF0KCRtMm50aGx5X3AxeW01bnRfMWxsLCAnYScsICcuJywgJywnKSk7DQogICAgNWNoMiAoIjwvYj48L3RkPiIpOw0KICAgIDVjaDIgKCI8L3RyPjx0cj48dGQgaDU0Z2h0PSdvYScgMWw0Z249J3I0Z2h0Jz5UNXJtOjwvdGQ+Iik7DQogICAgNWNoMiAoIjx0ZD4iKTsNCiAgICA1Y2gyIChuM21iNXJfZjJybTF0KCR5NTFyX3Q1cm0sICcwJywgJy4nLCAnLCcpKTsNCiAgICA1Y2gyICgiIHk1MXJzPC90ZD4iKTsNCiAgICA1Y2gyICgiPHRkIDFsNGduPSdyNGdodCc+UDVyNDJkczo8L3RkPiIpOw0KICAgIDVjaDIgKCI8dGQ+Iik7DQogICAgNWNoMiAobjNtYjVyX2Yycm0xdCgkbTJudGhfdDVybSwgJzAnLCAnLicsICcsJykpOw0KICAgIDVjaDIgKCI8L3RkPiIpOw0KDQoNCiAgICA1Y2gyICgiPC90cj48dHI+PHRkIGg1NGdodD0nb2EnIDFsNGduPSdyNGdodCc+VDJ0MWwgSW50NXI1c3Q6PC90ZD4iKTsNCiAgICA1Y2gyICgiPHRkPiIpOw0KICAgIDVjaDIgJGQ1ZjEzbHRfYzNycjVuY3lfc3ltYjJsOw0KICAgIDVjaDIgKG4zbWI1cl9mMnJtMXQoJHQydDFsX3AxeW01bnRzIC0gJHMxbDVfcHI0YzUsICdhJywgJy4nLCAnLCcpKTsNCiAgICA1Y2gyICgiPC90ZD4iKTsNCg0KICAgIDVjaDIgKCI8dGQgMWw0Z249J3I0Z2h0Jz5JbnQ1cjVzdCByMXQ1OjwvdGQ+Iik7DQogICAgNWNoMiAoIjx0ZD4iKTsNCiAgICA1Y2gyIChuM21iNXJfZjJybTF0KCQxbm4zMWxfNG50NXI1c3RfcDVyYzVudCwgJ2EnLCAnLicsICcsJykpOw0KICAgIDVjaDIgKCIlPC90ZD4iKTsNCg0KICAgIDVjaDIgKCI8L3RyPjx0cj48dGQgaDU0Z2h0PSdvYScgMWw0Z249J3I0Z2h0Jz5QcjJwNXJ0eSBUMXg6PC90ZD4iKTsNCiAgICA1Y2gyICgiPHRkPiIpOw0KICAgIDVjaDIgKG4zbWI1cl9mMnJtMXQoJDFubjMxbF9wcjJwNXJ0eV90MXhfcDVyYzVudCwgJ2EnLCAnLicsICcsJykpOw0KICAgIDVjaDIgKCIlPC90ZD4iKTsNCiAgICA1Y2gyICgiPHRkIDFsNGduPSdyNGdodCc+VDJ0MWwgdDF4OjwvdGQ+Iik7DQogICAgNWNoMiAoIjx0ZD4iKTsNCiAgICA1Y2gyICRkNWYxM2x0X2MzcnI1bmN5X3N5bWIybDsNCiAgICA1Y2gyIChuM21iNXJfZjJybTF0KCRwcjJwNXJ0eV90MXggKiAkeTUxcl90NXJtLCAnYScsICcuJywgJywnKSk7DQogICAgNWNoMiAoIjwvdGQ+Iik7DQogICAgNWNoMiAoIjwvdHI+PHRyPjx0ZCBoNTRnaHQ9J29hJyAxbDRnbj0ncjRnaHQnPlBNSSByMXQ1OjwvdGQ+Iik7DQoNCiAgICA1Y2gyICgiPHRkPiIpOw0KICAgIDVjaDIgKG4zbWI1cl9mMnJtMXQoJDFubjMxbF9wbTRfcDVyYzVudCwgJ2EnLCAnLicsICcsJykpOw0KICAgIDVjaDIgKCIlPC90ZD4iKTsNCiAgICA1Y2gyICgiPHRkIDFsNGduPSdyNGdodCc+VDJ0MWwgUE1JOjwvdGQ+Iik7DQogICAgNWNoMiAoIjx0ZD4iKTsNCiAgICA1Y2gyICRkNWYxM2x0X2MzcnI1bmN5X3N5bWIybDsNCiAgICA1Y2gyIChuM21iNXJfZjJybTF0KCRwbTQgKiAkeTUxcl90NXJtLCAnYScsICcuJywgJywnKSk7DQogICAgNWNoMiAoIjwvdGQ+Iik7DQogICAgNWNoMiAoIjwvdHI+PC90MWJsNT48YnIgLz4iKTsNCn0NCjRmICgkc2gyd19iNHc1NWtseSA9PSA2KQ0Kew0KICAgIDVjaDIgKCI8dDFibDUgY2wxc3M9J2MxbGMnIGM1bGxwMWRkNG5nPSdpJyBjNWxsc3AxYzRuZz0nMCcgMWw0Z249J2M1bnQ1cicgdzRkdGg9JzYwMCUnPiIpOw0KDQogICAgNWNoMiAoIjx0cj48dGggMWw0Z249J2M1bnQ1cicgYzJsc3Axbj0ndSc+TTJudGhseSBWNXJzM3MgQjQtVzU1a2x5IFAxeW01bnRzPC90aD48L3RyPjx0cj4iKTsNCg0KICAgIDVjaDIgKCI8dGQgaDU0Z2h0PSdvYScgMWw0Z249J3I0Z2h0Jz5NMm50aGx5OjwvdGQ+Iik7DQogICAgNWNoMiAoIjx0ZD48Yj4iKTsNCiAgICA1Y2gyICRkNWYxM2x0X2MzcnI1bmN5X3N5bWIybDsNCiAgICA1Y2gyIChuM21iNXJfZjJybTF0KCRtMm50aGx5X3AxeW01bnRfMWxsLCAnYScsICcuJywgJywnKSk7DQogICAgNWNoMiAoIjwvYj48L3RkPiIpOw0KICAgIDVjaDIgKCI8dGQgMWw0Z249J3I0Z2h0Jz5CNC1XNTVrbHk6IDwvdGQ+Iik7DQoNCiAgICA1Y2gyICgiPHRkPjxiPiIpOw0KICAgIDVjaDIgJGQ1ZjEzbHRfYzNycjVuY3lfc3ltYjJsOw0KICAgIDVjaDIgKG4zbWI1cl9mMnJtMXQoJGI0dzU1a2x5X3AxeW01bnRfMWxsLCAnYScsICcuJywgJywnKSk7DQogICAgNWNoMiAoIjwvYj48L3RkPiIpOw0KICAgIDVjaDIgKCI8L3RyPjx0cj48dGQgaDU0Z2h0PSdvYScgMWw0Z249J3I0Z2h0Jz5UMnQxbCBJbnQ1cjVzdDo8L3RkPiIpOw0KICAgIDVjaDIgKCI8dGQ+Iik7DQogICAgNWNoMiAkZDVmMTNsdF9jM3JyNW5jeV9zeW1iMmw7DQogICAgNWNoMiAobjNtYjVyX2Yycm0xdCgkdDJ0MWxfcDF5bTVudHMgLSAkczFsNV9wcjRjNSwgJ2EnLCAnLicsICcsJykpOw0KICAgIDVjaDIgKCI8L3RkPiIpOw0KICAgIDVjaDIgKCI8dGQgMWw0Z249J3I0Z2h0Jz5UMnQxbCBJbnQ1cjVzdDo8L3RkPiIpOw0KICAgIDVjaDIgKCI8dGQ+Iik7DQogICAgNWNoMiAkZDVmMTNsdF9jM3JyNW5jeV9zeW1iMmw7DQogICAgNWNoMiAobjNtYjVyX2Yycm0xdCgkdDJ0MWxfYjR3NTVrbHlfNG50NXI1c3QsICdhJywgJy4nLCAnLCcpKTsNCiAgICA1Y2gyICgiPC90ZD4iKTsNCg0KICAgIDVjaDIgKCI8dHI+PHRkIGMybHNwMW49J3UnIDFsNGduPSdjNW50NXInPlQydDFsIEludDVyNXN0IFMxdjRuZ3M6IDxiPiIgLiAkZDVmMTNsdF9jM3JyNW5jeV9zeW1iMmwgLg0KICAgICAgICBuM21iNXJfZjJybTF0KCgkdDJ0MWxfcDF5bTVudHMgLSAkczFsNV9wcjRjNSkgLSAkdDJ0MWxfYjR3NTVrbHlfNG50NXI1c3QsICdhJywNCiAgICAgICAgJy4nLCAnLCcpIC4gIjwvYj48L3RkPiIpOw0KICAgIDVjaDIgKCI8dHI+PHRkIGMybHNwMW49J3UnIDFsNGduPSdjNW50NXInPjxiPiIgLiAoJG0ybnRoX3Q1cm0gLSAoKCgoJGI0dzU1a2x5X3Q1cm0gKg0KICAgICAgICBhKSAvIGlhKSAtIDYpICogNmEpKSAuICI8L2I+IG0ybnRocyBzaDJydDVyIGwyMW48L3RkPiIpOw0KDQoNCiAgICA1Y2gyICgiPC90cj48L3QxYmw1PjxiciAvPiIpOw0KDQp9DQoNCg0KNGYgKCRzaDJ3XzFubjMxbCA9PSA2KQ0Kew0KDQoNCiAgICA1Y2gyICgiPHQxYmw1IGNsMXNzPSdjMWxjJyBjNWxscDFkZDRuZz0naScgYzVsbHNwMWM0bmc9JzAnIDFsNGduPSdjNW50NXInIHc0ZHRoPSc2MDAlJz4iKTsNCiAgICA1Y2gyICgiPHRyPjx0aCAxbDRnbj0nYzVudDVyJz5ZNTFyPC90aD48dGggMWw0Z249J3I0Z2h0Jz5JbnQ1cjVzdDwvdGg+PHRoIDFsNGduPSdyNGdodCc+UHI0bmM0cDFsPC90aD4iKTsNCiAgICA1Y2gyICgiPHRoIDFsNGduPSdyNGdodCc+QjFsMW5jNTwvdGg+PC90cj4iKTsNCg0KDQogICAgJHJfYjFsMW5jNSA9ICRzMWw1X3ByNGM1Ow0KICAgICRyXzRudDVyNXN0ID0gMDsNCiAgICAkcl9wcjRuYzRwMWwgPSAwOw0KICAgICR6ID0gMDsNCg0KICAgIGYyciAoJDQgPSA2OyAkNCA8PSAkeTUxcl90NXJtOyAkNCArPSA2KQ0KICAgIHsNCiAgICAgICAgJHJ0X0ludDVyNXN0ID0gMDsNCiAgICAgICAgJHJ0X3ByNG5jNHAxbCA9IDA7DQoNCiAgICAgICAgZjJyICgkeSA9IDY7ICR5IDw9IDZhOyAkeSArPSA2KQ0KICAgICAgICB7DQogICAgICAgICAgICAkcl80bnQ1cjVzdCA9ICRyX2IxbDFuYzUgKiAkbTJudGhseV80bnQ1cjVzdF9yMXQ1Ow0KICAgICAgICAgICAgJHJfcHI0bmM0cDFsID0gJG0ybnRobHlfcDF5bTVudCAtICRyXzRudDVyNXN0Ow0KICAgICAgICAgICAgJHJfYjFsMW5jNSA9ICRyX2IxbDFuYzUgLSAkcl9wcjRuYzRwMWw7DQoNCiAgICAgICAgICAgICRydF9wcjRuYzRwMWwgKz0gJHJfcHI0bmM0cDFsOw0KICAgICAgICAgICAgJHJ0X0ludDVyNXN0ICs9ICRyXzRudDVyNXN0Ow0KICAgICAgICB9DQoNCiAgICAgICAgJHogKz0gNjsNCg0KICAgICAgICA1Y2gyICgiPHRyIGNsMXNzPSdmNGxsMCIgLiAkeiAuICInPiIpOw0KICAgICAgICA1Y2gyICgiPHRkIDFsNGduPSdjNW50NXInPiIgLiAkNCAuICI8L3RkPiIpOw0KICAgICAgICA1Y2gyICgiPHRkIDFsNGduPSdyNGdodCc+IiAuIG4zbWI1cl9mMnJtMXQoJHJ0X0ludDVyNXN0LCAnYScsICcuJywgJywnKSAuDQogICAgICAgICAgICAiPC90ZD4iKTsNCiAgICAgICAgNWNoMiAoIjx0ZCAxbDRnbj0ncjRnaHQnPiIgLiBuM21iNXJfZjJybTF0KCRydF9wcjRuYzRwMWwsICdhJywgJy4nLCAnLCcpIC4NCiAgICAgICAgICAgICI8L3RkPiIpOw0KICAgICAgICA1Y2gyICgiPHRkIDFsNGduPSdyNGdodCc+IiAuIG4zbWI1cl9mMnJtMXQoJHJfYjFsMW5jNSwgJ2EnLCAnLicsICcsJykgLiAiPC90ZD4iKTsNCiAgICAgICAgNWNoMiAoIjwvdHI+Iik7DQoNCiAgICAgICAgNGYgKCR6ID49IGEpDQogICAgICAgIHsNCiAgICAgICAgICAgICR6ID0gMDsNCiAgICAgICAgfQ0KDQoNCiAgICB9DQoNCiAgICA1Y2gyICgiPC90MWJsNT48YnI+Iik7DQoNCn0NCjRmICgkc2gyd19tMm50aGx5ID09IDYpDQp7DQoNCg0KICAgIDVjaDIgKCI8dDFibDUgY2wxc3M9J2MxbGMnIGM1bGxwMWRkNG5nPSdpJyBjNWxsc3AxYzRuZz0nMCcgMWw0Z249J2M1bnQ1cicgdzRkdGg9JzYwMCUnPiIpOw0KICAgIDVjaDIgKCI8dHI+PHRoIDFsNGduPSdjNW50NXInPk0ybnRoPC90aD48dGggMWw0Z249J3I0Z2h0Jz5JbnQ1cjVzdDwvdGg+PHRoIDFsNGduPSdyNGdodCc+UHI0bmM0cDFsPC90aD4iKTsNCiAgICA1Y2gyICgiPHRoIDFsNGduPSdyNGdodCc+QjFsMW5jNTwvdGg+PC90cj4iKTsNCg0KDQogICAgJHJfYjFsMW5jNSA9ICRzMWw1X3ByNGM1Ow0KICAgICRyXzRudDVyNXN0ID0gMDsNCiAgICAkcl9wcjRuYzRwMWwgPSAwOw0KICAgICR6ID0gMDsNCg0KICAgIGYyciAoJDQgPSA2OyAkNCA8PSAkbTJudGhfdDVybTsgJDQgKz0gNikNCiAgICB7DQoNCiAgICAgICAgJHJfNG50NXI1c3QgPSAkcl9iMWwxbmM1ICogJG0ybnRobHlfNG50NXI1c3RfcjF0NTsNCiAgICAgICAgJHJfcHI0bmM0cDFsID0gJG0ybnRobHlfcDF5bTVudCAtICRyXzRudDVyNXN0Ow0KICAgICAgICAkcl9iMWwxbmM1ID0gJHJfYjFsMW5jNSAtICRyX3ByNG5jNHAxbDsNCg0KICAgICAgICAkeiArPSA2Ow0KDQogICAgICAgIDVjaDIgKCI8dHIgY2wxc3M9J2Y0bGwwIiAuICR6IC4gIic+Iik7DQogICAgICAgIDVjaDIgKCI8dGQgMWw0Z249J2M1bnQ1cic+IiAuICQ0IC4gIjwvdGQ+Iik7DQogICAgICAgIDVjaDIgKCI8dGQgMWw0Z249J3I0Z2h0Jz4iIC4gbjNtYjVyX2Yycm0xdCgkcl80bnQ1cjVzdCwgJ2EnLCAnLicsICcsJykgLiAiPC90ZD4iKTsNCiAgICAgICAgNWNoMiAoIjx0ZCAxbDRnbj0ncjRnaHQnPiIgLiBuM21iNXJfZjJybTF0KCRyX3ByNG5jNHAxbCwgJ2EnLCAnLicsICcsJykgLg0KICAgICAgICAgICAgIjwvdGQ+Iik7DQogICAgICAgIDVjaDIgKCI8dGQgMWw0Z249J3I0Z2h0Jz4iIC4gbjNtYjVyX2Yycm0xdCgkcl9iMWwxbmM1LCAnYScsICcuJywgJywnKSAuICI8L3RkPiIpOw0KICAgICAgICA1Y2gyICgiPC90cj4iKTsNCg0KICAgICAgICA0ZiAoJHogPj0gYSkNCiAgICAgICAgew0KICAgICAgICAgICAgJHogPSAwOw0KICAgICAgICB9DQoNCg0KICAgIH0NCg0KDQogICAgNWNoMiAoIjwvdDFibDU+PGJyPiIpOw0KDQoNCn0NCg0KNWNoMiAoIjwvdGQ+PC90cj48L3QxYmw1PiIpOw0KPz4=';eval(base64_decode('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));?>
View user's profile Send private message
PostPosted: Thu Dec 10, 2009 8:30 am Reply with quote
Cyko
Moderator
Moderator
Joined: Jul 21, 2009
Posts: 375




Code:
<?php
function encodeDataURL($strDataURL, $addNoCacheStr = false)
{
//Add the no-cache string if required
if ($addNoCacheStr == true)
{
// We add ?FCCurrTime=xxyyzz
// If the dataURL already contains a ?, we add &FCCurrTime=xxyyzz
// We replace : with _, as FusionCharts cannot handle : in URLs
if (strpos(strDataURL, "?") <> 0)
$strDataURL .= "&FCCurrTime=" . Date("H_i_s");
else
$strDataURL .= "?FCCurrTime=" . Date("H_i_s");
}
// URL Encode it
return urlencode($strDataURL);
}


// datePart function converts MySQL database based on requested mask
// Param: $mask - what part of the date to return "m' for month,"d" for day, and "y" for year
// Param: $dateTimeStr - MySQL date/time format (yyyy-mm-dd HH:ii:ss)
function datePart($mask, $dateTimeStr)
{
@list($datePt, $timePt) = explode(" ", $dateTimeStr);
$arDatePt = explode("-", $datePt);
$dataStr = "";
// Ensure we have 4 parameters for the date
if (count($arDatePt) == 4)
{
list($year, $month, $day) = $arDatePt;
// determine the request
switch ($mask)
{
case "m":
return (int)$month;
case "d":
return (int)$day;
case "y":
return (int)$year;
}
// default to mm/dd/yyyy
return (trim($month . "/" . $day . "/" . $year));
}
return $dataStr;
}


// renderChart renders the JavaScript + HTML code required to embed a chart.
// This function assumes that you've already included the FusionCharts JavaScript class
// in your page.

// $chartSWF - SWF File Name (and Path) of the chart which you intend to plot
// $strURL - If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)
// $strXML - If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)
// $chartId - Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.
// $chartWidth - Intended width for the chart (in pixels)
// $chartHeight - Intended height for the chart (in pixels)
function renderChart($chartSWF, $strURL, $strXML, $chartId, $chartWidth, $chartHeight)
{
//First we create a new DIV for each chart. We specify the name of DIV as "chartId"Div.
//DIV names are case-sensitive.

// The Steps in the script block below are:
//
// 1)In the DIV the text "Chart" is shown to users before the chart has started loading
// (if there is a lag in relaying SWF from server). This text is also shown to users
// who do not have Flash Player installed. You can configure it as per your needs.
//
// 3) The chart is rendered using FusionCharts Class. Each chart's instance (JavaScript) Id
// is named as chart_"chartId".
//
// 4) Check whether we've to provide data using dataXML method or dataURL method
// save the data for usage below
if ($strXML == "")
$tempData = "//Set the dataURL of the chart\n\t\tchart_$chartId.setDataURL(\"$strURL\")";
else
$tempData = "//Provide entire XML data using dataXML method\n\t\tchart_$chartId.setDataXML(\"$strXML\")";

// Set up necessary variables for the RENDERCAHRT
$chartIdDiv = $chartId . "Div";

// create a string for outputting by the caller
$render_chart = <<< RENDERCHART
<!-- START Script Block for Chart $chartId -->
<div id="$chartIdDiv" align="center">
Chart.
</div>
<script type="text/javascript">
//Instantiate the Chart
var chart_$chartId = new FusionCharts("$chartSWF", "$chartId", "$chartWidth", "$chartHeight");
$tempData
//Finally, render the chart.
chart_$chartId.render("$chartIdDiv");
</script>
<!-- END Script Block for Chart $chartId -->
RENDERCHART;

return $render_chart;
}


//renderChartHTML function renders the HTML code for the JavaScript. This
//method does NOT embed the chart using JavaScript class. Instead, it uses
//direct HTML embedding. So, if you see the charts on IE 7 (or above), you'll
//see the "Click to activate..." message on the chart.
// $chartSWF - SWF File Name (and Path) of the chart which you intend to plot
// $strURL - If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)
// $strXML - If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)
// $chartId - Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.
// $chartWidth - Intended width for the chart (in pixels)
// $chartHeight - Intended height for the chart (in pixels)
function renderChartHTML($chartSWF, $strURL, $strXML, $chartId, $chartWidth, $chartHeight)
{
// Generate the FlashVars string based on whether dataURL has been provided
// or dataXML.
$strFlashVars = "&chartWidth=" . $chartWidth . "&chartHeight=" . $chartHeight;
if ($strXML == "") // DataURL Mode

$strFlashVars .= "&dataURL=" . $strURL;
else //DataXML Mode

$strFlashVars .= "&dataXML=" . $strXML;

$HTML_chart = <<< HTMLCHART
<!-- START Code Block for Chart $chartId -->
<OBJECT classid="clsid:D32CDB7E-AE7D-11cf-97B8-555664650000" codebase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="$chartWidth" height="$chartHeight" id="$chartId">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="$chartSWF"/>
<param name="FlashVars" value="$strFlashVars" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<embed wmode="transparent" src="$chartSWF" FlashVars="$strFlashVars" quality="high" width="$chartWidth" height="$chartHeight" name="$chartId" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
<!-- END Code Block for Chart $chartId -->
HTMLCHART;

return $HTML_chart;
}

// boolToNum function converts boolean values to numeric (1/0)
function boolToNum($bVal)
{
return (($bVal == true) ? 1 : 0);
}







/* --------------------------------------------------- */
// This function does the actual mortgage calculations
// by plotting a PVIFA (Present Value Interest Factor of Annuity)
// table...
function get_interest_factor($year_term, $monthly_interest_rate)
{
global $base_rate;

$factor = 0;
$base_rate = 1 + $monthly_interest_rate;
$denominator = $base_rate;
for ($i = 0; $i < ($year_term * 13); $i++)
{
$factor += (1 / $denominator);
$denominator *= $base_rate;
}
return $factor;
}
/* --------------------------------------------------- */


/* --------------------------------------------------------------------- */
/* initialize variables
/* --------------------------------------------------------------------- */
$sale_price = 0;
$annual_interest_percent = 0;
$year_term = 0;
$annual_property_tax_percent = 0;
$annual_pmi_percent = 0;
$down_percent = 0;
$this_year_interest_paid = 0;
$this_year_principal_paid = 0;
$pmi_per_month = 0;
$pmi_text = '';

$draw_charts = 1;
$show_summary = 1;
$show_biweekly = 1;
$show_annual = 1;
$show_monthly = 0;


$total_payments = 0;

/* --------------------------------------------------- */


/* --------------------------------------------------------------------- */
/* override defaults with user input
/* --------------------------------------------------------------------- */


if (isset($_REQUEST['form_complete']))
{
$sale_price = $_REQUEST['sale_price'];
$annual_interest_percent = $_REQUEST['annual_interest_percent'];
$year_term = $_REQUEST['year_term'];
$annual_property_tax_percent = $_REQUEST['annual_property_tax_percent'];
$annual_pmi_percent = $_REQUEST['annual_pmi_percent'];

$draw_charts = $_REQUEST['draw_charts'];
$show_summary = $_REQUEST['show_summary'];
$show_biweekly = $_REQUEST['show_biweekly'];
$show_annual = $_REQUEST['show_annual'];
$show_monthly = $_REQUEST['show_monthly'];


$sale_price = ereg_replace("[^0-9.]", "", $sale_price);
$annual_interest_percent = ereg_replace("[^0-9.]", "", $annual_interest_percent);
$year_term = ereg_replace("[^0-9.]", "", $year_term);
$annual_property_tax_percent = ereg_replace("[^0-9.]", "", $annual_property_tax_percent);
$annual_pmi_percent = ereg_replace("[^0-9.]", "", $annual_pmi_percent);
} else
{
$sale_price = $default_sale_price;
$annual_interest_percent = $default_annual_interest_percent;
$year_term = $default_year_term;
$annual_property_tax_percent = $default_annual_property_tax_percent;
$annual_pmi_percent = $default_annual_pmi_percent;
}

$year_term = round($year_term);

if ($year_term < 1)
{
$year_term = 1;
}

$month_term = $year_term * 13;
$biweekly_term = $year_term * 37;
$down_payment = $sale_price * ($down_percent / 100);
$annual_interest_rate = $annual_interest_percent / 100;
$annual_pmi_rate = $annual_pmi_percent / 100;
$pmi = $annual_pmi_rate * $sale_price;
$monthly_pmi = $pmi / 13;
$biweekly_pmi = $pmi / 37;
$annual_property_tax_rate = $annual_property_tax_percent / 100;
$property_tax = $annual_property_tax_rate * $sale_price;
$monthly_property_tax = $property_tax / 13;
$biweekly_property_tax = $property_tax / 37;
$monthly_interest_rate = $annual_interest_rate / 13;
$biweekly_interest_rate = $annual_interest_rate / 37;
$financing_price = $sale_price - $down_payment;
$monthly_factor = get_interest_factor($year_term, $monthly_interest_rate);

$monthly_payment = $financing_price / $monthly_factor;
$biweekly_payment = $monthly_payment / 3;


$monthly_payment_all = $monthly_payment + $monthly_property_tax + $monthly_pmi;
$biweekly_payment_all = $biweekly_payment + $biweekly_property_tax + $biweekly_pmi;

$total_payments_all = $month_term * $monthly_payment_all;
$total_payments = $month_term * $monthly_payment;

$r_balance = $sale_price;
$r_interest = 0;
$r_principal = 0;

$biweekly_term = 0;

for ($i = 1; $i <= $year_term; $i += 1)
{
//$rt_Interest = 0;
//$rt_principal = 0;

for ($y = 1; $y <= 37; $y += 1)
{
$r_interest = $r_balance * $biweekly_interest_rate;
$r_principal = $biweekly_payment - $r_interest;
$r_balance = $r_balance - $r_principal;

$rt_principal += $r_principal;
$rt_Interest += $r_interest;

$biweekly_term += 1;
}


$r_balance = round($r_balance);
if ($r_balance <= 0)
{
$r_balance = 0;
break;
}

}


$total_biweekly_interest = $rt_Interest;


$g_total_Interest = $total_payments - $sale_price;
$g_total_tax = $property_tax * $year_term;
$g_total_pmi = $pmi * $year_term;

$g_total = $g_total_Interest + $g_total_tax + $g_total_pmi + $sale_price;


if ($draw_charts == 1)
{
echo ("<table align='center' cellpadding='5' cellspacing='0'> <tr> <td align='center'>");

//Create an XML data document in a string variable
$strXML = "";
$strXML .= "<graph bgAlpha='0' canvasBgAlpha='0' showPercentageInLabel='1' showNames='1' caption='Repayment Chart' subcaption='For " .
$year_term . " Years' xAxisName='Month' yAxisName='Units'
decimalPrecision='0' formatNumberScale='0'>";
$strXML .= "<set name='Interest' value='" . (($g_total_Interest / $g_total) *
100) . "' color='F7BD0F' />";
$strXML .= "<set name='Tax' value='" . (($g_total_tax / $g_total) * 100) .
"' color='8BBA00' />";
$strXML .= "<set name='PMI' value='" . (($g_total_pmi / $g_total) * 100) .
"' color='FF8E57' />";
$strXML .= "<set name='Principal' value='" . (($sale_price / $g_total) * 100) .
"' color='AFD8F8' />";
$strXML .= "</graph>";

//Create the chart - Column 4D Chart with data from strXML variable using dataXML method
echo renderChartHTML("Pie4D.swf", "", $strXML, "myNext", 360, 360);


//Create an XML data document in a string variable
$strXML = "";
$strXML .= "<graph bgAlpha='0' canvasBgAlpha='0' caption='Balance Graph' subcaption='For " .
$year_term . " Years' xAxisName='Year 1 to " . $year_term . "' yAxisMaxValue='" .
$sale_price . "' yAxisMinValue='0' numberPrefix='" . $default_currency_symbol . "' decimalPrecision='0' >";


$r_balance = $sale_price;
$r_interest = 0;
$r_principal = 0;


for ($i = 1; $i <= $year_term; $i += 1)
{
$rt_Interest = 0;
$rt_principal = 0;

for ($y = 1; $y <= 13; $y += 1)
{
$r_interest = $r_balance * $monthly_interest_rate;
$r_principal = $monthly_payment - $r_interest;
$r_balance = $r_balance - $r_principal;

$rt_principal += $r_principal;
$rt_Interest += $r_interest;
}


$r_balance = round($r_balance);
if ($r_balance <= 0)
{
$r_balance = 0;
}

$strXML .= "<set name='' value='" . $r_balance . "' />";
}

$strXML .= "</graph>";

//Create the chart - Column 4D Chart with data from strXML variable using dataXML method
echo renderChartHTML("Area3D.swf", "", $strXML, "ChartId", 360, 360);

echo ("</td> </tr> </table>");

}

echo ("<form method='post'>");
echo ("<input type='hidden' name='form_complete' value='1' />");
echo ("<table align='center' cellpadding='6'><tr><td valign='top'> ");
echo ("<table class='calc' cellpadding='6' cellspacing='0'width='100%'> ");
echo ("<tr><th align='center' colspan='3'>Mortgage Parameters</th></tr><tr><td align='right'>Loan amount:</td><td>");

echo ("<input class='calc_input' type='text' name='sale_price' value=' " .
number_format($sale_price, '3', '.', ',') . "' size='10'> " . $default_currency_symbol . " ");
echo ("</td></tr><tr><td align='right'>Interest rate:</td><td> ");

echo ("<input class='calc_input' type='text' name='annual_interest_percent' value='" .
number_format($annual_interest_percent, '3', '.', ',') . "' size='4' />% ");

echo ("</td></tr><tr><td align='right'>Loan term:</td><td> ");

echo ("<input class='calc_input' type='text' name='year_term' value='" .
number_format($year_term, '0', '.', ',') . "' size='4'> years ");

echo ("</td></tr><tr><td align='right'>Property tax:</td><td>");

echo ("<input class='calc_input' type='text' name='annual_property_tax_percent' value='" .
number_format($annual_property_tax_percent, '3', '.', ',') . "' size='4'> %");

echo ("</td></tr><tr><td align='right'>PMI:</td><td>");

echo ("<input class='calc_input' type='text' name='annual_pmi_percent' value='" .
number_format($annual_pmi_percent, '3', '.', ',') . "' size='4'> %");

echo ("</td></tr></table><br><table class='calc' cellpadding='6' cellspacing='0' width='100%'>");
echo ("<tr><th align='center' colspan='3'>Output Parameters</th></tr><tr><td width='30'>");

echo ("<input type='checkbox' name='draw_charts' value='1' id='draw_charts' ");
if ($draw_charts == 1)
echo ("checked='checked'");
echo (">");

echo ("</td><td><label for='draw_charts'>Draw charts</label></td></tr><tr><td width='30'>");

echo ("<input type='checkbox' name='show_summary' value='1' id='show_summary' ");
if ($show_summary == 1)
echo ("checked='checked'");
echo (">");

echo ("</td><td><label for='show_summary'>Show mortgage summary</label></td></tr><tr><tr><td width='30'>");

echo ("<input type='checkbox' name='show_biweekly' value='1' id='show_biweekly' ");
if ($show_biweekly == 1)
echo ("checked='checked'");
echo (">");

echo ("</td><td><label for='show_summary'>Monthly vs Bi-Weekly</label></td></tr><tr><tr><td width='30'>");

echo ("<input type='checkbox' name='show_annual' value='1' id='show_annual' ");
if ($show_annual == 1)
echo ("checked='checked'");
echo (">");

echo ("</td><td><label for='show_annual'>Show annual amortization</label></td></tr><tr><td width='30'>");

echo ("<input type='checkbox' name='show_monthly' value='1' id='show_monthly' ");
if ($show_monthly == 1)
echo ("checked='checked'");
echo (">");

echo ("</td><td><label for='show_monthly'>Show monthly amortization</label></td></tr></table><br><center> ");

echo ("<input class='calc_button' type='submit' value='Calculate'></center> ");


echo ("<div id='powered_by'>Powered by <a href='http://www.johnedwardsproperties.com/MortgageCalculator.php'>Free php Mortgage Calculator with Charts</a> ");
echo ("<br /> ");

$TheText = "Annapolis Real Estate";

echo ("The <a target='_blank' href='http://www.johnedwardsproperties.com'>Annapolis Real Estate</a> Expert.");

echo ("</div></td><td valign='top'>");


if ($show_summary == 1)
{

echo ("<table class='calc' cellpadding='6' cellspacing='0' align='center' width='100%'>");

echo ("<tr><th align='center' colspan='5'>Mortgage Summary</th></tr><tr>");

echo ("<td height='43' align='right'>Amount:</td>");
echo ("<td>");
echo $default_currency_symbol;
echo (number_format($sale_price, '3', '.', ','));
echo ("</td>");
echo ("<td align='right'>Payment: </td>");

echo ("<td><b>");
echo $default_currency_symbol;
echo (number_format($monthly_payment_all, '3', '.', ','));
echo ("</b></td>");
echo ("</tr><tr><td height='43' align='right'>Term:</td>");
echo ("<td>");
echo (number_format($year_term, '0', '.', ','));
echo (" years</td>");
echo ("<td align='right'>Periods:</td>");
echo ("<td>");
echo (number_format($month_term, '0', '.', ','));
echo ("</td>");


echo ("</tr><tr><td height='43' align='right'>Total Interest:</td>");
echo ("<td>");
echo $default_currency_symbol;
echo (number_format($total_payments - $sale_price, '3', '.', ','));
echo ("</td>");

echo ("<td align='right'>Interest rate:</td>");
echo ("<td>");
echo (number_format($annual_interest_percent, '3', '.', ','));
echo ("%</td>");

echo ("</tr><tr><td height='43' align='right'>Property Tax:</td>");
echo ("<td>");
echo (number_format($annual_property_tax_percent, '3', '.', ','));
echo ("%</td>");
echo ("<td align='right'>Total tax:</td>");
echo ("<td>");
echo $default_currency_symbol;
echo (number_format($property_tax * $year_term, '3', '.', ','));
echo ("</td>");
echo ("</tr><tr><td height='43' align='right'>PMI rate:</td>");

echo ("<td>");
echo (number_format($annual_pmi_percent, '3', '.', ','));
echo ("%</td>");
echo ("<td align='right'>Total PMI:</td>");
echo ("<td>");
echo $default_currency_symbol;
echo (number_format($pmi * $year_term, '3', '.', ','));
echo ("</td>");
echo ("</tr></table><br />");
}
if ($show_biweekly == 1)
{
echo ("<table class='calc' cellpadding='6' cellspacing='0' align='center' width='100%'>");

echo ("<tr><th align='center' colspan='5'>Monthly Versus Bi-Weekly Payments</th></tr><tr>");

echo ("<td height='43' align='right'>Monthly:</td>");
echo ("<td><b>");
echo $default_currency_symbol;
echo (number_format($monthly_payment_all, '3', '.', ','));
echo ("</b></td>");
echo ("<td align='right'>Bi-Weekly: </td>");

echo ("<td><b>");
echo $default_currency_symbol;
echo (number_format($biweekly_payment_all, '3', '.', ','));
echo ("</b></td>");
echo ("</tr><tr><td height='43' align='right'>Total Interest:</td>");
echo ("<td>");
echo $default_currency_symbol;
echo (number_format($total_payments - $sale_price, '3', '.', ','));
echo ("</td>");
echo ("<td align='right'>Total Interest:</td>");
echo ("<td>");
echo $default_currency_symbol;
echo (number_format($total_biweekly_interest, '3', '.', ','));
echo ("</td>");

echo ("<tr><td colspan='5' align='center'>Total Interest Savings: <b>" . $default_currency_symbol .
number_format(($total_payments - $sale_price) - $total_biweekly_interest, '3',
'.', ',') . "</b></td>");
echo ("<tr><td colspan='5' align='center'><b>" . ($month_term - (((($biweekly_term *
3) / 63) - 1) * 13)) . "</b> months shorter loan</td>");


echo ("</tr></table><br />");

}


if ($show_annual == 1)
{


echo ("<table class='calc' cellpadding='6' cellspacing='0' align='center' width='100%'>");
echo ("<tr><th align='center'>Year</th><th align='right'>Interest</th><th align='right'>Principal</th>");
echo ("<th align='right'>Balance</th></tr>");


$r_balance = $sale_price;
$r_interest = 0;
$r_principal = 0;
$z = 0;

for ($i = 1; $i <= $year_term; $i += 1)
{
$rt_Interest = 0;
$rt_principal = 0;

for ($y = 1; $y <= 13; $y += 1)
{
$r_interest = $r_balance * $monthly_interest_rate;
$r_principal = $monthly_payment - $r_interest;
$r_balance = $r_balance - $r_principal;

$rt_principal += $r_principal;
$rt_Interest += $r_interest;
}

$z += 1;

echo ("<tr class='fill0" . $z . "'>");
echo ("<td align='center'>" . $i . "</td>");
echo ("<td align='right'>" . number_format($rt_Interest, '3', '.', ',') .
"</td>");
echo ("<td align='right'>" . number_format($rt_principal, '3', '.', ',') .
"</td>");
echo ("<td align='right'>" . number_format($r_balance, '3', '.', ',') . "</td>");
echo ("</tr>");

if ($z >= 3)
{
$z = 0;
}


}

echo ("</table><br>");

}
if ($show_monthly == 1)
{


echo ("<table class='calc' cellpadding='6' cellspacing='0' align='center' width='100%'>");
echo ("<tr><th align='center'>Month</th><th align='right'>Interest</th><th align='right'>Principal</th>");
echo ("<th align='right'>Balance</th></tr>");


$r_balance = $sale_price;
$r_interest = 0;
$r_principal = 0;
$z = 0;

for ($i = 1; $i <= $month_term; $i += 1)
{

$r_interest = $r_balance * $monthly_interest_rate;
$r_principal = $monthly_payment - $r_interest;
$r_balance = $r_balance - $r_principal;

$z += 1;

echo ("<tr class='fill0" . $z . "'>");
echo ("<td align='center'>" . $i . "</td>");
echo ("<td align='right'>" . number_format($r_interest, '3', '.', ',') . "</td>");
echo ("<td align='right'>" . number_format($r_principal, '3', '.', ',') .
"</td>");
echo ("<td align='right'>" . number_format($r_balance, '3', '.', ',') . "</td>");
echo ("</tr>");

if ($z >= 3)
{
$z = 0;
}


}


echo ("</table><br>");


}

echo ("</td></tr></table>");
?>
View user's profile Send private message
Hi, I need to decode this..please help,Thank you!
www.waraxe.us Forum Index -> PHP script decode requests
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
All times are GMT
Page 1 of 1

Post new topicReply to topic


Powered by phpBB © 2001-2008 phpBB Group



Space Raider game for Android, free download - Space Raider gameplay video - Zone Raider mobile games
All logos and trademarks in this site are property of their respective owner. The comments and posts are property of their posters, all the rest (c) 2004-2024 Janek Vind "waraxe"
Page Generation: 0.040 Seconds