LyoqCiogQGZpbGUgV2lmaV9tc2cuaAoqIEBicmllZiDM4bmpd2lmacno1sO1xM/7z6K907/aCioKKiBDb3B5cmlnaHQgKEMpIDIwMTcgU2FuZWNoaXBzIFRlY2hub2xvZ3kgQ28uLCBMdGQuCiogQGF1dGhvciBMaW54dSBHZWJpbgoqCiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwoqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKI2lmbmRlZiBfX1dJRklfTVNHX0hfXwojZGVmaW5lIF9fV0lGSV9NU0dfSF9fCgojaW5jbHVkZSAibWVzc2FnZS5oIgojaW5jbHVkZSAid2lmaS5oIgoKCi8qKgoqIEBicmllZiC2qNLld2lmac/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9CQVNFIMno1sPW93NzaWS1xLv5sb6yzsr9z/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX1NTSURfTSDJ6NbDuLFzc2lktcS7+bG+ss7K/c/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9DTE9TRSC52LHVd2lmac/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9PUEVOIL+qxvR3aWZpz/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX1JFU1RBUlQg1tjG9HdpZmnP+8+iCiAqIEBwYXJhbSBNU0dfQ01EX1dJRklfQURWQU5DRUQgd2lmabXEuN+8trLOyv3J6NbDz/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX1dQUyC/qsb0V1BTuabE3M/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9XUFNfVVAgV1BTxKO/6beiwLS1xFdQU8b0tq/P+8+iCiAqIEBwYXJhbSBNU0dfQ01EX1dJRklfV1BTX0RPV04gV1BTxKO/6beiwLS1xFdQUyC52LHVz/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX1NMRUVQIFdFQlVJyejWw8uvw9/KsbOkz/vPogogKiBAcGFyYW0gTVNHX0NNRF9DQVBUVVJFX1NUQVRJT04gsunRr3N0YbXEway908fpv/bP+8+iCiAqIEBwYXJhbSBNU0dfQ01EX1dJRklfQ09WRVJBR0UgyejWw3dpZmm1xLiyuMe3ts6nz/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX01BQyDJ6NbDbWFjuf3Cy7mmxNzP+8+iCiAqIEBwYXJhbSBNU0dfQ01EX1VTQl9DSEFSR0lOR19DSEFOR0VEIMf9tq+87LLitb11c2Kz5LXn17TMrLHku6/Jz7Goz/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX1NUQVRJT05fT1BFTiC08r+qYXBzdGG5psTcz/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX1NUQVRJT05fQ0xPU0Ugudix1WFwc3RhuabE3M/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9TVEFUSU9OX0NMT1NFX09QRU5fTVNTSUQgtPK/qmFwc3Rho6y52LHVtuBzc2lkz/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX1NUQVRJT05fU0NBTiDJqMPoyMi148/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9TVEFUSU9OX0NPTk5FQ1Qgway908jItePP+8+iCiAqIEBwYXJhbSBNU0dfQ01EX1dJRklfU1RBVElPTl9DT05ORUNUX1RJTUVPVVQgway907OsyrG1xLSmwO3P+8+iCiAqIEBwYXJhbSBNU0dfQ01EX1dJRklfU1RBVElPTl9TSU1fSU5JVF9USU1FUl9QUk9DRVNTILLp0a9zaW2/qNPQzt7G9NPDtcS2qMqxxvfP+8+iCiAqIEBwYXJhbSBNU0dfQ01EX1dJRklfU1RBVElPTl9HRVRfU0NBTl9SRVNVTFRTX1RJTUVSX1BST0NFU1Mgd3BhX3N1cHBsaWNhbnTW97avyajD6M/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9TVEFUSU9OX0RJU0NPTk5FQ1Qg1ve2r7bPv6rV/dTaway907XEyMi148/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9TVEFUSU9OX1NQT1RfVVBEQVRFILj80MLIyLXjwdCx7c/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9TVEFUSU9OX0VWRU5UX0NPTk5FQ1RJTkcgd3BhX3N1cHBsaWNhbnTV/dTas6LK1MGsvdPKwrz+z/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX1NUQVRJT05fRVZFTlRfQ09OTkVDVEVEIGFwc3Rh0+vIyLXjway907PJuabNqNaqz/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX1NUQVRJT05fRVZFTlRfRElTQ09OTkVDVEVEIGFwc3Rh0+vIyLXjts+/qsGsvdPNqNaqz/vPogogKiBAcGFyYW0gTVNHX0NNRF9CTENfT1BFTl9XSUZJU1RBVElPTl9BQ0NFU1MgYmxjt6LLzbXEway907PJuaajrHN0YXRpb261xGlw0tG31sXktb3P+8+iCiAqIEBwYXJhbSBNU0dfQ01EX0JMQ19PUEVOX1dJRklTVEFUSU9OX0FDQ0VTUyBibGO3osC0z/vPorTyv6phcHN0YcGsvdPP+8+iCiAqIEBwYXJhbSBNU0dfQ01EX0JMQ19DTE9TRV9XSUZJU1RBVElPTl9BQ0NFU1MgYmxjt6LAtM/7z6K2z7+qYXBzdGHBrL3Tz/vPogogKiBAcGFyYW0gTVNHX0NNRF9XSUZJX1NUQVRJT05fTk9fQVZBSUxBQkxFX0FQIGFwc3Rhzt7Qp8/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9TVEFUSU9OX0VORCBhcHN0YXRpb261xM/7z6K3ts6nZW5kCiAqIEBwYXJhbSBNU0dfQ01EX1dJRklfVFNXX1NFVCDJ6NbDtqjKscuvw9+7vdDRtcTP+8+iCiAqIEBwYXJhbSBNU0dfQ01EX1dJRklfVFNXX0NMT1NFILnYsdW2qMqxy6/D37u90NG5psTctcTP+8+iCiAqIEBwYXJhbSBNU0dfQ01EX1JUQ19USU1FX1VQREFURSC4/NDC0OjW2NDCyejWw7aoyrHLr8Pfu73Q0c/7z6IKICogQHBhcmFtIE1TR19DTURfV0lGSV9SRVNFVF9USU1FUiBtbWmwtLz81tjQwsno1sPLr8PfdGltZXIKKi8KZW51bSB3aWZpX21zZ19jbWQgewoJTVNHX0NNRF9XSUZJX0NGR19BUCA9IE1TR19DTURfV0lGSV9CQVNFLCAvL8no1sPW93NzaWS1xLv5sb6yzsr9tcTP+8+iNDAwMQoJTVNHX0NNRF9XSUZJX0NGR19BUDIsIC8vyejWw7ixc3NpZLXEu/mxvrLOyv21xM/7z6IKCS8vs/1NTUnG5Mv7xKO/6bK706a4w7SmwO282bnYu/q1xMLfvK2jrNPJTU1JzOG5qTG49rnYu/qyu7GjtOZOVqOs0OjSqrXExKO/6bbByKHF0LbPyse38bzZudi7+ry0v8kKCS8vTVNHX0NNRF9XSUZJX0NMT1NFX0ZBU1QsICAgICAgICAgICAgIC8vyejWw7/sy9m52Lv6tcTP+8+iCglNU0dfQ01EX1dJRklfQ0xPU0UsICAgICAgICAgICAgICAgICAgICAvL7nYsdV3aWZptcTP+8+iCglNU0dfQ01EX1dJRklfT1BFTiwgICAgICAgICAgICAgICAgICAgICAvL7+qxvR3aWZptcTP+8+iCglNU0dfQ01EX1dJRklfRk9SQ0VfUkVTVEFSVCwgICAgICAgICAgICAvL0NyYXNouvPHv9bG1tjG9HdpZmm1xM/7z6IKCU1TR19DTURfV0lGSV9BRFZBTkNFRCwgICAgICAgICAgICAgICAgIC8vd2lmabXEuN+8trLOyv3J6NbDz/vPogoJTVNHX0NNRF9XSUZJX1dQUywgICAgICAgICAgICAgICAgICAgICAgLy+/qsb0V1BTuabE3KOsMrfW1tPX1LavudijrLnKsrvQ6NKqudix1c/7z6IKCU1TR19DTURfV0lGSV9XUFNfVVAsICAgICAgICAgICAgICAgICAgIC8vV1BTxKO/6beiwLS1xFdQU8b0tq+1xM/7z6IKCU1TR19DTURfV0lGSV9XUFNfRE9XTiwgICAgICAgICAgICAgICAgIC8vV1BTxKO/6beiwLS1xFdQUyC52LHVtcTP+8+iCglNU0dfQ01EX1dJRklfU0xFRVAsICAgICAgICAgICAgICAgICAgICAvL1dFQlVJyejWw8uvw9/KsbOktcTP+8+iCglNU0dfQ01EX0NBUFRVUkVfU1RBVElPTiwgICAgICAgICAgICAgICAvL7Lp0a9zdGG1xMGsvdPH6b/2CglNU0dfQ01EX1dJRklfQ09WRVJBR0UsICAgICAgICAgICAgICAgICAvL8no1sN3aWZptcS4srjHt7bOpwoJTVNHX0NNRF9XSUZJX01BQywgICAgICAgICAgICAgICAgICAgICAgLy/J6NbDbWFjuf3Cy7mmxNwKCU1TR19DTURfV0lGSV9DSEFOTkVMX0ZPTExPVywgICAgICAgICAgIC8vyejWw3dpZmkgQVDQxbXAuPrL5lNUQQoKCU1TR19DTURfVVNCX0NIQVJHSU5HX0NIQU5HRUQsICAgICAgICAgIC8vx/22r7zssuK1vXVzYrPktefXtMysseS7r8nPsajP+8+iCgoJLy9mb3IgYXBzdGF0aW9uCglNU0dfQ01EX1dJRklfU1RBVElPTl9PUEVOLCAgICAgICAgICAgICAvL7Tyv6phcHN0YbmmxNwKCU1TR19DTURfV0lGSV9TVEFUSU9OX09QRU5fU1VDQ0VTUywgICAvLzB4NDAxMAoJTVNHX0NNRF9XSUZJX1NUQVRJT05fT1BFTl9GQUlMLAoJTVNHX0NNRF9XSUZJX1NUQVRJT05fQ0xPU0UsICAgICAgICAgICAgLy+52LHVYXBzdGG5psTcCglNU0dfQ01EX1dJRklfU1RBVElPTl9DTE9TRV9TVUNDRVNTLAoJTVNHX0NNRF9XSUZJX1NUQVRJT05fQ0xPU0VfT1BFTl9NU1NJRCwgLy+08r+qYXBzdGGjrLnYsdW24HNzaWQKCU1TR19DTURfV0lGSV9TVEFUSU9OX1NDQU4sICAgICAgICAgICAgIC8vyajD6MjIteMKCU1TR19DTURfV0lGSV9TVEFUSU9OX0NPTk5FQ1QsICAgICAgICAgIC8vway908jIteMKCU1TR19DTURfV0lGSV9TVEFUSU9OX0NPTk5FQ1RfVElNRU9VVCwgIC8vway907OsyrG1xLSmwO3P+8+iCgoJTVNHX0NNRF9XSUZJX1NUQVRJT05fU0lNX0lOSVRfVElNRVJfUFJPQ0VTUywgICAvL2VhcC1zaW0vYWthuabE3KOssunRr3Npbb+o09DO3sb008O1xLaoyrHG98/7z6IKCU1TR19DTURfV0lGSV9TVEFUSU9OX0dFVF9TQ0FOX1JFU1VMVFMsICAgICAgICAgLy8gd3BhX3N1cHBsaWNhbnTW97avyajD6Dhz0ru0zgoJTVNHX0NNRF9XSUZJX1NUQVRJT05fRElTQ09OTkVDVCwgICAgICAgICAgICAgICAvL9b3tq+2z7+q1f3U2sGsvdO1xMjIteMKCU1TR19DTURfV0lGSV9TVEFUSU9OX1NQT1RfVVBEQVRFLCAgICAgICAgICAgICAgLy+4/NDCyMi148HQse0KCU1TR19DTURfV0lGSV9TVEFUSU9OX0VWRU5UX0NPTk5FQ1RJTkcsICAgICAgICAgLy93cGFfc3VwcGxpY2FudNX91NqzosrUway908rCvP7P+8+iCglNU0dfQ01EX1dJRklfU1RBVElPTl9FVkVOVF9DT05ORUNURUQsICAgICAgICAgIC8vYXBzdGHT68jItePBrL3Ts8m5ps2o1qrP+8+iCglNU0dfQ01EX1dJRklfU1RBVElPTl9FVkVOVF9ESVNDT05ORUNURUQsICAgICAgIC8vYXBzdGHT68jIteO2z7+qway9082o1qrP+8+iCglNU0dfQ01EX1dJRklfU1RBVElPTl9CTENfQ09OTkVDVEVELCAgICAgICAgICAgIC8vYmxjt6LLzbXEway907PJuaajrHN0YXRpb261xGlw0tG31sXktb0KCU1TR19DTURfQkxDX09QRU5fV0lGSVNUQVRJT05fQUNDRVNTLCAgICAgICAgICAgLy9ibGO3osC0z/vPorTyv6phcHN0YcGsvdMvLzB4NDAyMAoJTVNHX0NNRF9CTENfQ0xPU0VfV0lGSVNUQVRJT05fQUNDRVNTLCAgICAgICAgICAvL2JsY7eiwLTP+8+its+/qmFwc3Rhway90woJTVNHX0NNRF9XSUZJX1NUQVRJT05fTk9fQVZBSUxBQkxFX0FQLAoJTVNHX0NNRF9XSUZJX1NUQVRJT05fRk9SR0VULCAgICAgICAgICAgICAgIC8vCglNU0dfQ01EX1dJRklfU1RBVElPTl9JTkRJQ0FURV9TQ0FOX1JFU1VMVFMsCglNU0dfQ01EX1dJRklfU1RBVElPTl9DT05ORUNUX0ZBSUwsCglNU0dfQ01EX1dJRklfU1RBVElPTl9TVVBQTElDQU5UX0VWVCwgLy8KCU1TR19DTURfV0lGSV9TVEFUSU9OX1RFTVBfRElTQUJMRUQsICAgICAgICAgLy9hcHN0Yc60s8m5psGsvdPJz8jIteO1xLn9tsnKwrz+o6zWrrrzu+HX1Lav1tjBrAoJTVNHX0NNRF9XSUZJX1NUQVRJT05fRkFJTEVEX1NFVCwgICAgICAgICAvL2Fwc3RhzrSzybmmway908nPyMi147XEvPjIqMqnsNzKwrz+o6zWrrrzsrvW2MGsCgkKCU1TR19DTURfV0lGSV9TVEFUSU9OX0RFQlVHX0RVTVAsCglNU0dfQ01EX1dJRklfU1RBVElPTl9XUEFfQ01ELAoJTVNHX0NNRF9XSUZJX1NUQVRJT05fQ09OTkVDVEVEX0VOQUJMRV9BUF9DTUQsIC8vYXBzdGHBrL3TyMi147PJuabG9LavYXAKCQoJLy9jYXAtPmFwCglNU0dfQ01EX0NBUF9TVEFfU0VUX1BBUkFNLAkvL3N0YSBzc2lkIGF1dGggcHcKCU1TR19DTURfQ0FQX1NUQV9FTkFCTEUsIC8vYXAgb24gb2ZmCglNU0dfQ01EX0NBUF9TVEFfU0NBTiwgLy9zY2FuCgkKCU1TR19DTURfV0lGSV9TVEFUSU9OX0VORCwgICAgICAgICAgICAgICAgICAgICAgLy9hcHN0YXRpb261xM/7z6K3ts6nZW5kCgoJLy90aW1pbmcgb2Ygc2xlZXAgd2FrZSB1cAoJTVNHX0NNRF9XSUZJX1RTV19TRVQsICAgICAgICAgLy/J6NbDtqjKscuvw9+7vdDRtcTP+8+iCglNU0dfQ01EX1dJRklfVFNXX0NMT1NFLCAgICAgICAvL7nYsdW2qMqxy6/D37u90NG5psTctcTP+8+iCglNU0dfQ01EX1JUQ19USU1FX1VQREFURSwgICAgICAvL3J0Y8qxvOQguPzQwtDo1tjQwsno1sO2qMqxy6/D37u90NEKCU1TR19DTURfV0lGSV9SRVNFVF9USU1FUiwgICAgIC8vbW1psLS8/NbY0MLJ6NbDy6/D33RpbWVyCgoKCS8qKioqKioqKioqKioqKip3aWZpIE9QRU5DUFXP+8+iKioqKioqKioqKioqKioqKi8KCU1TR19DTURfV0lGSV9TV0lUQ0hfUkVRLAoJTVNHX0NNRF9XSUZJX1NXSVRDSF9SU1AsCglNU0dfQ01EX1dJRklfQ0ZHX1NTSURfUkVRLCAgLy8weDQwMzAKCU1TR19DTURfV0lGSV9DRkdfU1NJRF9SU1AsCglNU0dfQ01EX1dJRklfQ0ZHX1BXRF9SRVEsCglNU0dfQ01EX1dJRklfQ0ZHX1BXRF9SU1AsCgkvKioqKioqKioqKioqKioqd2lmaSBPUEVOQ1BVz/vPoioqKioqKioqKioqKioqKiovCgkKCU1TR19DTURfQVBfU1RBX0NPTk5FQ1RFRCwKCU1TR19DTURfQVBfU1RBX0RJU0NPTk5FQ1RFRCwKCgkvL2NhcCByZWN2CglNU0dfQ01EX0NBUF9XSUZJX1NUQVRVUywKCU1TR19DTURfQ0FQX0FQX1NUQVRVUywKCU1TR19DTURfQ0FQX0FQX1NUQV9DSEFOR0UsCglNU0dfQ01EX0NBUF9TVEFfU1RBVFVTLAoJTVNHX0NNRF9DQVBfU1RBX1NDQU5fUkVTLAoJCgkvL2NhcCBzZW5kCglNU0dfQ01EX0NBUF9XSUZJX0VOQUJMRSwgCS8vd2lmacf9tq+z9cq8u68sIHdsYW4gdXAKCU1TR19DTURfQ0FQX1dJRklfRElTQUJMRSwgCS8vd2lmacf9tq/IpbP1yry7rywgd2xhbiBkb3duCglNU0dfQ01EX0NBUF9XSUZJX1dPUktfTU9ERSwgLy93aWZpuaTX98Sjyr3J6NbDCglNU0dfQ01EX0NBUF9XSUZJX1NFVF9TU0lELAkvLwoJTVNHX0NNRF9DQVBfV0lGSV9TRVRfSElERVNTSUQsCS8vMCBub3QgaGlkZSwgMSBoaWRlCglNU0dfQ01EX0NBUF9XSUZJX1NFVF9NT0RFLAkvLzgwMjExIG1vZGUgYmduLi4uCglNU0dfQ01EX0NBUF9XSUZJX1NFVF9CQU5EV0lEVEgsCS8vMCAyME0sIDEgMjAvNDBNCgkvL01TR19DTURfQ0FQX1dJRklfU0VUX0NIQU5ORUwsCS8vMCAtIDEzCglNU0dfQ01EX0NBUF9XSUZJX1NFVF9NQVhTVEFOVU0sCS8vMCAtIDMyCglNU0dfQ01EX0NBUF9XSUZJX1NFVF9DQ19DSCwgLy9jb3VudHJ5IGNvZGUsIGNoYW5uZWwKCU1TR19DTURfQ0FQX1dJRklfU0VUX0FDTCwKCU1TR19DTURfQ0FQX1dJRklfU0VUX0FVVEgsIC8vd3BhCglNU0dfQ01EX0NBUF9XSUZJX0FQX0VOQUJMRSwgLy9hcCBvbiBvZmYKCglNU0dfQ01EX0NBUF9XSUZJX1RFU1RfRU5BQkxFLCAJLy93aWZpsuLK1MSjyr3H/bavs/XKvLuvLCAxIGluc21vZC8wIHJtbW9kCgoJLy9mb3IgY2FwIHN5bmMgQVBJCglNU0dfQ01EX0NBUF9XSUZJX1NUQV9TVEFUX1JFUSwKCU1TR19DTURfQ0FQX1dJRklfU1RBX1NUQVRfUlNQLAoKfTsKCgojZGVmaW5lIFdJRklfU1NJRF9MRU4JCQkzMwojZGVmaW5lIFdMQU5fUFNLX0xFTiAJCQk2NQojZGVmaW5lIFdMQU5fU0VDVVJJVFlfTEVOCQkyMAojZGVmaW5lIFdMQU5fRU5DUllQVF9MRU4JCTEwCiNkZWZpbmUgV0xBTl9ERUZBVUxUSURfTEVOCQk0CiNkZWZpbmUgV0xBTl9XRVBLRVlfTEVOCQkJMzIKI2RlZmluZSBXTEFOX0VOQ09ERV9QU0tfTEVOCQkxMDAKI2RlZmluZSBXTEFOX01BWF9BQ0NFU1NfTlVNX0xFTiA0CiNkZWZpbmUgV0xBTl9ISURFU1NJRF9MRU4JCTQKI2RlZmluZSBXRl9BVVRIX09QRU4JCQkiT1BFTiIKI2RlZmluZSBXRl9BVVRIX1NIQVJFCQkJIlNIQVJFRCIKI2RlZmluZSBXRl9BVVRIX1dFUEFVVE8JCQkiV0VQQVVUTyIKI2RlZmluZSBXRl9BVVRIX1dQQQkJCQkiV1BBUFNLIgojZGVmaW5lIFdGX0FVVEhfV1BBMgkJCSJXUEEyUFNLIgojZGVmaW5lIFdGX0FVVEhfV1BBX1dQQTIJCSJXUEFQU0tXUEEyUFNLIgojZGVmaW5lIFdGX0FVVEhfV0FQSVBTSwkJCSJXQVBJUFNLIgojZGVmaW5lIFdGX0VOQ1JQX05PTkUJCQkiTk9ORSIgICAvL2VuY3J5cHQKI2RlZmluZSBXRl9FTkNSUF9XRVAJCQkiV0VQIgojZGVmaW5lIFdGX0VOQ1JQX1RLSVAJCQkiVEtJUCIKI2RlZmluZSBXRl9FTkNSUF9DQ01QCQkJIkNDTVAiCiNkZWZpbmUgV0ZfRU5DUlBfQUVTCQkJIkFFUyIKI2RlZmluZSBXRl9FTkNSUF9US0lQX0NDTVAJCSJUS0lQQ0NNUCIKI2RlZmluZSBXRl9FTkNSUF9US0lQX0FFUwkJIlRLSVBBRVMiCgovKioKKiBAYnJpZWYgtqjS5U1TR19DTURfV0lGSV9DRkdfQVAgLE1TR19DTURfV0lGSV9DRkdfQVAyIM/7z6K4vbT4yv2+3b3hubnM5QoqCioKKgoqLwp0eXBlZGVmIHN0cnVjdCB3bGFuX2NmZ19iYXNpYyB7CgljaGFyIHNzaWRbV0lGSV9TU0lEX0xFTl07CQkJLy9zc2lkIHNob3VsZCBiZSBsZXNzIHRoYW4gMzIgYnl0ZXMKCWNoYXIgcHdkW1dMQU5fUFNLX0xFTl07CQkJCS8vcHdkIGxlbiBzaG91bGQgYmUgaW4gOH42NCBieXRlcwoJY2hhciBhdXRobW9kZVtXTEFOX1NFQ1VSSVRZX0xFTl07CgljaGFyIGVuY3J5cHRbV0xBTl9FTkNSWVBUX0xFTl07CgljaGFyIG1heF9hY2Nlc3NfbnVtW1dMQU5fTUFYX0FDQ0VTU19OVU1fTEVOXTsKCWNoYXIgaGlkZXNzaWRbV0xBTl9ISURFU1NJRF9MRU5dOwp9IHdsYW5fYmFzaWNfaW5mbzsKCnR5cGVkZWYgc3RydWN0IF93bGFuX21hY19pbmZvewoJY2hhciBob3N0bmFtZVszMl07CgljaGFyIG1hY1syMF07Cn13bGFuX21hY19pbmZvOwoKdHlwZWRlZiBzdHJ1Y3QgX3dsYW5fbWFjX2luZm9fbGlzdHsKCXdsYW5fbWFjX2luZm8gbWFjX2luZm9bTUFYX05VTUJFUl9PRl9NQUNdOwoJaW50IGFjY2Vzc19jb3VudDsKfXdsYW5fbWFjX2luZm9fbGlzdDsKCi8qKgoqIEBicmllZiC2qNLld2lmade0zKzD/MHuCiAqIEBwYXJhbSBXSUZJX0FEVkFOQ0VEX0NMT1NFILnYsdV3aWZptcTP+8+iCiAqIEBwYXJhbSBXSUZJX0FEVkFOQ0VEX09QRU4gv6rG9HdpZmm1xM/7z6IKICogQHBhcmFtIFdJRklfQURWQU5DRURfT1BFTl9WQTAxIM2syrG/qsb01vehorixc3NpZLXEz/vPogogKiBAcGFyYW0gV0lGSV9BRFZBTkNFRF9DTE9TRV9NU1NJRCC52LHVuLFzc2lktcTP+8+iCiAqIEBwYXJhbSBXSUZJX0FEVkFOQ0VEX09QRU5fVkExILTyv6q4sXNzaWS1xM/7z6IKICogQHBhcmFtIFdJRklfQURWQU5DRURfUkYgyejWw8nkxrWyzsr9tcTP+8+iCiAqIEBwYXJhbSBXSUZJX0FEVkFOQ0VEX1JFU1RBUlQg0L7GrNbYxvS1xM/7z6IKKi8KZW51bSB7CglXSUZJX0FEVkFOQ0VEX0NMT1NFID0gMCwJLy8gMCC52LHVd2lmaQoJV0lGSV9BRFZBTkNFRF9PUEVOLAkJCS8vIDEgv6rG9HZhMAoJV0lGSV9BRFZBTkNFRF9PUEVOX1ZBMDEsCS8vIDIgzazKsb+qxvTW96GiuLFzc2lkCglXSUZJX0FEVkFOQ0VEX0NMT1NFX01TU0lELAkvLyAzudix1bixc3NpZAoJV0lGSV9BRFZBTkNFRF9PUEVOX1ZBMSwJCS8vIDQgtPK/qrixc3NpZAoJV0lGSV9BRFZBTkNFRF9SRiwJCQkvLyA1IMno1sPJ5Ma1ss7K/QoJV0lGSV9BRFZBTkNFRF9SRVNUQVJULAkJLy8gNiDQvsas1tjG9Ap9OwoKLyoqKioqKioqKip3bGFuIGF0YXRlKioqKioqKioqKioqKioqLwojZGVmaW5lIFdJRklfT1BFTkVEICAgICAgICAiMSIgICAgLy/S0bu90NEKI2RlZmluZSBXSUZJX0NMT1NFRCAgICAgICAgIjAiICAgIC8v0tG52LHVCgojZGVmaW5lIFdMQU5fT04gICAgICAgICAgICAgMSAgICAvL9LRu73Q0QojZGVmaW5lIFdMQU5fT0ZGICAgICAgICAgICAgMAoKLyoqCiogQGJyaWVmILao0uV3aWZpIGFwc3RhdGlvbiBTSU2/qNe0zKwKICogQHBhcmFtIENBUkRfTU9ERV9OT19TSU0gw7vT0FNJTbXEz/vPogogKiBAcGFyYW0gV0NBUkRfTU9ERV9TSU0gtObU2lNJTbXEz/vPogogKiBAcGFyYW0gQ0FSRF9NT0RFX1VTSU0gtObU2lVTSU21xM/7z6IKKi8KLy/Tw9PaYXBzdGG5psTcwO/KtrHwc2ltv6gKZW51bSBDYXJkTW9kZV9EZWYgewoJLypUX3pVZmlfQ2FyZE1vZGUqLwoJQ0FSRF9NT0RFX05PX1NJTSA9IDB4MWIwMCwKCUNBUkRfTU9ERV9TSU0sCglDQVJEX01PREVfVVNJTSwKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwp9OwoKCi8qKgoqIEBicmllZiC2qNLld2lmaSBQSU7XtMysCiAqIEBwYXJhbSBQSU5fU1RBVFVTX05PX1BJTiDDu9PQUElOwuu1xM/7z6IKICogQHBhcmFtIFBJTl9TVEFUVVNfUElOMSBQSU4xwuu1xM/7z6IKICogQHBhcmFtIFBJTl9TVEFUVVNfUElOMiBQSU4ywuu1xM/7z6IKICogQHBhcmFtIFBJTl9TVEFUVVNfUFVLMSBQVUsxwuu1xM/7z6IKICogQHBhcmFtIFBJTl9TVEFUVVNfUFVLMiBQVUsywuu1xM/7z6IKKi8KZW51bSBQaW5TdGF0dXNfRGVmIHsKCS8qVF96VWZpX1BpblN0YXR1cyovCglQSU5fU1RBVFVTX05PX1BJTiA9IDB4MWMwMCwKCVBJTl9TVEFUVVNfUElOMSwKCVBJTl9TVEFUVVNfUElOMiwKCVBJTl9TVEFUVVNfUFVLMSwKCVBJTl9TVEFUVVNfUFVLMiwKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwp9OwoKLyoqKioqKioqKioqKioqKioqKioqKnN0YXRpb24gYmVnaW4qKioqKioqKioqKioqKioqLwoKLy8jaWZuZGVmICBfX1JFQUxURUtfODE5Ml9DSElQX18KI2lmICEoZGVmaW5lZChfX1JFQUxURUtfODE5Ml9DSElQX18pIHx8IGRlZmluZWQoX19TU1ZfNlg1WF9DSElQX18pIHx8IGRlZmluZWQoX19BSUNfODgwMERXX0NISVBfXykpCgoKI2RlZmluZSBXSUZJX1NUQVRJT05fTUFDX0xFTiAgICAgICAgICAgICAgICAyMAojZGVmaW5lIFdJRklfU1RBVElPTl9TU0lEX0xFTiAgICAgICAgICAgICAgIDEyOAojZGVmaW5lIFdJRklfU1RBVElPTl9BVVRIX01PREVfTEVOICAJCTIwCiNkZWZpbmUgV0lGSV9TVEFUSU9OX0VOQ1JZUFRfVFlQRV9MRU4gIAkJMjAKI2RlZmluZSBXSUZJX1NUQVRJT05fU1BPVF9QQVNTV09SRF9MRU4gIAkxMjgKCnR5cGVkZWYgc3RydWN0IHNjYW5fcmVzdWx0IHsKCWNoYXIgICAgIG1hY1tXSUZJX1NUQVRJT05fTUFDX0xFTl07CgljaGFyICAgICBzc2lkW1dJRklfU1RBVElPTl9TU0lEX0xFTl07CgljaGFyICAgICBhdXRoX21vZGVbV0lGSV9TVEFUSU9OX0FVVEhfTU9ERV9MRU5dOwoJY2hhciAgICAgZW5jcnlwdF90eXBlW1dJRklfU1RBVElPTl9FTkNSWVBUX1RZUEVfTEVOXTsKCXNob3J0ICAgIGNvbm5lY3Rfc3RhdHVzOwoJc2hvcnQgICAgY2hhbm5lbDsKCXNob3J0ICAgIHNpZ25hbDsKCXNob3J0ICAgIG5ldHdvcmtfaWQ7Cn0gc2Nhbl9yZXN1bHRfdDsKCnR5cGVkZWYgc3RydWN0IHNwb3QgewoJY2hhciAgICAgbWFjW1dJRklfU1RBVElPTl9NQUNfTEVOXTsKCWNoYXIgICAgIHNzaWRbV0lGSV9TVEFUSU9OX1NTSURfTEVOXTsKCWNoYXIgICAgIGF1dGhfbW9kZVtXSUZJX1NUQVRJT05fQVVUSF9NT0RFX0xFTl07CgljaGFyICAgICBlbmNyeXB0X3R5cGVbV0lGSV9TVEFUSU9OX0VOQ1JZUFRfVFlQRV9MRU5dOwoJY2hhciAgICAgcGFzc3dvcmRbV0lGSV9TVEFUSU9OX1NQT1RfUEFTU1dPUkRfTEVOXTsKCXNob3J0ICAgIG5ldHdvcmtfaWQ7Cn0gc3BvdF90OwoKdHlwZWRlZiBlbnVtewoJU0FWRV9BQ1RJT04sCglERUxfQUNUSU9OLAoJQ09OTkVDVElOR19BQ1RJT04sCglESENQSU5HX0FDVElPTiwKCUNPTk5FQ1RFRF9BQ1RJT04sCglESVNDT05ORUNUX0FDVElPTiwKCQoJLy9rdyAzCglBQ1RJT05fTUFYCn1zcG90X2FjdGlvbl90OwoKdHlwZWRlZiBzdHJ1Y3QgIG1zZ19hY3Rfc3BvdCB7CglzcG90X2FjdGlvbl90ICBhY3Q7CgljaGFyICBtYWNbV0lGSV9TVEFUSU9OX01BQ19MRU5dOwoJY2hhciAgc3NpZFtXSUZJX1NUQVRJT05fU1NJRF9MRU5dOwoJaW50IG5ldHdvcmtfaWQ7Cn0gbXNnX2FjdF9zcG90X3Q7Cgp0eXBlZGVmIGVudW0gc2Nhbl9jb250ZW50IHsJCglXSUZJX1NUQVRJT05fQVBfQ09OVEVOVF9VTkRFRklORUQsCglXSUZJX1NUQVRJT05fQVBfTUFDLAoJV0lGSV9TVEFUSU9OX0FQX1NTSUQsCglXSUZJX1NUQVRJT05fQVBfQVVUSF9NT0RFLAoJV0lGSV9TVEFUSU9OX0FQX0VOQ1JZUFRfVFlQRSwJCglXSUZJX1NUQVRJT05fQVBfQ0hBTk5FTCwKCVdJRklfU1RBVElPTl9BUF9TSUdOQUwsCglXSUZJX1NUQVRJT05fQVBfQ09OTkVDVF9TVEFUVVMsCglXSUZJX1NUQVRJT05fQVBfTkVUV09SS19JRCwKfSBzY2FuX2NvbnRlbnRfdDsKCnR5cGVkZWYgZW51bXsKCURJU0NPTk5FQ1RfU1RBVFVTLAoJQ09OTkVDVElOR19TVEFUVVMsCglESENQSU5HX1NUQVRVUywKCUNPTk5FQ1RFRF9TVEFUVVMsCn1jb25uZWN0X3N0YXR1c190OwoKdHlwZWRlZiBlbnVtIHsKCVdJRklfU1RBVElPTl9XUk9OR19LRVksCglXSUZJX1NUQVRJT05fSVBfRkFJTCwKCVdJRklfU1RBVElPTl9BVVRIX0ZBSUwsCglXSUZJX1NUQVRJT05fT1RIRVIsCn1jb25uX2ZhaWxfcmVhc29uX3Q7CgojZWxzZQoKI2RlZmluZSBXSUZJX1NUQVRJT05fU1BPVF9BQ1RJT05fTEVOICAgICAgICAgICAgIDMyCiNkZWZpbmUgV0lGSV9TVEFUSU9OX1NQT1RfTEVOICAyNTYKI2RlZmluZSBXSUZJX1NUQVRJT05fU1BPVF9MSVNUX05VTSAgMTAKI2RlZmluZSBXSUZJX1NUQVRJT05fU1BPVF9QUk9GSUxFX05BTUVfTEVOICAzMAojZGVmaW5lIFdJRklfU1RBVElPTl9TUE9UX1BBU1NXT1JEX0xFTiAgMTI4CiNkZWZpbmUgV0lGSV9TVEFUSU9OX1NQT1RfS0VZX0lEX0xFTiAgMTAKI2RlZmluZSBXSUZJX1NUQVRJT05fUFJPRklMRV9OVl9OQU1FX0xFTiAgMjAKCiNkZWZpbmUgV0lGSV9TVEFUSU9OX1dQQV9TVEFUVVNfTEVOICAgICAgICAgMzAKI2RlZmluZSBXSUZJX1NUQVRJT05fTUFDX0xFTiAgICAgICAgICAgICAgICAyMAojZGVmaW5lIFdJRklfU1RBVElPTl9TU0lEX0xFTiAgICAgICAgICAgICAgIDEyOAojZGVmaW5lIFdJRklfU1RBVElPTl9BVVRIX01PREVfTEVOICAyMAojZGVmaW5lIFdJRklfU1RBVElPTl9FTkNSWVBUX1RZUEVfTEVOICAyMAojZGVmaW5lIFdJRklfU1RBVElPTl9GTEFHU19MRU4gICAgMTI4Cgp0eXBlZGVmIHN0cnVjdCAgdXBkYXRlX3Nwb3RfaW5mbyB7CgljaGFyIHNwb3RbV0lGSV9TVEFUSU9OX1NQT1RfTEVOXTsKCWNoYXIgYWN0aW9uW1dJRklfU1RBVElPTl9TUE9UX0FDVElPTl9MRU5dOwoJY2hhciBzc2lkW1dJRklfU1NJRF9MRU5dOwkJCS8vc3NpZCBzaG91bGQgYmUgbGVzcyB0aGFuIDMyIGJ5dGVzCgljaGFyIHB3ZFtXTEFOX1BTS19MRU5dOwkJCQkvL3B3ZCBsZW4gc2hvdWxkIGJlIGluIDh+NjQgYnl0ZXMKfSB1cGRhdGVpbmZvX3Q7Cgp0eXBlZGVmIGVudW0gd2lmaV9wcm9maWxlX2NvbnRlbnQgewoJV0lGSV9TVEFUSU9OX0NPTlRFTlRfVU5ERUZJTkVELAoJV0lGSV9TVEFUSU9OX1BST0ZJTEVfTkFNRSwKCVdJRklfU1RBVElPTl9GUk9NX1BST1ZJREVSLAoJV0lGSV9TVEFUSU9OX0NPTk5FQ1RfU1RBVFVTLAoJV0lGSV9TVEFUSU9OX1NJR05BTCwKCVdJRklfU1RBVElPTl9TU0lELAoJV0lGSV9TVEFUSU9OX0FVVEhfTU9ERSwKCVdJRklfU1RBVElPTl9FTkNSWVBUX1RZUEUsCglXSUZJX1NUQVRJT05fUEFTU1dPUkQsCglXSUZJX1NUQVRJT05fS0VZX0lELAoJV0lGSV9TVEFUSU9OX0FQX01BQwp9IHdpZmlfcHJvZmlsZV9jb250ZW50X3Q7Cgp0eXBlZGVmIHN0cnVjdCBzY2FuX3Jlc3VsdCB7CgljaGFyICAgICBtYWNbV0lGSV9TVEFUSU9OX01BQ19MRU5dOwoJY2hhciAgICAgc3NpZFtXSUZJX1NUQVRJT05fU1NJRF9MRU5dOwoJY2hhciAgICAgYXV0aF9tb2RlW1dJRklfU1RBVElPTl9BVVRIX01PREVfTEVOXTsKCWNoYXIgICAgIGVuY3J5cHRfdHlwZVtXSUZJX1NUQVRJT05fRU5DUllQVF9UWVBFX0xFTl07CglzaG9ydCAgICBmcm9tX3Byb3ZpZGVyOy8vMDq3x9TL06rJzKOsMTrUy9OqycwKCXNob3J0ICAgIGNvbm5lY3Rfc3RhdHVzOwoJc2hvcnQgICAgY2hhbm5lbDsKCXNob3J0ICAgIHNpZ25hbDsKI2lmZGVmIFVTRV9DQVBfU1VQUE9SVAoJLy9zaG9ydCAgICBjaF9mcmVxOwoJc2lnbmVkIGNoYXIgICAgc2lnbmFsX2RiOwojZW5kaWYKfSBzY2FuX3Jlc3VsdF90OwoKCnR5cGVkZWYgc3RydWN0IHNwb3QgewoJY2hhciAgICAgIHByb2ZpbGVfbmFtZVtXSUZJX1NUQVRJT05fU1BPVF9QUk9GSUxFX05BTUVfTEVOXTsKCXNob3J0ICAgIGZyb21fcHJvdmlkZXI7Ly8wOrfH1MvTqsnMo6wxOtTL06rJzAoJc2hvcnQgICAgY29ubmVjdF9zdGF0dXM7CglzaG9ydCAgICBzaWduYWw7CgljaGFyICAgICAgc3NpZFtXSUZJX1NUQVRJT05fU1NJRF9MRU5dOwoJY2hhciAgICAgIGF1dGhfbW9kZVtXSUZJX1NUQVRJT05fQVVUSF9NT0RFX0xFTl07CgljaGFyICAgICAgZW5jcnlwdF90eXBlW1dJRklfU1RBVElPTl9FTkNSWVBUX1RZUEVfTEVOXTsKCWNoYXIgICAgICBwYXNzd29yZFtXSUZJX1NUQVRJT05fU1BPVF9QQVNTV09SRF9MRU5dOwoJc2hvcnQgICAga2V5SUQ7CgljaGFyICAgICBtYWNbV0lGSV9TVEFUSU9OX01BQ19MRU5dOwoJQk9PTCAgICBpc190cmllZF9jb25uZWN0OwoJc2hvcnQgICAgbmV0d29ya19pZDsKfSBzcG90X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgIHNwb3Rfc3NpZF9pZCB7CglpbnQgIGlkOwoJY2hhciAgc3NpZFtXSUZJX1NUQVRJT05fU1NJRF9MRU5dOwp9IHNwb3Rfc3NpZF9pZF90OwojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKipzdGF0aW9uIGVuZCoqKioqKioqKioqKioqKiovCgovKm52ICAgc2V0IGZsYWdzICovCgovL3dpZmkKCiNkZWZpbmUgTlZJT19XSUZJX01BWF9MRU4gIAkJCQkyMDAgLyp3cml0ZSBvciByZWFkIG52IGxlbmd0aCovCiNkZWZpbmUgV0lGSV9QU1dfREVGQVVMVF9MRU5HVEggIAkJNjUKI2RlZmluZSBXSUZJX1NUQVRVU19MRU4JCQkJCSAyCiNkZWZpbmUgV0lGSV9QU1dfTUlOX0xFTiAJCQkJMQojZGVmaW5lIFdJRklfUFNXX01BTl9MRU4gCQkJCTY0CiNkZWZpbmUgV0lGSV9DT05GSUdfREVGQVVMVF9MRU5HVEggIAkxMjgKI2RlZmluZSBXRl9XUFNfS0VZX0lOREVYX0xFTiAgCQkJMgojZGVmaW5lIFdGX0tFWV9NT0RFX0xFTiAgCQkJCTMKI2RlZmluZSBXRl9XRVBfS0VZX01BWF9MRU4gIAkJCTI3CiNkZWZpbmUgV0ZfV1BBX0tFWV9NQVhfTEVOICAJCQk2NQojZGVmaW5lIFdGX0VOQ1JZX1RZUEVfTEVOIAkJCQkxNgojZGVmaW5lIFdGX0FVX01PREVfTEVOICAJCQkJMTYKI2RlZmluZSBXUFNfTU9ERV9QSU4gCQkJCQkiUElOIiAgICAgIC8vd3BzIG1vZGUgCiNkZWZpbmUgV1BTX01PREVfUEJDICAJCQkJCSJQQkMiCiNkZWZpbmUgV1BTX01PREVfQVBfUElOICAgCQkJCSJBUFBJTiIKI2RlZmluZSBXRl9BVV9PUEVOICAgICAgICAgICAgCQkJCSJPUEVOIiAgICAgICAgICAgIC8vd2lmaSBhdXRoIG1vZGU/CiNkZWZpbmUgV0ZfQVVfU0hBUkUgICAgICAgICAgIAkJCQkiU0hBUkVEIgojZGVmaW5lIFdGX0FVX1dFUEFVVE8gICAgICAgICAJCQkJIldFUEFVVE8iCiNkZWZpbmUgV0ZfQVVfV1BBICAgICAgICAgICAgIAkJCQkiV1BBUFNLIgojZGVmaW5lIFdGX0FVX1dQQTIgICAgICAgICAgICAJCQkJIldQQTJQU0siCiNkZWZpbmUgV0ZfQVVfV1BBX1dQQTIgIAkgIAkJCSJXUEFQU0tXUEEyUFNLIgojZGVmaW5lIFdGX0FVX1dQQTMgICAgICAgICAgICAJCQkJIldQQTNQZXJzb25hbCIKI2RlZmluZSBXRl9BVV9XUEEyX1dQQTMgICAgICAgICAgICAJCQkJIldQQTJXUEEzIgojZGVmaW5lIFdGX0FVX1dBUElQU0sJICAgICAgCQkJCSJXQVBJUFNLIgojZGVmaW5lIFdGX0VOQ1JZX05PTkUgICAgICAJCQkJIk5PTkUiICAgLy9lbmNyeXB0CiNkZWZpbmUgV0ZfRU5DUllfV0VQICAgICAgCQkJCSAiV0VQIgojZGVmaW5lIFdGX0VOQ1JZX1RLSVAgICAgICAJCQkJIlRLSVAiCiNkZWZpbmUgV0ZfRU5DUllfQ0NNUCAgICAgCQkJCSAiQ0NNUCIKI2RlZmluZSBXRl9FTkNSWV9BRVMgICAgICAgCQkJCSJBRVMiCiNkZWZpbmUgV0ZfRU5DUllfVEtJUF9DQ01QIAkJCQkiVEtJUENDTVAiCiNkZWZpbmUgV0ZfRU5DUllfVEtJUF9BRVMgIAkJCQkiVEtJUEFFUyIKI2RlZmluZSBXSUZJX1NTSURfSU5ERVggCQkJCQkic3NpZF9pbmRleCIKI2RlZmluZSBXSUZJX1NUQVRJT05fTUFDIAkJCQkibWFjX2FkZHIiCiNkZWZpbmUgV0lGSV9TVEFUSU9OX0hPU1ROQU1FIAkJCSJob3N0bmFtZSIKI2RlZmluZSBXSUZJX1NUQVRJT05fSVBBRERSIAkJCQkiaXBfYWRkciIKI2RlZmluZSBXSUZJX1NUQVRJT05fQ09OTkVDVFRJTUUgCQkiY29ubmVjdF90aW1lIgojZGVmaW5lIFdJRklfU1RBVElPTl9WQUxJRFRJTUUgCQkJInZhbGlkX3RpbWUiCiNkZWZpbmUgV0lGSV9TVEFUSU9OX0lQVFlQRSAJCQkJImlwX3R5cGUiCiNkZWZpbmUgV0lGSV9TVEFUSU9OX0RFVlRZUEUgCQkJImRldl90eXBlIgojZGVmaW5lIFdJRklfTlZfSVRFTV9XSUZJX1NFVF9GTEFHUyAJIndpZmlfc2V0X2ZsYWdzIgojZGVmaW5lIE5WX1dJRklfU0NBTl9GSU5JU0ggICAgICAgICAJCQkic2Nhbl9maW5pc2giCgojZGVmaW5lIE5WX1dJRklfV1BBX1BBU1MgICAgICAgICAgICAJCQkiV1BBUFNLMSIKI2RlZmluZSBOVl9XSUZJX1dQQV9QQVNTX0VOQ09ERSAgICAgCQkiV1BBUFNLMV9lbmNvZGUiCiNkZWZpbmUgTlZfV0lGSV9XUEFfUEFTU19NICAgICAgICAgIAkJIm1fV1BBUFNLMSIKI2RlZmluZSBOVl9XSUZJX1dQQV9QQVNTX01fRU5DT0RFICAgCSJtX1dQQVBTSzFfZW5jb2RlIgojZGVmaW5lIE5WX1dJRklfQ09WRVJBR0UgIAkJCQkid2lmaV9jb3ZlcmFnZSIKI2RlZmluZSBOVl9XSUZJX1dQU19TVEFURSAJCQkJICJXc2NNb2RlT3B0aW9uIgojZGVmaW5lIE5WX1dJRklfV1BTX01PREUgICAgICAJCQkid3BzX21vZGUiCiNkZWZpbmUgTlZfV0lGSV9XUFNfU1NJRCAgICAgICAJCQkiV1BTX1NTSUQiCiNkZWZpbmUgTlZfV0lGSV9XUFNfSU5ERVggICAJCQkJIndpZmlfd3BzX2luZGV4IgojZGVmaW5lIE5WX1dJRklfV1BTX1BJTiAgIAkJCQkid3BzX3BpbiIKI2RlZmluZSBOVl9XSUZJX1dQU19BUF9QSU4gICAJCQkid2lmaV9hcF9waW4iCiNkZWZpbmUgTlZfV0lGSV9XUFNfREVGX1BJTiAgIAkJCSJ3aWZpX2RlZl9waW4iCiNkZWZpbmUgQ01EX1dJRklfU1RBVElPTl9MSVNUIAkJCSJzdGF0aW9uX2xpc3QiCiNkZWZpbmUgQ01EX0hPU1ROQU1FX0xJU1QgCQkJCSJob3N0TmFtZUxpc3QiCiNkZWZpbmUgQ01EX1dJRklfV1BTX0FQX1BJTiAJCQkid2lmaV9hcF9waW4iCiNkZWZpbmUgQ01EX1dJRklfV1BTX0FQX0RFRl9QSU4gCQkid2lmaV9kZWZfcGluIgoKdHlwZWRlZiBlbnVtIHsKCVpURV9XTEFOX1NTSURfU0VUID0gMHgxLAoJWlRFX1dMQU5fQlJPQURDQVNUX1NFVCA9IDB4MiwKCVpURV9XTEFOX0JBU0lDX1NFQ1VSSVRZX1NFVCA9IDB4NCwKCVpURV9XTEFOX01BWF9BQ0NFU1NfTlVNX1NFVCA9IDB4OCwKCgoJWlRFX1dMQU5fT05fT0ZGX1NFVCA9IDB4MTAsCglaVEVfV0xBTl9XSVJFTEVTU19NT0RFX1NFVCA9IDB4MjAsCQoJWlRFX1dMQU5fQ0hBTk5FTF9TRVQgPSAweDQwLAkKCVpURV9XTEFOX0NPVU5UUllfU0VUID0gMHg4MCwKCVpURV9XTEFOX1dJRklfQkFORF9TRVQgPSAweDEwMCwKCglaVEVfV0xBTl9QT1dFUl9TRVQgPSAweDEwMDAsCQoJWlRFX1dMQU5fQUNMX1NFVCA9IDB4MjAwMCwJCglaVEVfV0xBTl9XUFNfU0VUID0gMHg0MDAwLAkKCVpURV9XTEFOX1NFVF9BUF9TTEVFUFRJTUVSID0gMHg4MDAwLAoKCglaVEVfV0xBTl9TRVRfQVBfTVNTSUQgPSAweDEwMDAwLAkKCn0genRlX3dsYW5fc2V0X2VfZmxhZ3M7CgoKLy9jYXA6YXBpLT53bGFuX3Byb3h5LT5hcDp3bGFuX3NlcnZlcgp0eXBlZGVmIGVudW0KewoJSU5fV0lGSV9TVEFUVVNfRElTQUJMRUQgPSAwLAoJSU5fV0lGSV9TVEFUVVNfRU5BQkxFRCwKCUlOX1dJRklfU1RBVFVTX0lOVkFMSURfTUFDLAoJSU5fV0lGSV9TVEFUVVNfREVWX0lOSVRfRkFJTCwKCUlOX1dJRklfU1RBVFVTX0ZJUk1XQVJFX0NSQVNILAp9IGlubmVyX3dpZmlfc3RhdHVzX2U7CgovL25laSBidSB6aHVhbiBodWFuIHlvbmcKLy9zYW1lIGFzIHNjX3dpZmlfYXBfaW5kZXhfZQp0eXBlZGVmIGVudW0KewoJSU5fV0lGSV9BUF9JTkRFWF9NSU4gPSAtMSwKCUlOX1dJRklfQVBfSU5ERVhfQVAwID0gMCwgCS8vMi40RwoJSU5fV0lGSV9BUF9JTkRFWF9BUDEsIAkJLy81RwoJSU5fV0lGSV9BUF9JTkRFWF9NQVgKfSBpbm5lcl93aWZpX2FwX2lkX2U7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgaWR4OyAJCQkvL3JlZmVycyB0bzogd2xhbjAsMS4uLiAKCWNoYXIgc3NpZFtXSUZJX1NTSURfTEVOXTsgCS8vc3NpZCBzaG91bGQgYmUgbGVzcyB0aGFuIDMyIGJ5dGVzCn0gd2xhbl9hcF9zc2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgaWR4OyAJCQkvL3JlZmVycyB0bzogd2xhbjAsMS4uLiAKCWludCBzc2lkX2hpZGU7IAkJCQkvLzAgbm90IGhpZGUsIDEgaGlkZQp9IHdsYW5fYXBfc3NpZF9oaWRlX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgaWR4OyAJCQkvL3JlZmVycyB0bzogd2xhbjAsMS4uLiAKCWludCB3bF9tb2RlOyAJCQkJLy8yLjRHOiA2IGJnbmF4LCA0IGJnbjsgNUc6IDYgYS9uL2FjL2F4LCA1IGEvbi9hYywgNCBhL24KfSB3bGFuX2FwX3dsX21vZGVfdDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCBpZHg7IAkJCS8vcmVmZXJzIHRvOiB3bGFuMCwxLi4uIAoJaW50IGh0TW9kZTsgCQkvLzQgMjAvNDAvODBNLCAxIDIwLzQwTSwgMCAyME0KCS8vaW50IGZvcmNlXzQwbTsKfSB3bGFuX2FwX2JhbmR3aWR0aF90OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IGlkeDsgCQkJLy9yZWZlcnMgdG86IHdsYW4wLDEuLi4gCglpbnQgbWF4X3N0YV9udW07IAkJCS8vMS0zMgp9IHdsYW5fYXBfbWF4X3N0YV90OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IGlkeDsgCQkJLy9yZWZlcnMgdG86IHdsYW4wLDEuLi4gCgljaGFyIGNvdW50cnljb2RlWzNdOyAJCS8vZGVmYXVsdCBDTgoJaW50IGNoYW5uZWw7ICAvLzAtMTMKfSB3bGFuX2FwX2NjX2NoX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgaWR4OyAJCQkvL3JlZmVycyB0bzogd2xhbjAsMS4uLiAKCWludCBhY2xfcnVsZTsgCQkJCS8vMCBub25lLCAxIHdoaXRlLCAyIGJsYWNrCgljaGFyIGFjbF9saXN0WzM2MF07IAkJLy9tYXggMTAgbWFjMTttYWMyLi4uCn0gd2xhbl9hcF9hY2xfdDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCBpZHg7IAkJCS8vcmVmZXJzIHRvOiB3bGFuMCwxLi4uIAoJY2hhciBhdXRobW9kZVtXTEFOX1NFQ1VSSVRZX0xFTl07CgljaGFyIGVuY3J5cHRbV0xBTl9FTkNSWVBUX0xFTl07IC8vcmVhbHRlayB1c2UKCWNoYXIgcHdkW1dMQU5fUFNLX0xFTl07CSAJLy9tYXggNjQKfSB3bGFuX2FwX2F1dGhfdDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCBpZHg7IAkJCS8vcmVmZXJzIHRvOiB3bGFuMCwxLi4uIAoJaW50IGVuYWJsZTsgCQkJLy8xIGFwIG9uICwgMCBhcCBvZmYKfSB3bGFuX2FwX2VuYWJsZV90OwoKLy9zdGF0aW9uCnR5cGVkZWYgc3RydWN0IHsKCWludCBlbmFibGU7IAkJCS8vMSBhcCBvbiAsIDAgYXAgb2ZmCn0gd2xhbl9zdGFfZW5hYmxlX3Q7CgoKLy9hcC0+Y2FwOmluZCAKLy+94bm5zOUsusPAqdW5CnR5cGVkZWYgc3RydWN0IHsKCWludCB3aWZpX3N0YXR1czsKfSB3bGFuX3N0YXR1c190OwoKLy9zYW1lIGFzIHNjX3dpZmlfd29ya19tb2RlX2UgIHRvIGRvOiBodSBodWFuCnR5cGVkZWYgZW51bQp7CglJTl9XSUZJX1dPUktfTU9ERV9NSU4gPSAtMSwKCUlOX1dJRklfV09SS19NT0RFX0FQMCA9IDAsIAkvLzIuNEcgc2luZ2xlIGFwIC8gYXArc3RhCglJTl9XSUZJX1dPUktfTU9ERV9BUDEsIAkJLy81RyBzaW5nbGUgYXAgLyBhcCtzdGEKCUlOX1dJRklfV09SS19NT0RFX1NUQSwKCUlOX1dJRklfV09SS19NT0RFX01BWAp9IGlubmVyX3dpZmlfd29ya19tb2RlX2U7CgovL3NhbWUgYXMgc2Nfd2lmaV9hcF9zdGF0dXNfZQp0eXBlZGVmIGVudW0KewoJSU5fV0lGSV9BUF9TVEFUVVNfTk9ORSA9IDAsCglJTl9XSUZJX0FQX1NUQVRVU19JRExFLCAvL29yIGRpc2FibGUKCUlOX1dJRklfQVBfU1RBVFVTX0VOQUJMSU5HLAoJSU5fV0lGSV9BUF9TVEFUVVNfRU5BQkxFRCwKCUlOX1dJRklfQVBfU1RBVFVTX0RJU0FCTElORywKCUlOX1dJRklfQVBfU1RBVFVTX0VSUk9SCn0gaW5uZXJfd2lmaV9hcF9zdGF0dXNfZTsKCnR5cGVkZWYgc3RydWN0IHsKCWludCBpZHg7CglpbnQgcHJlX3N0YXR1czsgLy+99mNhcNfU0NC4s9a1CglpbnQgc3RhdHVzOwoJY2hhciBpZm5hbWVbMzJdOwoJY2hhciBic3NpZFsxOF07IC8vvfZjYXDX1NDQuLPWtQp9IHdsYW5fYXBfc3RhdHVzX3Q7CgovL3NjX3dpZmlfc3RhX2Nvbm5lY3Rfc3RhdHVzX3QKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IGlkeDsKCWludCBpc19jb25uZWN0ZWQ7CgljaGFyIG1hY2FkZHJbMThdOwp9IHdsYW5fc3RhX2Nvbm5lY3Rfc3RhdHVzX3Q7CgovL2NhcCBzdGF0aW9uCnR5cGVkZWYgc3RydWN0IHsKCWNoYXIgc3NpZFtXSUZJX1NTSURfTEVOXTsgCS8vc3NpZCBzaG91bGQgYmUgbGVzcyB0aGFuIDMyIGJ5dGVzCgljaGFyIGF1dGhtb2RlW1dMQU5fU0VDVVJJVFlfTEVOXTsKCWNoYXIgZW5jcnlwdFtXTEFOX0VOQ1JZUFRfTEVOXTsgLy9yZWFsdGVrIHVzZQoJY2hhciBwd2RbV0xBTl9QU0tfTEVOXTsJIAkvL21heCA2NAp9IHdsYW5fc3RhX3BhcmFtX3Q7CgovL3NhbWUgYXMgc2Nfd2lmaV9zdGFfc3RhdHVzX2UKdHlwZWRlZiBlbnVtCnsKCUlOX1dJRklfU1RBX1NUQVRVU19OT05FLCAvL2Nsb3NlCglJTl9XSUZJX1NUQV9TVEFUVVNfSURMRSwKCUlOX1dJRklfU1RBX1NUQVRVU19DT05ORUNUSU5HLCAvL1RyeWluZyB0byBhc3NvY2lhdGUgd2l0aAoJSU5fV0lGSV9TVEFfU1RBVFVTX0FTU09DSUFURUQsIC8vZGhjcGluZwoJSU5fV0lGSV9TVEFfU1RBVFVTX0NPTk5FQ1RFRCwKCUlOX1dJRklfU1RBX1NUQVRVU19ESVNDT05ORUNURUQsIAoJSU5fV0lGSV9TVEFfU1RBVFVTX0VSUk9SCn0gaW5fd2lmaV9zdGFfc3RhdHVzX2U7CgovL3NhbWUgYXMgc2Nfd2lmaV9yZWFzb25fY29kZV9lCnR5cGVkZWYgZW51bQp7CglJTl9XSUZJX1JFQVNPTl9DT0RFX05PTkUsCglJTl9XSUZJX1JFQVNPTl9DT0RFX1dST05HX0tFWSwKCUlOX1dJRklfUkVBU09OX0NPREVfQVVUSF9GQUlMRUQsCglJTl9XSUZJX1JFQVNPTl9DT0RFX0NPTk5fRkFJTEVELAoJSU5fV0lGSV9SRUFTT05fQ09ERV9TRVRfRkFJTEVELAoJSU5fV0lGSV9SRUFTT05fQ09ERV9ESENQX0ZBSUxFRAp9IGluX3dpZmlfcmVhc29uX2NvZGVfZTsKCnR5cGVkZWYgc3RydWN0CnsKCWNoYXIgYWRkclsxNl07IC8vMjU1LjI1NS4yNTUuMjU1IDE2IElQVjRBRERMRU5fTUFYCgljaGFyIG5ldG1hc2tbMTZdOwoJdW5zaWduZWQgY2hhciBzdWJuZXRfYml0czsgLy8yNTUuMjU1LjI1NS4wIGlzIDI0CgljaGFyIGdhdGV3YXlbMTZdOwoJY2hhciBkbnNwWzE2XTsgLy9wcmltYXJ5IEROUwoJY2hhciBkbnNzWzE2XTsgLy9zZWNvbmRhcnkgRE5TCn0gaW5fd2lmaV9uZXRfYWRkcl90OwoKdHlwZWRlZiBzdHJ1Y3QKewoJY2hhciBhZGRyWzQ4XTsgLy8wMDAxOjAwMDI6MDAwMzowMDA0OjAwMDE6MDAwMjowMDAzOjAwMDQgNDAgKCs4OiwgNDgpCgljaGFyIHByZWZpeFs0OF07Cgl1bnNpZ25lZCBjaGFyIHByZWZpeF9iaXRzOwoJY2hhciBnYXRld2F5WzQ4XTsKCWNoYXIgZG5zcFs0OF07IC8vcHJpbWFyeSBETlMKCWNoYXIgZG5zc1s0OF07IC8vc2Vjb25kYXJ5IEROUwp9IGluX3dpZmlfbmV0X2FkZHI2X3Q7CgovL3NhbWUgYXMgc2Nfd2lmaV9zdGFfc3RhdHVzX3QKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHByZV9zdGF0dXM7IC8vcHJveHkgcmVjb3JkCgoJaW50IHN0YXR1czsgLy9pbl93aWZpX3N0YV9zdGF0dXNfZQoJY2hhciBpZm5hbWVbMzJdOwoJY2hhciBhcF9ic3NpZFsxOF07IC8vY3VyIGFwIG1hYwoJaW50IHJzc2k7Cgl1bnNpZ25lZCBjaGFyIHNpZ25hbF9sZXZlbDsKCXVuc2lnbmVkIGNoYXIgaGFzX2FkZHI7Cglpbl93aWZpX25ldF9hZGRyX3QgYWRkcjsKCXVuc2lnbmVkIGNoYXIgaGFzX2FkZHI2OwoJaW5fd2lmaV9uZXRfYWRkcjZfdCBhZGRyNjsKCWludCByZWFzb25fY29kZTsgLy9pbl93aWZpX3JlYXNvbl9jb2RlX2UJCn0gd2xhbl9zdGFfc3RhdHVzX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgcnNzaTsKfSB3bGFuX3N0YV9zdGF0X3N5bmNfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgcmVzdWx0OwoJd2xhbl9zdGFfc3RhdHVzX3Qgc3RhdHVzOwp9IHNjd2lmaV9zdGFfc3RhdF9yZXNfdDsKCgojZGVmaW5lIENBUF9XSUZJX01BWF9TQ0FOX0NOVCAzMAoKI2RlZmluZSBDQVBfV0lGSV9BVVRIX1VOU1VQIC0xIC8vIm5vdCBzdXBwb3J0IgojZGVmaW5lIENBUF9XSUZJX0FVVEhfT1BFTiAwIC8vIk9QRU4iCiNkZWZpbmUgQ0FQX1dJRklfQVVUSF9XUEEyIDEgLy8iV1BBMlBTSyIKI2RlZmluZSBDQVBfV0lGSV9BVVRIX1dQQTMgMiAvLyJXUEEzUGVyc29uYWwiCiNkZWZpbmUgQ0FQX1dJRklfQVVUSF9XUEExMiAzIC8vIldQQVBTS1dQQTJQU0siCiNkZWZpbmUgQ0FQX1dJRklfQVVUSF9XUEEyMyA0IC8vIldQQTJXUEEzIgoKI2RlZmluZSBDQVBfV0lGSV9FTkNSWVBUX1VOU1VQIC0xIC8vIm5vdCBzdXBwb3J0IgojZGVmaW5lIENBUF9XSUZJX0VOQ1JZUFRfQVVUTyAwIC8vIlRLSVBDQ01QIgojZGVmaW5lIENBUF9XSUZJX0VOQ1JZUFRfVEtJUCAxIC8vIlRLSVAiCiNkZWZpbmUgQ0FQX1dJRklfRU5DUllQVF9BRVMgMiAvLyJDQ01QIgoKLy9zY193aWZpX3N0YV9zY2FuX2luZm9fdAp0eXBlZGVmIHN0cnVjdAp7CgljaGFyIGJzc2lkWzE4XTsvL21hYwoJY2hhciBlc3NpZFszM107CglzaWduZWQgY2hhciBzaWduYWw7IC8vZGJtCgl1bnNpZ25lZCBjaGFyIHNpZ25hbF9sZXZlbDsgLy8wLTUsIG1heCA1Cgl1bnNpZ25lZCBjaGFyIGNoYW5uZWw7IC8vMS0xMywgMzYuLi4KCXVuc2lnbmVkIGNoYXIgYXV0aDsKCXVuc2lnbmVkIGNoYXIgY2lwaGVyOwoJLy9pbnQgZnJlcXVlbmN5OyAvL0h6Cn0gd2xhbl9zdGFfc2Nhbl9pbmZvX3Q7CgovL3NjX3dpZmlfc3RhX3NjYW5fbGlzdF90CnR5cGVkZWYgc3RydWN0CnsKCWludCBjbnQ7Cgl3bGFuX3N0YV9zY2FuX2luZm9fdCBpbmZvW0NBUF9XSUZJX01BWF9TQ0FOX0NOVF07Cn0gd2xhbl9zdGFfc2Nhbl9saXN0X3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgd29ya19tb2RlOyAvL2lubmVyX3dpZmlfd29ya19tb2RlX2UKfSB3bGFuX3dvcmtfbW9kZV90Oy8vc2N3aWZpX3dvcmttb2RlX3QKCiNlbmRpZgo=