HISE Logo Forum
    • Categories
    • Register
    • Login

    Simple copy protection done right :)

    Scheduled Pinned Locked Moved Presets / Scripts / Ideas
    151 Posts 25 Posters 17.9k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Sawer @yall
      last edited by

      @yall So If I got it Right, should I rename "RegistrationInfo.js" into something else?

      ? 1 Reply Last reply Reply Quote 0
      • S
        Sawer
        last edited by Sawer

        @UrsBollhalder
        @yall
        Is it Right?

        //Authorisation Instance
        namespace Authorisation
        
        
        
        {
            const var SerialInput = Content.getComponent("SerialInput");
            const var Description = Content.getComponent("Description");
            const var GlobalMute = Synth.getMidiProcessor("GlobalMute");
            const var SubmitButton = Content.getComponent("SubmitButton");
            const var AuthoPage = Content.getComponent("AuthoPage");
            const var Gui = Content.getComponent("Gui");
        
        
        
        
        
        
            /** Checks if the serial input is valid and stores the result if successful. */
            inline function onSubmitButtonControl(component, value)
            {
                if(!value) // Just execute once
                    return;
            
                local v = SerialInput.getValue();
                Console.print(v);
                
                if(SingleProductSerials.Data.contains(v))
                {
                    Console.print("Serial number found");
                
                    local data = 
                    {
                        "Serial": v
                    };
                
                    // Stores the file to the hard drive. In HISE it will be the project folder
                    // but in the compiled plugin it will use the parent directory to the 
                    // user preset directory (which is usually the app data folder).
                    Engine.dumpAsJSON(data, "../KeyReg.js");
                    
                    setValidLicense(true);
                }
                else
                {
                    Console.print("Invalid serial number");
                    Description.set("text", "INVALID SERIAL");
                    
                    setValidLicense(false);
                }
            };
        
            Content.getComponent("SubmitButton").setControlCallback(onSubmitButtonControl);
        
        
            inline function setValidLicense(isValid)
            {
                // Do whatever you want to do here. I suggest a MIDI muter...
                GlobalMute.setAttribute(0, 1 - isValid);
            
                if(isValid)
                {
                    Gui.showControl(1);
                    AuthoPage.showControl(0);
                }
                else
                {
                   Gui.showControl(1);
                   AuthoPage.showControl(1); 
                }
            }
        
            inline function checkOnLoad()
            {
                // Clear the input
                SerialInput.set("text", "");
                
                // Load the serial from the stored file
                local pData = Engine.loadFromJSON("../KeyReg.js");
                Console.print("Checking serial");
            
                if(pData)    
                {
                    local v = pData.Serial;
                    Gui.showControl(1);
                    AuthoPage.showControl(0);
                 
                  Console.print("Restored serial: " + v);
                  if(SingleProductSerials.Data.contains)
                    {
                        setValidLicense(true);
                        return;
                    }
                }
            
                setValidLicense(false);
            }
        
            // Call this on startup
            checkOnLoad();
        
        }
        
        
        
        //SerialGenerator Instance
        
        /** This namespace contains the logic to create a new list of serials. 
            
            Feel free to remove this when not needed. */
        namespace SerialGenerator
        {
            inline function getNewRandomChar()
            {
                // ASCII, fuck yeah!
                local a = String.fromCharCode(Math.randInt(65, 90));
                local b = String.fromCharCode(Math.randInt(48, 57));
            
                return Math.random() > 0.5 ? a : b;
            }
        
            inline function createNewSerial()
            {
                local s = "";
            
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += "-";
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += "-";
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += "-";
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += getNewRandomChar();
                s += getNewRandomChar();
            
                return s;
            }
        
            const var NUM_SERIALS = 1000;
        
            inline function createNewSerials()
            {
                local d = [];
                d.reserve(NUM_SERIALS);
            
                for(i = 0; i < NUM_SERIALS; i++)
                {
                    d.push(createNewSerial());
                }
            
                local obj = { "Data": d };
            
                Engine.dumpAsJSON(obj, "../Serials.js");
            }
        
            // Uncomment this line to regenerate serials.
            //createNewSerials();
        }
        
        
        
        
        
        
        
        
        //Serials Instance
        const var SingleProductSerials = {
          "Data": [
            "O83X-AT20-040F-8MJ5",
            "K0XE-06PP-31T0-5EUM",
            "8B6P-57Y5-8D1M-NYY7",
            "6BPO-6YAN-QE85-AH4M",
            "1HP8-6XKO-K3TS-WU2V",
            "L0Q5-T56B-7VHW-ED11",
            "S0G1-5677-0NSF-0388",
            "H48M-6C66-QPC0-G06V",
            "BO6W-4W00-HJ05-360D",
            "0875-72E7-0K45-8B0Q",
            "QDXX-U33O-A021-56D0",
            "7D45-DB07-ODX7-I8C5",
            "8TID-4827-85J8-68OF",
            "2UBC-RJOY-H523-X6HN",
            "R83L-30OH-611I-5U38",
            "B1HN-78EG-BA2Y-CJKU",
            "X880-I53S-HYQW-53H2",
            "A1W0-EKR4-85HR-3008",
            "3P1U-H5K1-332C-XA7L",
            "2T81-8ESJ-72I3-5H3J",
            "N20V-2118-22OP-BX3M",
            "1XLA-QE5Y-AJH7-1WCQ",
            "MKLG-5R1E-PO18-QT6P",
            "Q0LP-P7K8-534K-0HNT",
            "4852-8101-LCK2-02UJ",
            "MW7Y-MIR8-5D5Q-3Y8Y",
            "642B-73UK-XTJQ-1Q2G",
            "6473-2682-RXJ5-61P5",
            "PS6P-OUND-KU74-P8NL",
            "U6GT-3714-67BD-GC5A",
            "50UV-NOYC-7J22-8301",
            "261D-YF08-F0VM-J341",
            "A413-85GV-5H76-1887",
            "5VUF-ON0D-HL5X-U2SW",
            "K0PB-V05H-JQ4F-RQAK",
            "P38G-T6F7-GW2C-O233",
            "FYYU-4QOF-N57T-AB82",
            "03MN-4K2W-IMQ8-5OX7",
            "U8NN-0BBB-105B-J2YL",
            "QNJ4-LHLE-XX5H-3U1S",
            "8WMD-1I74-28MX-N0CE",
            "450V-4J2T-4F55-866L",
            "KB8Q-RC25-6RNP-7L6S",
            "6FVI-GBGB-PQ34-S127",
            "FG52-1C52-8F08-SNNE",
            "47HV-RBI6-2LS5-FYMY",
            "2CU7-8E7K-O5I1-24FH",
            "242O-K864-OSJS-5210",
            "75KC-XR5W-L0BI-I556",
            "26JR-3634-V63S-626P",
            "33L2-Q53B-2CFX-XO21",
            "0FWS-6PS7-AR30-6T2N",
            "38LX-UKH4-3IYA-RWFB",
            "EII5-4417-6RJ8-O20B",
            "3085-30DA-6D73-6T08",
            "E684-F47M-T540-1E5L",
            "5U4Q-62CS-E70F-LXTY",
            "PMFM-T8NS-CB5U-L6A8",
            "6020-58ON-BSI3-2328",
            "8JXC-7EM5-2JR7-86RX",
            "MF62-218P-IP0I-0508",
            "R6IK-337M-DM6T-S7JY",
            "U36Q-12IT-KA6M-770O",
            "0267-37QB-EP3U-I04N",
            "J11X-25MJ-50P7-70VW",
            "8KM1-R741-K337-H461",
            "D3C1-DN4J-0RO3-4U1G",
            "686P-H533-0MV7-UG81",
            "R1PH-SGL6-18T6-761B",
            "2VLR-0GLY-72G6-G074",
            "86P5-R7YT-5754-4I8L",
            "71NJ-SPIE-RYH8-7AF0",
            "PRN4-2207-SS5N-34VE",
            "4H84-Q3NI-064B-6YH2",
            "QQH6-EP8D-4XMC-N465",
            "B674-PBB3-HV3B-K5IS",
            "Q5O8-8GAJ-4RI4-J6VL",
            "K67M-7168-T503-0OV8",
            "Q70Q-MX06-28X0-G7K3",
            "S07M-J84E-R415-K57S",
            "I333-YO7L-2AKM-66TQ",
            "SO25-3QRV-207R-2AU3",
            "3VT5-T2Y6-C256-GQF6",
            "WV3V-FU51-8344-IS26",
            "TX56-6B10-XHLA-82O4",
            "IFB2-42QM-C40O-F4BM",
            "137L-RQ7W-N8R5-1BT0",
            "A210-8DMX-2P48-8172",
            "0463-44BX-VFS2-0X2F",
            "Y7J2-V831-S537-50BP",
            "47F7-U34L-C1CU-WACG",
            "PNF1-46VR-04RX-3XBE",
            "QD10-0IOC-OXK0-A786",
            "13O4-1V34-505E-1B5K",
            "C86K-J337-UXPK-68V7",
            "0IKO-43MF-4X16-245J",
            "G560-QKE6-44X6-YJJ6",
            "4026-1VB3-7H5Q-7J6D",
            "CPSL-00A5-28Y5-PS26",
            "E51O-01NK-E4O5-C540",
            "6FLJ-7OYY-84GK-J2E7",
            "VO3D-GI2R-58DJ-353Q",
            "1X53-S6VO-T5X1-A8LE",
            "QKOM-K123-HJDL-3OJD",
            "KGUT-4YU5-N6HB-SG88",
            "WB12-X8FC-20G5-A4L1",
            "35A7-D5T1-UB45-W6P3",
            "FL1M-U8B2-7VHK-2STF",
            "1EE3-R2S2-7N80-H440",
            "T08X-4VC8-0B6O-4025",
            "ML34-EI48-3858-LD4L",
            "06PW-0751-2M03-TLT4",
            "LEJ8-5048-AP4F-7TS2",
            "G514-88M0-VAI4-007Q",
            "0MF5-12IA-DQXC-B33Q",
            "ILD2-588O-8QG1-F88B",
            "646L-2V7S-78D8-T484",
            "M161-O020-166P-3P2G",
            "D18V-4278-PY1R-MQY5",
            "1V3V-G15W-3EHX-MS4H",
            "5Q04-5655-4300-85MH",
            "4N0F-K17Q-JW43-K8O4",
            "4I24-4KDM-FY2X-FF5X",
            "FBHC-Y77E-F86N-7XF1",
            "831R-G71G-EM7E-UV05",
            "TG0P-06S5-1FJ8-NN23",
            "V03I-TTJ7-WTMR-6KT8",
            "W2BG-K0DE-M3G2-8A04",
            "4281-742V-T6CX-BQ84",
            "123F-2053-7D73-M5F1",
            "36MO-6C70-RMIO-U6HR",
            "W22R-5J33-X321-L8TB",
            "LV1M-P8QF-66A8-55A0",
            "4V2E-MBHN-1417-03AM",
            "08DH-01Y2-C0Q3-4568",
            "N35Q-68GV-EW16-20UI",
            "J7TN-757N-53VO-F213",
            "5I18-3WA0-1J31-D55J",
            "FH86-02PQ-1F8L-K0AN",
            "BXUA-2665-75Q0-51W8",
            "SB32-J7CX-5OJN-T5AU",
            "B8LP-4L5H-4CL0-R1AQ",
            "4U22-I167-8VO1-80Y8",
            "YJB1-3IPB-B0D3-7DG1",
            "E7E2-KINB-2P24-6480",
            "X4HT-02UF-64EH-516J",
            "ONUN-76IT-LHQG-K2E3",
            "D23C-5BXP-8H8D-I4I3",
            "186W-5686-10O3-2S6E",
            "KU2O-14Q7-1E6X-06EI",
            "0608-0A02-816V-8MMY",
            "WE68-CP05-QFJJ-Y63V",
            "W0V5-E4M2-668J-7R86",
            "BLK1-4GR7-PK64-TY53",
            "AW8P-16HJ-R47C-58V2",
            "6GE7-5332-1WP3-MBAQ",
            "MW6H-7I67-J060-ALU7",
            "5U5E-DH18-IS8D-61NG",
            "UT1C-7B7E-802V-00T6",
            "CQ14-CUD5-F1D4-Q5OV",
            "KNPP-F5A2-4527-8E8N",
            "2Q5Y-JE7O-4C35-VO1T",
            "5Q3W-1AVI-7T73-NI78",
            "6T37-S7B2-0XA4-WG0Q",
            "63OS-Q3TE-UN56-33OW",
            "E80Q-T7I6-DDJM-E558",
            "C543-4KG7-1GMY-J45S",
            "SFOX-0C3J-VNL6-0C1P",
            "SBV7-3MBC-6CPE-O615",
            "Q436-14C5-I216-C02F",
            "8B6X-TW41-451R-BJM0",
            "T12U-4KR1-318B-DCP0",
            "8U6G-E0HQ-8333-XF70",
            "71F3-4254-72Q3-W1S7",
            "ACNI-JTAQ-KT53-JJ12",
            "8Y06-20I3-6ARW-2AF7",
            "L1SS-8422-L228-86MI",
            "7KND-6I2B-7AHV-576G",
            "1UN4-JNI3-IQ87-0MV5",
            "836F-C713-TMGV-AUXG",
            "5SIA-UBFC-1U25-786I",
            "F6J5-40R1-1XEL-6551",
            "5JJD-U0LC-8H8N-4M4J",
            "1N0H-GD27-O7EI-4B3T",
            "0VU8-G584-0E57-A3PK",
            "0GD0-324K-13OO-3F1D",
            "X03G-3225-2H7K-3U33",
            "T6SG-G8M2-6AYF-M1K6",
            "YBXW-VCCI-3Y2J-0C48",
            "VN77-6R0T-WW2Q-KHO5",
            "1028-N4EP-H442-3JVF",
            "1M8U-JJ18-307R-J8D3",
            "1N64-6AAI-05R3-NUV7",
            "65H6-2103-KL7N-0APU",
            "KA85-RR7Q-2M68-N355",
            "4JBX-0OW6-8D6T-2057",
            "8S57-16H3-Q2C5-6PA2",
            "HDDY-85WC-88B4-3667",
            "K30F-JE8Y-54XF-7XEH",
            "3B30-H301-VJ2R-MXE8",
            "26J8-84B0-TY61-42IG",
            "PNXQ-NN0T-14P8-3XP0",
            "3A37-YNF7-WHFQ-1N77",
            "01Q3-KT53-15A3-C65B",
            "6JD6-603A-JW4U-Q6I7",
            "DHPG-L236-KD82-RS00",
            "7YI4-YRSY-HP8R-6J88",
            "KP14-7ACA-2F57-42X2",
            "1D76-W583-GR27-0H4W",
            "P1Q2-V1G5-VF0G-10EQ",
            "N66R-VY82-DS5Q-BQ63",
            "616G-0YJ8-0A1R-82QQ",
            "01EC-JM5V-1A3B-OS7V",
            "T1KS-DQ80-E4TG-77QB",
            "675E-GAUV-BK41-1JF6",
            "63LA-6J30-2WC4-3M56",
            "46R5-QTYF-3GUY-YHBP",
            "6072-NVL1-QIY2-W4SF",
            "6B35-1B33-83AF-7N5G",
            "1FW3-Q6YL-4451-ND34",
            "860D-34PT-43P3-6ICB",
            "5255-WBR8-300V-255A",
            "BP8I-4NOU-T888-P1E5",
            "BYPD-AF34-73Y2-80ST",
            "31CA-1446-U50Y-TF22",
            "7OY8-U6KM-T106-062D",
            "JC7J-MQ4C-6SY7-K6RS",
            "XU70-51QG-E74S-VQTR",
            "VWLB-LQ64-Q175-T8RP",
            "P840-C8OG-0DU6-HS3I",
            "VOSS-8MMD-5XAV-767E",
            "6X8R-3J10-3200-GVWC",
            "3R4P-T270-L7E3-11G4",
            "35LR-JON7-818N-7W86",
            "K4LE-4I78-F7PB-K382",
            "2KIM-S101-DL04-6762",
            "3526-02MM-AMCY-73M1",
            "K4L0-X453-84C2-CYLD",
            "7763-EA0P-0758-TWE5",
            "F1KC-1DDE-40S2-4O8C",
            "04J1-Y5V5-WN82-W0JG",
            "W3SY-YS5J-82HL-VL3T",
            "1V85-JR63-85CU-O5YK",
            "81K8-7L38-752N-TGT0",
            "BFW4-44O7-84D8-137Q",
            "135A-Y251-7IN8-2JWO",
            "L5GT-8B57-AT7U-YS85",
            "BSGB-3NPW-N3X7-BE0V",
            "2052-4F7I-VP14-5633",
            "INWT-13U7-BEL3-T6V1",
            "45LL-B0M5-8MVQ-2ODM",
            "G1K8-0SMG-52OI-5326",
            "V0WE-8JE1-0LQQ-B32U",
            "GC63-D4F2-HK17-1040",
            "P6LR-85EA-L8DR-3Y65",
            "3A5P-G5J0-8I0C-3RB3",
            "6NF3-5RVG-6TXM-O773",
            "KPNI-3P77-4LG7-17K3",
            "257S-8U2C-M8A7-3HFX",
            "A4DO-2HUX-022C-K2WF",
            "71TT-56AW-1IA3-R776",
            "JM87-7B3K-O02W-E71J",
            "1C67-Q8VG-3E82-5N1E",
            "8QPX-HJQ5-3N2H-8Y6C",
            "5DWN-RW81-3H0N-7IY2",
            "06E3-1W4U-WP80-7R3L",
            "73J8-7034-5PY0-2R2L",
            "LYXG-M137-OX6P-SO8Y",
            "X2K2-6TJ5-0S20-54CN",
            "236O-62YM-32S3-3BP5",
            "J8P3-41IY-8SAB-SGER",
            "6CBF-V688-Q2AC-JPIV",
            "0YB8-6QK7-3J8G-XOG4",
            "X6WQ-8P3H-5CG1-865O",
            "DM11-7J27-J0UP-1A2L",
            "41H7-P70T-4R2D-6875",
            "P180-7QE2-CP5F-L0GN",
            "5AQV-3P2U-1KA5-1A2A",
            "XN5S-J8R3-A1V6-0DUN",
            "8G6H-TCIY-87XE-H62Q",
            "2U4T-4210-R5SN-MGD1",
            "1732-7JMS-16W3-Q843",
            "83Q0-4D63-0Q54-1372",
            "JT13-MYD1-4UAG-HC76",
            "345S-FG1W-1380-D3X0",
            "32K4-3YMA-8UYK-4XCM",
            "AHH2-01J6-8337-I07A",
            "OF80-O573-401K-GV4U",
            "1YN6-E8TX-LS6J-5U18",
            "RUMT-IWO0-3IB4-BXO4",
            "3YG3-K586-6XQ2-O615",
            "M1MX-H7M1-3KJS-BJ5D",
            "L78U-MG4N-B6X6-855A",
            "H4SM-4264-6CHT-5UJ4",
            "4JX0-32DX-5CHX-YN21",
            "5UU6-36D7-W6M0-Y808",
            "2RJ5-AGF3-SAWQ-KT76",
            "1W1J-8B0W-BVE5-D3J4",
            "C3BR-2Y8X-S6KF-7727",
            "3R1A-D67X-87CG-MSU7",
            "380E-1641-6DD0-X2RW",
            "F3W5-S70E-0NQI-5LKM",
            "3NC8-6WU7-08Q1-17RQ",
            "MD0R-I46X-45T8-58Q0",
            "4YM6-26DY-8W3B-65P5",
            "W1BE-BBQ2-BE70-YIT8",
            "LG2K-LX27-X1ND-022P",
            "2O51-R5GW-IC27-VRP4",
            "18YO-100H-6WK2-W808",
            "PJQ3-BRAX-P5G2-BUY1",
            "6757-08S3-7JK5-5Y47",
            "14Q2-3C7F-P621-3H53",
            "24X0-J5Q8-6S28-X616",
            "UNJ2-88V8-058U-F7AQ",
            "5I10-J7D2-P14R-1XXO",
            "XPUK-73ON-AH77-Y713",
            "U6UA-T7Q3-LQ44-3ELP",
            "2SVM-P444-7513-P20X",
            "TK3Q-5M3S-NQ4K-G60P",
            "Q324-2CY2-5WG7-PVN0",
            "FXUW-N271-532A-7U1F",
            "MVID-UGJP-VH1L-06GJ",
            "7PT7-35C7-52N2-F4MY",
            "400G-5Q1H-0250-42XI",
            "7QWS-I385-285F-8UPY",
            "787G-R74J-284G-7OH7",
            "X527-JPSA-4T36-IN50",
            "85M0-2661-QVQ8-7CL0",
            "LD87-XLQI-07WL-5WJE",
            "04DX-4677-II5G-5N6K",
            "JBE3-124F-1U11-87OP",
            "7484-NR12-301E-QI31",
            "NUB1-XAS4-5475-1WA1",
            "PY8V-07PU-P5G6-E77P",
            "8HN2-01C5-8C5R-IABA",
            "5N8V-K780-3SP4-0J85",
            "UC8M-HIY7-7B01-DR10",
            "51EV-21FF-2Y1K-02R1",
            "27O3-5THE-78PJ-WAP0",
            "1J8D-V138-7717-V45P",
            "E4RQ-2R80-O83G-YWOL",
            "7P3I-67U2-EL25-B4WQ",
            "Y5L5-717S-10S6-A7K2",
            "1444-R420-S164-0P5T",
            "A10Y-7MN8-M08G-0545",
            "703P-1MX5-1V23-32D1",
            "770Y-OI7M-IWM8-KTNA",
            "54BX-I848-U7B5-3H2M",
            "UF47-BNYX-D3B1-0R8J",
            "HYG3-00W6-4360-254R",
            "5402-F150-UAJX-UM0C",
            "2271-07YR-W6XJ-1P7W",
            "EGPD-43U3-U806-I3R4",
            "H37C-KXR1-83NV-O02G",
            "U24E-1J67-07TI-NB37",
            "WME3-J78S-V735-W5SP",
            "E0XP-FQ62-2Y3B-G5U3",
            "8TI2-A6H6-H75K-TXOX",
            "P314-8471-7IIK-0245",
            "H7P5-WC74-TQKS-LUD5",
            "U6PE-W17O-8TB4-S533",
            "6781-83CI-I856-440C",
            "O038-P2FQ-JY25-1226",
            "5Q0A-VST8-828H-3J64",
            "S555-65IY-7XK0-FF67",
            "73K1-CWNE-88GY-2P8S",
            "M6G4-R83G-3MKT-37V0",
            "0AXN-XK00-UBM4-16M5",
            "6888-16NA-HU7K-NT5M",
            "S242-QIF1-A3J8-07Y7",
            "NW54-3R5B-K32K-X34E",
            "OI22-15J7-1O6M-X3FO",
            "4SY6-5H40-3RGD-GIM5",
            "4TNW-30YV-U4CX-M7FU",
            "324F-1JMD-AJ72-8733",
            "16LT-6368-1K00-PWAI",
            "POXP-2PS4-VJYF-1E74",
            "IQGN-131A-05GY-Y1C2",
            "83R7-I884-47HV-6T5J",
            "HGMT-317V-PN8T-YN4G",
            "DS86-12DG-5M42-C8NL",
            "4O1D-B7A7-DQAT-DX0S",
            "1520-7K44-XPO5-73A1",
            "S61H-DDW5-VPQ5-40WN",
            "I54W-47G5-01H3-5Q8U",
            "D7I2-6O5Y-ILJ1-VI3Y",
            "636O-Y86I-X62S-GQ15",
            "VEH7-13P0-7B55-0S5K",
            "1AC0-21Y6-U668-J558",
            "H5ON-71W6-EP35-TN12",
            "8L3S-I7K2-RD6P-0577",
            "33GX-3Y7F-JBP8-4HQ4",
            "CAOM-570M-HX87-4C6W",
            "5EHM-DK5P-55F1-S3B2",
            "L273-80BY-8WN6-DOB3",
            "0NA1-PW33-LH11-M563",
            "N2E8-K8U3-31TC-FPXO",
            "5824-FS4F-K2YL-4S75",
            "575I-6L4R-KS68-QY50",
            "6W45-1N0U-2H1P-FLYH",
            "63F6-CL6B-60M6-3S1Y",
            "4E81-LL2F-5X3L-0B0S",
            "M51L-15B2-285H-87SI",
            "OB5I-1F84-W4AB-0764",
            "53K2-4243-BXEP-5XV6",
            "T63T-S4X8-HPB7-ROJ7",
            "YSWN-CSWS-2RI1-45L2",
            "6D3Y-OP11-7L3B-03RE",
            "1A6N-R818-MIG0-MFA6",
            "515H-2B34-T23R-PJL2",
            "2TI0-4272-BP2A-001J",
            "6384-0C50-512M-85O3",
            "C1Q5-837Q-6570-2P48",
            "7OT4-3648-856L-T50W",
            "E040-6X3J-NH5W-718L",
            "NXPR-LJU1-BY87-17W3",
            "7E31-1R8E-I4XB-87O5",
            "PV4W-638L-C5W7-1MJX",
            "3UT8-80P6-8H45-0QN7",
            "5E3P-0HQ0-V737-006B",
            "02XL-2ENE-E6S4-3MT3",
            "556N-0X1O-1JPC-X7JG",
            "8700-W60H-1PJS-6231",
            "23IV-S013-4D6J-14RQ",
            "GHD1-4R24-C34F-F238",
            "7HI4-C6HP-F638-6UD4",
            "I8X1-V56C-I521-Y00K",
            "4T35-3L0T-00W5-0155",
            "NHX6-W0X8-2658-10BP",
            "F3B8-70BE-87BN-087F",
            "XO32-DEP8-V765-5CIQ",
            "3C47-6Q4A-I666-1B7A",
            "I55N-3HS0-TAD5-J7HB",
            "T1G2-X300-X8KS-7522",
            "8348-2134-0VWD-4IBG",
            "4842-PU01-077V-6D41",
            "60MO-880N-1704-NT8N",
            "0466-5FSM-PC51-RAE4",
            "AUHG-7TRH-L561-T5K8",
            "EDN5-W1CU-T4W5-G123",
            "U015-27UC-1N1U-0O78",
            "HOM5-U685-V05Y-R0YU",
            "3WQ3-YGTR-7BOR-16FN",
            "DRM1-Y3L8-DLDF-TWHU",
            "K4YS-3SML-688E-5T81",
            "LUUR-26KE-GH2T-DHST",
            "C1V3-5L37-04BS-EHI8",
            "18DB-16QP-XD73-8C0M",
            "C2X0-PXSD-TIOG-Y4KW",
            "Y5JO-2740-HTGM-4BF6",
            "B080-1034-6Q84-ED6T",
            "WN48-X442-MWUX-WH11",
            "7603-5D8N-0Y12-1K8O",
            "IGXX-6RM2-5532-7LIM",
            "J516-23M0-1IR0-KTFN",
            "ALST-U28D-11XU-D0FC",
            "T78B-146X-2EG5-4514",
            "E871-J45M-RRUP-6S30",
            "AU0K-1Y24-AY15-3FS1",
            "338C-773T-6Q5W-D5GM",
            "7C6F-56G0-VT5O-L057",
            "3Y2X-3T74-Q2S1-NC27",
            "W6WD-41P3-122O-7426",
            "Q57C-08BW-EX58-BY02",
            "8J10-2508-P522-35VI",
            "VWVE-750O-T47J-5SMD",
            "4VV8-NJA1-XI0A-331R",
            "82QK-L1X2-4O41-0FDG",
            "LRR8-L507-8M43-T400",
            "8F5B-CPGI-RI63-36O7",
            "R4E2-AOX0-701U-6SO2",
            "0TM3-2378-X7A2-85Y3",
            "5MGC-3TIR-I4M1-P1B3",
            "3410-82QT-7866-0PQQ",
            "BL0J-V7N8-53SF-F5TC",
            "855R-P4K2-M151-J557",
            "N6Y8-5513-8GSL-V703",
            "04M8-LH7D-5AQI-IH87",
            "033K-7217-XJK4-50QP",
            "QO6Y-8S5K-AG6N-71TA",
            "BV20-0Y44-VGB0-KSW0",
            "658O-T01X-6VEU-12D6",
            "1F67-278F-8HUY-BY33",
            "MW63-XR2E-C482-WXU8",
            "UU14-P41Q-KY41-4F43",
            "M750-4L66-YKG8-P7SX",
            "6278-K453-DBWR-57R8",
            "I64Y-5TY0-5G1E-VW3M",
            "606Y-T83M-5G6J-26DP",
            "O4AR-X16O-7DO2-K828",
            "8LY1-047S-D033-TOQ1",
            "3122-2FF4-4Y67-D4RU",
            "5024-27Y1-2XO0-PQNH",
            "F535-WDDF-11N6-V37M",
            "21FC-QMIA-DJO2-3V0L",
            "1285-F100-7MU4-7Q6I",
            "4KEX-TMW7-E604-JI2G",
            "N757-F0C8-JT8L-516X",
            "CVL7-C28V-3884-5420",
            "1J0A-QDY7-3ET1-ABB8",
            "I27D-KLVW-JI8Y-N3BY",
            "T2Q2-CYW4-4P4P-3PT8",
            "08U7-7Q5V-KP7P-705G",
            "62F4-OX4I-WN10-A2VP",
            "5542-II72-MPY4-87JE",
            "6FG3-87C4-2476-10QD",
            "H428-6F10-L3DY-5A1C",
            "3EWY-O08B-8U11-0KM3",
            "K44X-JRY1-J02B-CC3U",
            "833F-P8Q3-SR6T-21AR",
            "3V36-8T1M-0667-522O",
            "8410-C28R-0KX8-2LB0",
            "857A-AJC8-GQ36-30O6",
            "V18B-137I-842Y-6OYP",
            "57LJ-3L0H-0QPC-Q42G",
            "4342-GC83-J5UU-AP8Y",
            "QI2C-T5X5-I6H3-2ELD",
            "HHY3-2GD4-RH88-4655",
            "3JQ7-424K-TQ77-63X5",
            "K35E-XK1O-07O6-P64J",
            "7O41-52M8-5L66-DIK0",
            "4163-1FGM-8Q13-6T2W",
            "HW33-6M7L-84M2-XK66",
            "XYUT-A508-I2Q6-RY34",
            "LP76-BH64-5717-EE3B",
            "226R-L2KD-LL44-G81A",
            "5030-6U2Y-S7S6-F4G7",
            "0DT2-TO6G-240W-2G7I",
            "C7E4-382H-3S4F-O562",
            "7XU1-WD3T-ANC3-5S65",
            "M32K-GL08-803L-V71I",
            "2CR2-4222-1J37-71O0",
            "KVA8-3721-5W67-00TW",
            "8U52-NN05-3II8-5537",
            "4G4T-XYS5-8G4Q-B366",
            "7LW1-8TD3-518J-V282",
            "RMC5-8IAD-1225-11S7",
            "385I-VNLD-3H5L-3Q02",
            "6E3N-A2BC-M230-8Y1G",
            "IPMG-JC2W-060N-2624",
            "4M27-2OVV-MA38-LKB5",
            "4U84-44M6-NN07-Y75S",
            "2OWE-87WW-NI4L-NV22",
            "UR04-V770-G43Q-56E5",
            "8MI6-87H2-6JMH-2326",
            "8037-8751-5L42-XW73",
            "7YSG-246U-M0BM-111I",
            "D100-3XN5-8048-C1QU",
            "O048-JJY0-472K-BN16",
            "CE2F-T23H-W13D-UI36",
            "S012-67R8-Y850-0ML1",
            "RP1Q-55W1-FHNS-1Q8U",
            "6H18-168S-6633-A7WO",
            "FAJ8-5C2F-87EE-10EH",
            "547G-84C8-4AO1-VR58",
            "0E26-7633-BIKM-I07C",
            "XL6Y-262B-5272-D0MM",
            "D11M-8X6P-4LGX-4FH8",
            "WK4S-R01B-M055-5Q70",
            "B0G3-PJ4O-A55O-V62L",
            "2HXI-82EB-TQMW-Q155",
            "3511-DK10-B8W5-3A8C",
            "8GIN-6T6J-4381-M406",
            "I517-B5CF-CM0F-05A7",
            "51V5-WQGF-HTV5-E76F",
            "V743-3W72-R24U-TMBT",
            "P1VP-F82J-473N-QLQU",
            "AS78-D3PF-2000-F1H2",
            "WY8G-LUA1-4BY7-IX7O",
            "64AI-52S1-6E71-W224",
            "ID2F-18MA-255S-OFCE",
            "8EE1-807F-TRDP-L5YT",
            "0PS0-GR48-5WN3-2R11",
            "AD47-530P-PWC5-U7T3",
            "VD6A-N6Q0-KFR5-40BJ",
            "HM6F-2475-TPAV-MX0K",
            "IS58-F62O-1GOU-I5N3",
            "71F3-10U0-FU0H-6825",
            "C862-4744-QK5T-81B1",
            "D24O-33GB-FY08-8O1H",
            "7D66-2YVR-60LU-1L0W",
            "357N-IX31-6R67-A64Y",
            "QS18-82T4-TP30-EG62",
            "5ED1-MK8O-VPOJ-W8NT",
            "SJR1-EKD1-VW87-B7HO",
            "S4VJ-PQ0V-861H-I336",
            "4J43-B560-G382-E1AM",
            "85SY-6N48-L3L5-7S86",
            "53B8-6G70-2KC6-J0M2",
            "SE4H-40LI-74RK-BK7X",
            "JSB0-00VI-3V1J-53W3",
            "X3O0-VMF5-KRQ4-76A4",
            "ES55-TJ67-G77D-44KD",
            "O08E-DA53-V773-U8U2",
            "67J0-174D-0J16-2PLY",
            "5VBX-60GU-3YE6-2543",
            "P440-368B-335G-62HJ",
            "V5TX-NAJ7-I4IY-0IMR",
            "U4N8-O0I5-3U03-X502",
            "BDG1-476F-52U6-62I4",
            "T733-OBWX-I2RK-82H2",
            "1TH7-PM00-JQ86-1G77",
            "NAE8-7U67-1W80-N3M3",
            "VDG1-W1GK-2J31-5OQ4",
            "WKX3-3013-234W-J2QX",
            "XB63-0D23-OG47-7084",
            "65X6-APU3-5387-0100",
            "KMV0-L1JK-5SJ8-P657",
            "W0Y3-85D0-JLQM-22WX",
            "10OJ-801Y-0536-46YJ",
            "L665-2V6Y-2HLQ-D252",
            "G10H-8DE8-3672-5K07",
            "0R6C-AY2G-1J7Q-G8MH",
            "11EL-3476-T058-UN28",
            "0W58-JOW5-HLS2-H21J",
            "210C-1RJV-16QW-28K6",
            "K50O-IC8H-6EL6-O688",
            "68HR-7IQW-JAX8-X4UY",
            "E55W-642V-4JTO-185A",
            "T4BH-1A8X-213G-6O60",
            "ES3J-3544-BK2X-27E8",
            "3LK0-NQ61-C4G4-0620",
            "7P4Q-A11D-6T0D-L7L1",
            "DSFF-YF58-1T05-MT4K",
            "XF35-1R41-02R1-2D4V",
            "4KX4-1KPR-XBV3-585O",
            "4613-8L20-5PCY-SV0C",
            "8G26-UH81-L037-HB14",
            "0KET-6188-RS4P-S7QN",
            "6243-75SJ-W78R-N014",
            "5U1Q-670P-52PU-7AB7",
            "02GA-W136-L153-3R5T",
            "A065-R36P-XRGY-IGKX",
            "77M8-7FN8-N4M7-5BY7",
            "357U-C676-36N1-15J6",
            "34YP-EXGA-CI3F-QO86",
            "AL60-GEWU-UPE4-G23N",
            "C8LL-PQ31-BH32-S476",
            "HB2A-2C37-41B7-MRND",
            "L74X-13K2-VD35-610E",
            "6Q74-WY5B-SFX5-67OX",
            "U2YJ-1574-15YX-SA15",
            "8578-X5TV-H4IV-1B38",
            "77J3-5C4L-KBY7-G153",
            "M716-L38B-IA75-47K7",
            "12KO-W5C5-4F8R-TPAG",
            "55WW-W18W-4A27-DX4J",
            "L0VE-E8L4-8GIC-2R45",
            "U4K7-2DJL-727X-NE74",
            "6217-0C3A-0556-8B0J",
            "080H-5A48-P43D-WYX8",
            "0P5L-458P-GK4J-7MYX",
            "811Y-2H08-G744-5GKF",
            "33Q0-YBP4-WBU2-J2LT",
            "21XJ-CLQ5-XJ3C-MNBO",
            "RJL6-T1YI-4MO5-L507",
            "3P1G-87FJ-R2C1-UVW5",
            "753U-GRY8-1HWW-128C",
            "Y710-D4B0-JP5F-DQ25",
            "O55W-74N4-755G-RU2H",
            "R0C2-3M2P-386U-02M7",
            "1R5M-7OHG-T2MH-5E25",
            "BOHJ-AR72-7P8J-8W4C",
            "SY5G-QKJ2-32V4-WX1L",
            "020V-6CN0-5QU1-J636",
            "17I5-RBN0-34YV-5616",
            "NIB5-58G4-X8W2-8602",
            "YO31-L6KW-M6C3-3011",
            "55CL-3FIC-22N0-B7IX",
            "3L03-VR65-U4KV-D304",
            "2R52-67LY-RW87-7EOV",
            "G63B-U1D8-66YA-O3S7",
            "L0AT-1G60-E41P-FT58",
            "FM22-HVG4-XCC4-56W7",
            "333F-BQ28-0OTY-L04U",
            "H0N3-82C2-7EQ7-MJ8U",
            "FT65-ER35-B54E-331N",
            "INM2-O7O0-2A03-E0LF",
            "C5NW-F2XQ-IXHY-BH30",
            "2208-033Y-H44S-312S",
            "LHD6-I8RS-K03Y-V851",
            "O477-OED4-2671-TYK3",
            "707H-WFQ4-FOT3-8H43",
            "4FBH-6D43-J052-XL6P",
            "BI03-OR0G-7O0X-8188",
            "0S6N-1D85-T228-4L7A",
            "MGU2-O5W3-57JQ-LE4M",
            "H845-HKVK-X86B-47G5",
            "8L5E-GL3P-785M-D83O",
            "XAX3-4DJ5-8I60-AGS2",
            "17D6-YU63-N7MR-0S2X",
            "3305-GV76-XF0T-B2RC",
            "J877-F20R-43D8-11O5",
            "4L8F-G4T3-M1LX-3M10",
            "ILIM-23Q1-1I32-B328",
            "U6HD-6P65-2A7P-XTX3",
            "JRR5-JM51-A1DL-WRW2",
            "OB43-FN33-SESI-YRY7",
            "E7B3-3058-J43H-YU01",
            "14F4-021E-N55F-M170",
            "ME41-4WX4-3L3R-A5RU",
            "TDUN-NP02-8225-NJVA",
            "U6AC-A418-64QT-3RY1",
            "6RJL-2S64-25HF-6LK2",
            "WPBW-7CA6-UT5F-O3F2",
            "4475-4014-CIGN-62R7",
            "CI26-3D3E-GGV2-L52N",
            "67W6-N563-418G-72R4",
            "8L7V-2N1N-D4S4-6V7T",
            "D5F6-68J2-576B-08J3",
            "306J-5G5T-1WBB-74K4",
            "8XX5-1E0Q-52L7-67NN",
            "08OC-XXE4-V1H1-4I3D",
            "JKMR-HF27-JR82-3L84",
            "R8M6-4WVM-VXHM-52SK",
            "5K87-7CIN-8J16-60U6",
            "477F-33Y0-RFDV-2D3T",
            "2M14-AHL8-YU1K-CM72",
            "08PS-I4G6-6HC5-OK58",
            "2UB4-5I86-PU4N-2OFJ",
            "PV3I-22HY-R54L-7CW6",
            "GDVP-Y5SS-Y5H4-W742",
            "427G-XX4U-8OAP-C286",
            "5600-FTYP-4L8N-0GMW",
            "31C6-AOPA-6BN0-F2XN",
            "80C8-AXOQ-22L6-DC48",
            "T38B-4754-Y078-I2Q6",
            "IML4-807R-V5UX-W6E3",
            "U0VT-CV8V-03I0-1W06",
            "GNS0-57UU-S8AO-SR2M",
            "42R6-8EB7-QE8L-GLL2",
            "AD04-7868-U27P-4QY1",
            "H064-GMPP-O13L-H053",
            "P0R8-L505-I054-3OY8",
            "3F6Q-4187-0Y08-VM20",
            "GL01-S427-BY24-Y325",
            "RU8D-M116-5500-3NVA",
            "EWTY-K1C0-7Q8O-T32X",
            "8HJ4-3GLI-6AD5-80Q7",
            "5437-556L-IQVS-8D88",
            "M0KX-2CRI-QBHR-28UI",
            "8XG5-143R-4FX2-OO78",
            "J26E-4S60-LT44-EVUS",
            "LF4H-20RV-48DQ-30PA",
            "8O5P-RKX5-2MQD-5F03",
            "5H0V-1622-83A4-0K57",
            "TL78-2RM2-0XOH-5AAT",
            "8UX5-3N62-0W8F-BXQ4",
            "B883-R5JM-1K48-S65W",
            "33T0-878K-XSVP-F05M",
            "5CE5-71RS-700W-XUG3",
            "1602-501I-60T1-PUCT",
            "3PP0-3Q6T-4855-W856",
            "3HU5-7A3B-7E87-AWV5",
            "0246-OV0R-X47F-1G3X",
            "75S7-VM2P-E6D0-AMRA",
            "5G70-132Y-T1TI-8S6X",
            "55A6-338J-754J-72V6",
            "65EQ-JVMW-JIQW-2SJD",
            "81H0-11BX-5J7H-F5U6",
            "1L15-B2NS-4B7R-NP4E",
            "B2LB-1BTE-211H-BH76",
            "78YX-D2UY-OTQ5-0K2N",
            "JU33-SJ72-5GGC-747N",
            "JGBH-KSCK-0TXC-S723",
            "063D-U772-XG28-2878",
            "0G23-UO73-GLR0-38AL",
            "BC0L-1P22-7C04-0T30",
            "N625-1T4T-0452-D5G1",
            "C11D-4JKQ-RWL4-3I11",
            "53E3-0DBV-M852-04C4",
            "7M3L-5ADQ-4I8A-DG28",
            "XIBI-7LQU-8L44-T5T7",
            "27J1-M57V-4760-7P4K",
            "R5B4-EEQN-4OP6-JT1Y",
            "GE4M-TY31-61U2-OLP8",
            "5TUU-H87S-SW7A-677Y",
            "HJ32-T4FS-E01U-6QT6",
            "2Y25-GN07-1PL7-62Q7",
            "1141-JCAO-1RL2-6V71",
            "7X7U-TY5O-U203-CEIC",
            "H231-B4QF-4YD1-G8E7",
            "072V-3BX7-4D8I-J2G7",
            "YAIM-O6T5-1DQ8-4C0H",
            "C3V4-A7F3-280J-8P6L",
            "MW6F-I3A0-0R0R-GA28",
            "61DS-4IB7-Q562-76N0",
            "I7GS-J68X-LH1W-A3DM",
            "3PR7-01J6-05PY-68JT",
            "Y2E8-7EJ5-N55S-7TPH",
            "Y648-83G7-AP51-E5Q2",
            "Y6SX-853H-XA24-11Y4",
            "G414-DCR2-W2N7-J05T",
            "66GK-QYHL-8YD8-WJLL",
            "Y53U-42CC-8U31-FK52",
            "QBK4-F4N1-I7X2-00C2",
            "Y726-1SU0-N2I2-DF26",
            "L502-5537-M47E-6S30",
            "63F8-XSMG-6860-YHD6",
            "R48C-7WU7-0821-CBK4",
            "0E4U-6H3E-WE33-XSQB",
            "6E5Y-15N8-1BL2-210S",
            "24RY-3782-3VTB-SFW5",
            "41JX-X476-ECW7-7K10",
            "T8D6-Y6BQ-45NF-23A6",
            "6I08-3AR8-T3C8-C214",
            "88V3-4JT0-J237-RLN6",
            "82O5-8D78-1JF2-YIS8",
            "338L-WPJE-O30W-38X5",
            "Q570-256C-0UNV-5X8T",
            "0T65-JW03-HBH2-HW1I",
            "I3I8-M3S6-F2Y7-PO00",
            "V407-08OX-R2JH-X4CF",
            "6C03-L5I4-32O6-47JM",
            "3FQF-8A6B-G0V2-828T",
            "518R-V45E-S63G-A87K",
            "ONTW-QGUG-0723-56EC",
            "NCBC-6VC8-0G63-7QLA",
            "R71K-U668-6J1O-43B0",
            "0N6F-K7N7-VP05-7C1E",
            "86DN-5E1K-7ADE-C3M4",
            "G18H-LLSF-RKY3-5IWI",
            "3472-XRDS-KHWN-E127",
            "6BQK-S1V7-1JEI-2810",
            "433O-1QRS-8052-6O5J",
            "F0P6-A8YH-GB1I-2N1U",
            "3446-BTQ0-KM2S-2WA7",
            "LQ03-M86B-34HL-02WU",
            "S21O-PXUB-51H7-BKE8",
            "1D6P-Y224-72N7-D2A0",
            "Q0HT-47R5-I655-J70S",
            "XS22-6QRL-NPT6-2T0R",
            "48V2-460F-T4Q3-M83K",
            "QEOV-75TE-K012-N6PR",
            "I4XS-1U7G-HI5G-611D",
            "83OX-P3G7-E3CL-6XU0",
            "KQLY-6RU1-X6I5-581D",
            "2UFI-0A6L-R7Y6-F0X2",
            "810K-40B4-LNN1-0B65",
            "M6J8-H041-U012-KOI2",
            "1JBT-TJ25-2A11-1PR2",
            "N8K8-38K2-3P3D-I4P8",
            "X4NV-RM88-RP12-X474",
            "K665-303Y-UY0V-1O1D",
            "7060-15OF-844K-2KJV",
            "DUA3-4A0Q-X86S-B15M",
            "R3D8-3612-K8QV-65N6",
            "N3L2-J48J-N2Q4-BTRJ",
            "OMGG-IP56-2210-273H",
            "7M26-57MC-E17B-04MW",
            "BBV7-EOW3-KNL4-MBH0",
            "VX14-VY2F-3YTC-0865",
            "56O3-S17Y-GP8Q-4SW3",
            "WO82-Y8DE-N3W0-Q536",
            "2HKH-111Y-871W-458P",
            "YPVE-MBI1-MXKT-5402",
            "6227-V488-DK00-6328",
            "Q55E-BJD5-B8Y3-2IYJ",
            "XT64-03B2-E2JF-5555",
            "6A8J-HYF6-P4T4-541I",
            "0452-2GYB-R5RP-4FON",
            "NOYW-U236-WR81-F40F",
            "0P10-FTKC-YIP1-I2S2",
            "04DC-8C8I-IJXS-KY22",
            "M667-MQ03-5WGQ-HU5Q",
            "8VL1-M3DG-6RS7-2T11",
            "4LU5-NU8C-AQ01-M1P2",
            "1154-0HJA-4XB6-A1T5",
            "3H15-8P87-0QEW-X607",
            "2X08-HB1X-8481-1K16",
            "3YWA-7RWL-W7KO-BM54",
            "SWX5-N48A-U8LI-GD5A",
            "IMNP-SJD5-0BGK-282L",
            "4R34-5O87-PH67-L0SE",
            "18G1-Y4O6-I4L4-K6WK",
            "2460-J63H-8DK1-R3BP",
            "86TR-HVM6-6Y4W-35JJ",
            "678W-M1QX-U60P-ADWC",
            "X603-25JB-T411-R40Q",
            "OEG7-5G3Q-DJU5-IIOF",
            "R10N-41CA-QVY5-F652",
            "BN6G-0Q5V-PN03-ORSD",
            "1K54-SY43-00TY-26B8",
            "2WEN-XI17-B7EE-N4M3",
            "WF12-MF77-A7S4-1N3O",
            "4200-6XM3-1588-43XK",
            "7D8F-3O8B-7807-1140",
            "I467-VEC4-B0Y5-6Y34",
            "LJA3-3AFO-6A0B-25P3",
            "4005-30US-PE6X-2G1I",
            "L1CF-J6M8-7P7O-5AGM",
            "M58A-16KN-654G-YWG2",
            "2V0I-A518-BYXD-6XB7",
            "11J7-Y168-GI43-47HR",
            "W0U4-MJ2M-32GS-D145",
            "0BU2-K12P-5024-UQXO",
            "Q6ED-VN7N-GOS0-1H3G",
            "27R7-S0HF-082C-3742",
            "5882-143B-45TC-EIA5",
            "2KOO-RVKQ-3026-MNT5",
            "Q3M6-W1HB-2100-6640",
            "8022-I7N8-WYWT-M617",
            "CSLU-H6K2-N8LA-QSPY",
            "V21R-CLBI-Q713-OCM7",
            "O2K8-S147-GN3X-52C6",
            "RQM6-W851-VXO2-2O3R",
            "7655-5ON4-32SG-SWG7",
            "3W32-IM0J-N536-3NP7",
            "2080-B51C-A7P4-K73X",
            "66R8-AS0T-ROY3-EE2Y",
            "VH5B-0463-D4MB-7TUT",
            "E546-T0NM-P76N-8JN8",
            "GC6M-G01D-X27J-2I5P",
            "DE2I-BN2D-GA0Q-14J3",
            "5O2W-06GH-15C6-O3G0",
            "8F66-7Q4Q-7ON4-43Q7",
            "000I-SRG4-XG07-K130",
            "2877-4N0L-MW13-RIBK",
            "L2D6-R25R-3B00-FUT2",
            "5373-B5GS-8560-1XA5",
            "7PHT-56A2-5UQ4-W81O",
            "43FQ-V146-I8L0-5Q7R",
            "47N3-OO2G-P8E6-OD0T",
            "2V6U-42U0-LR06-W780",
            "PF06-6R28-QA82-Y5OP",
            "GQ14-G4YQ-22I5-SOXI",
            "414R-FKB5-46SO-XNVK",
            "C3W7-UQ1L-1KL7-22A4",
            "72HG-7UAC-V13W-BM36",
            "3TXC-466S-Q461-2SOL",
            "3O8U-58J2-J603-16T2",
            "SSQM-GFOK-P6V4-C611",
            "V01V-FGOH-F3IG-Q4U7",
            "L4F6-BIHT-8JEE-S83B",
            "UHE7-0117-H3P7-S504",
            "HXKY-V3X3-Q1UA-6GTW",
            "N54Q-E8PB-NA1F-1X64",
            "4M05-E2HN-1XW7-J632",
            "4687-2OA3-Q54E-472Q",
            "4RH5-0422-161K-8T4O",
            "GUQ3-6U6F-S4H8-J747",
            "88T8-CKNS-6WL7-O61P",
            "JM08-6W2E-612E-4HJ5",
            "O04L-UIC5-D558-R36J",
            "BI3H-0DOF-GCYI-7EP3",
            "K4AU-8573-KEC7-731P",
            "OS37-RGGC-Y10A-P8BM",
            "55DC-S267-C7D0-6C17",
            "3030-8PUS-P242-446P",
            "DOC0-7PL8-1W7B-1I5I",
            "01DV-421W-G6YJ-JI16",
            "QFPL-RQW2-XH08-HAT7",
            "ONCV-MV6V-7JD8-O8VK",
            "1VSO-R443-7N88-V7ME",
            "W62G-3226-N4W7-BT2C",
            "4JU0-1Q31-QGO2-WV20",
            "IQ88-E65N-O037-1T1R",
            "DP21-580D-66W4-7XH8",
            "608I-T34J-D6M8-868N",
            "72T4-TBJ2-UU7I-710N",
            "12A4-03KY-N567-X1H1",
            "66QC-G707-0L01-ABM0",
            "EW2F-KMO7-JV67-JLR3",
            "FK17-88VL-8RE7-K3A2",
            "3735-8IJR-0QL2-RB0V",
            "C58M-81F4-5466-J1WH",
            "52OD-0LM7-3456-E88K",
            "XDRX-C06W-H554-AJB7",
            "X87Y-22E6-334S-DJJC",
            "6324-L7O0-4TD0-45L0",
            "E4T7-NV0C-5R8W-54UV",
            "40V5-MGP5-0ACN-3W34",
            "E0XT-K05G-QFCL-513M",
            "RAX7-2X6O-727K-H86E",
            "51EN-3B77-RA8O-G4KA",
            "711F-708G-VQV6-8065",
            "41N2-CSAL-F354-1DMG",
            "EKA5-5220-0G1G-AS10",
            "N54Y-38V5-7AF5-0MUO",
            "4H7N-O34M-BLQI-7140",
            "0E2O-X27F-71PE-4B4G",
            "JQ12-443S-JBHF-1T8A",
            "B747-30BA-QC5R-4S7N",
            "1E66-QW6P-D7CC-O256",
            "B358-50V7-5MF1-BWDS",
            "H870-L53C-PHS8-0003",
            "6A41-C0RY-461F-MX6Y",
            "5RTH-4K56-0XL2-R6K6",
            "8Q83-3UO1-AIX2-2XXO",
            "2325-CLL6-FKNJ-U776",
            "AA2C-W6GI-53QM-W8OO",
            "0H5X-ATR3-I3KW-B7OJ",
            "64C4-N330-Y0L3-2U3O",
            "WAJT-Y327-303M-W75P",
            "53D0-21KC-80F6-2C21",
            "3307-8FX7-4SD0-17FX",
            "C4PX-VM27-8AG0-3T8B",
            "S10S-2365-D338-CX3J",
            "4EEB-64SD-WQIM-RJXI",
            "0R3B-0Q66-7281-4C0N"
          ]
        };
        
        ? 1 Reply Last reply Reply Quote 0
        • ?
          A Former User @Sawer
          last edited by A Former User

          @nesta99 said in Simple copy protection done right :):

          @yall So If I got it Right, should I rename "RegistrationInfo.js" into something else?

          Well yes, since you renamed it into KeyReg.js in the script! But this file should get created automatically!

          (Are you on my macOS?? Thinking about files and folder access restrictions, admin authorization in Catalina and stuff. I remember a case with Digital Performer by MOTU, where I couldn't save presets because of something like this...)

          1 Reply Last reply Reply Quote 0
          • ?
            A Former User @Christoph Hart
            last edited by

            This post is deleted!
            1 Reply Last reply Reply Quote 0
            • ?
              A Former User @Sawer
              last edited by

              @nesta99 I think apart from you changing names of variables and scripts, it looks about the same as the original. I personally find the renaming a bit confusing and in general leave it as is, until I really understand what goes into what and where and why... 🤪

              I'd put the three namespaces in 3 separate js-files and include them onInit. Serials.js, Authorisation.js, and while needed the Serial Generator.js...

              That being said, you probably want to declare the serial variable (containing all the serial numbers) before the authorization script!

              When you enter one of the serials of your serials list, and the registration is successful, the RegistrationInfo.js gets created automatically in your project folder. In your case, that should be KeyReg.js!

              Let me know how it goes.

              1 Reply Last reply Reply Quote 0
              • ?
                A Former User @orange
                last edited by

                @orange said in Simple copy protection done right :):

                @staiff in
                Use the latest (updated today) HISE version.
                Use Authorisation.js code with Content.makeFrontInterface like below. Also don't forget to include("Serials.js") to make the function check. All of the UI elements will be activated. I tried and compiled a plugin, it works likea charm. It creates "RegistrationInfo.js" in User presets main folder. Interface code example is this;

                Content.makeFrontInterface(600, 500);
                
                
                include("Serials.js");
                
                
                
                namespace Authorisation
                {
                    const var SerialInput = Content.getComponent("SerialInput");
                    const var Description = Content.getComponent("Description");
                    const var SerialStateLabel = Content.getComponent("SerialStateLabel");
                    const var AuthorisationDialogue = Content.getComponent("AuthorisationDialogue");
                    const var GlobalMute = Synth.getMidiProcessor("GlobalMute");
                    
                    /** Checks if the serial input is valid and stores the result if successful. */
                    inline function onSubmitButtonControl(component, value)
                    {
                        if(!value) // Just execute once
                            return;
                    
                        local v = SerialInput.getValue();
                        Console.print(v);
                	
                        // Checks if it's in the input
                        if(serials.Data.contains(v))
                        {
                            Console.print("Serial number found");
                        
                            local data = 
                            {
                                "Serial": v
                            };
                        
                            // Stores the file to the hard drive. In HISE it will be the project folder
                            // but in the compiled plugin it will use the parent directory to the 
                            // user preset directory (which is usually the app data folder).
                            Engine.dumpAsJSON(data, "../RegistrationInfo.js");
                            
                            setValidLicense(true);
                        }
                        else
                        {
                            Console.print("Invalid serial number");
                            Description.set("text", "Invalid serial number. The number you supplied does not match");
                            
                            setValidLicense(false);
                        }
                    };
                
                    Content.getComponent("SubmitButton").setControlCallback(onSubmitButtonControl);
                
                
                    inline function setValidLicense(isValid)
                    {
                        // Do whatever you want to do here. I suggest a MIDI muter...
                        GlobalMute.setAttribute(0, 1 - isValid);
                    
                        if(isValid)
                        {
                            // Change this to any other visual indication...
                            SerialStateLabel.set("bgColour", Colours.greenyellow);
                            AuthorisationDialogue.set("visible", false);
                        }
                        else
                        {
                            SerialStateLabel.set("bgColour", Colours.red);
                            AuthorisationDialogue.set("visible", true);
                        }
                    }
                
                    inline function checkOnLoad()
                    {
                        // Clear the input
                        SerialInput.set("text", "");
                        
                        // Load the serial from the stored file
                        local pData = Engine.loadFromJSON("../RegistrationInfo.js");
                        Console.print("Checking serial");
                    
                        if(pData)    
                        {
                            local v = pData.Serial;
                            Console.print("Restored serial: " + v);
                        
                            if(serials.Data.contains(v))
                            {
                                setValidLicense(true);
                                return;
                            }
                        }
                    
                        setValidLicense(false);
                    }
                
                    // Call this on startup
                    checkOnLoad();
                
                }
                

                @nesta99

                1 Reply Last reply Reply Quote 0
                • M
                  mwplugs
                  last edited by

                  welp. im guessing simple copy protection is broken or depreciated in current HISE

                  worked like a charm since 2020 now...

                  it registers license keys does everything right then...when recompiled or reopened it says invalid serial even though it is in the registration file and said it was correct initially

                  Interface: Checking serial
                  Interface: Restored serial: 4E6I-52DH-17X1-OE54
                  Interface: 
                  Interface: Invalid serial number
                  

                  in fact it doesnt even look like its checking it after restoring basic on what the console is saying there.

                  again this is the exact code. exact implementation as above..worked for years now it doesnt for some reason
                  all gui elements are created and match changed GlobalMute to Mute for an audio mute opposed to midi

                  namespace Authorisation
                  {
                      const var SerialInput = Content.getComponent("SerialInput");
                      const var Description = Content.getComponent("Description");
                      const var AuthorisationDialogue = Content.getComponent("AuthorisationDialogue");
                      const var Mute = Synth.getEffect("Mute");
                      
                      /** Checks if the serial input is valid and stores the result if successful. */
                      inline function onSubmitButtonControl(component, value)
                      {
                          if(!value) // Just execute once
                              return;
                      
                          local v = SerialInput.getValue();
                          Console.print(v);
                  	
                          // Checks if it's in the input
                          if(serials.Data.contains(v))
                          {
                              Console.print("Serial number found");
                          
                              local data = 
                              {
                                  "Serial": v
                              };
                          
                              // Stores the file to the hard drive. In HISE it will be the project folder
                              // but in the compiled plugin it will use the parent directory to the 
                              // user preset directory (which is usually the app data folder).
                              Engine.dumpAsJSON(data, "../RegistrationInfo.js");
                              
                              setValidLicense(true);
                          }
                          else
                          {
                              Console.print("Invalid serial number");
                              Description.set("text", "Invalid serial number. The number you supplied does not match");
                              
                              setValidLicense(false);
                          }
                      };
                  
                      Content.getComponent("SubmitButton").setControlCallback(onSubmitButtonControl);
                  
                  
                      inline function setValidLicense(isValid)
                      {
                          // Do whatever you want to do here. I suggest a MIDI muter...
                          Mute.setBypassed(value - isValid);
                      
                          if(isValid)
                          {
                              // Change this to any other visual indication...
                  
                              AuthorisationDialogue.set("visible", false);
                          }
                          else
                          {
                  
                              AuthorisationDialogue.set("visible", true);
                          }
                      }
                  
                      inline function checkOnLoad()
                      {
                          // Clear the input
                          SerialInput.set("text", "");
                          
                          // Load the serial from the stored file
                          local pData = Engine.loadFromJSON("../RegistrationInfo.js");
                          Console.print("Checking serial");
                      
                          if(pData)    
                          {
                              local v = pData.Serial;
                              Console.print("Restored serial: " + v);
                          
                              if(serials.Data.contains(v))
                              {
                                  setValidLicense(true);
                                  return;
                              }
                          }
                      
                          setValidLicense(false);
                      }
                  
                      // Call this on startup
                      checkOnLoad();
                  
                  }
                  
                  M 1 Reply Last reply Reply Quote 0
                  • M
                    mwplugs @mwplugs
                    last edited by

                    @mwplugs haha i figured out something really weird...

                    so i look in the sample project etc. and reference times it has worked right.

                    but i discovered that for some reason now..when the submit button has save in preset enabled the whole script doesnt work. although previously it didnt matter but now it does. so if anyone runs into that take a look

                    S 2 Replies Last reply Reply Quote 0
                    • S
                      Sawer @mwplugs
                      last edited by

                      @mwplugs Hi, so I should deactivate the saveInPreset on the Submit button to make it fully work?

                      1 Reply Last reply Reply Quote 0
                      • S
                        Sawer @mwplugs
                        last edited by

                        @mwplugs Ok so, when I opened the snippet, the button is already not set as saveInPreset, and it work like a charm.
                        I don't know how happened to not work on your side.

                        1 Reply Last reply Reply Quote 0
                        • Adam_GA
                          Adam_G
                          last edited by

                          This post is deleted!
                          1 Reply Last reply Reply Quote 0
                          • S
                            Sampletekk
                            last edited by

                            Trying to run this but I get this when it loads: Skärmavbild 2025-02-09 kl. 17.05.08.png

                            Oli UllmannO 1 Reply Last reply Reply Quote 0
                            • Oli UllmannO
                              Oli Ullmann @Sampletekk
                              last edited by

                              @Sampletekk
                              The project no longer works like this. You have to copy the code and set it up yourself. Then it will work.

                              I did this some time ago. You can download it here (You must download it within 7 days, otherwise the link will expire!):

                              https://we.tl/t-XP43QVzxLK

                              S 1 Reply Last reply Reply Quote 1
                              • S
                                Sampletekk @Oli Ullmann
                                last edited by

                                This post is deleted!
                                1 Reply Last reply Reply Quote 0
                                • S
                                  Sampletekk
                                  last edited by

                                  Struggeling with this! When I run the program now, I'm getting this:

                                  Skärmavbild 2025-02-10 kl. 21.26.58.png

                                  Any ideas?

                                  d.healeyD 1 Reply Last reply Reply Quote 0
                                  • d.healeyD
                                    d.healey @Sampletekk
                                    last edited by

                                    @Sampletekk Unknown function mean the thing on the left side of the . doesn't have a function with that name - so you need to check that serials.Data has the values you think it should.

                                    Libre Wave - Freedom respecting instruments and effects
                                    My Patreon - HISE tutorials
                                    YouTube Channel - Public HISE tutorials

                                    S 1 Reply Last reply Reply Quote 0
                                    • S
                                      Sampletekk @d.healey
                                      last edited by

                                      @d-healey said in Simple copy protection done right :):

                                      @Sampletekk Unknown function mean the thing on the left side of the . doesn't have a function with that name - so you need to check that serials.Data has the values you think it should.

                                      Aha! The file created, that contains the valid numbers, is called "serials.js". Is this the problem here?

                                      d.healeyD 1 Reply Last reply Reply Quote 0
                                      • d.healeyD
                                        d.healey @Sampletekk
                                        last edited by

                                        @Sampletekk said in Simple copy protection done right :):

                                        Is this the problem here?

                                        I don't know, I'm not familiar with the rest of the code.

                                        Libre Wave - Freedom respecting instruments and effects
                                        My Patreon - HISE tutorials
                                        YouTube Channel - Public HISE tutorials

                                        1 Reply Last reply Reply Quote 0
                                        • S
                                          Sampletekk
                                          last edited by

                                          Ok, I've got this working! One question: When working in the Hise, after entering a valid serial, The script creates the file "RegistrationInfo.js" in the projects root.
                                          Where does that file end up when you are working with a compiled version? I'm on a mac now, but I'm also interested in knowing where it is on a PC.
                                          For testing purposes, I would like to be able to "reset" the registration for the compiled versions, as I would do while developing, by deleting the "RegistrationInfo.js" file

                                          LindonL 1 Reply Last reply Reply Quote 0
                                          • LindonL
                                            Lindon @Sampletekk
                                            last edited by

                                            @Sampletekk try looking in the App Data folders...

                                            HISE Development for hire.
                                            www.channelrobot.com

                                            S 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            15

                                            Online

                                            1.7k

                                            Users

                                            11.8k

                                            Topics

                                            102.5k

                                            Posts