diff --git a/widevine/cdm.go b/widevine/cdm.go index 3b1d53b..608c956 100644 --- a/widevine/cdm.go +++ b/widevine/cdm.go @@ -37,10 +37,10 @@ type Key struct { // Creates a new CDM object with the specified device information. func NewCDM(privateKey string, clientID []byte, initData []byte) (CDM, error) { block, _ := pem.Decode([]byte(privateKey)) - if block == nil || block.Type != "RSA PRIVATE KEY" { + if block == nil || block.Type != "PRIVATE KEY" { return CDM{}, errors.New("failed to decode device private key") } - keyParsed, err := x509.ParsePKCS1PrivateKey(block.Bytes) + keyParsed, err := x509.ParsePKCS8PrivateKey(block.Bytes) if err != nil { return CDM{}, err } @@ -67,7 +67,7 @@ func NewCDM(privateKey string, clientID []byte, initData []byte) (CDM, error) { }() return CDM{ - privateKey: keyParsed, + privateKey: keyParsed.(*rsa.PrivateKey), clientID: clientID, widevineCencHeader: widevineCencHeader, diff --git a/widevine/consts.go b/widevine/consts.go index d698f17..2b3b161 100644 --- a/widevine/consts.go +++ b/widevine/consts.go @@ -1,38 +1,34 @@ package widevine -// Keys from Android SDK built for x86 -// I found these via Github search. I lack the expertise involved in -// extracting them. From what I understand, it usually involves TrustZone -// exploits or whatever the analogous system for the device is. - const DefaultPrivateKey = ` ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA4sUKDpvMG/idF8oCH5AVSwFd5Mk+rEwOBsLZMYdliXWe1hn9 -mdE6u9pjsr+bLrZjlKxMFqPPxbIUcC1Ii7BFSje2Fd8kxnaIprQWxDPgK+NSSx7v -Un452TyB1L9lx39ZBt0PlRfwjkCodX+I9y+oBga73NRh7hPbtLzXe/r/ubFBaEu+ -aRkDZBwYPqHgH1RoFLuyFNMjfqGcPosGxceDtvPysmBxB93Hk2evml5fjdYGg6tx -z510g+XFPDFv7GSy1KuWqit83MqzPls9qAQMkwUc05ggjDhGCKW4/p97fn23WDFE -3TzSSsQvyJLKA3s9oJbtJCD/gOHYqDvnWn8zPwIDAQABAoIBAQDCWe1Mp+o+7sx0 -XwWC15HoPruiIXg9YtGCqexLrqcvMEd5Z70Z32BfL8TSpbTyTA78lM6BeNPRs9Yg -bi8GyYQZH7ZG+IAkN+LWPPJmJa+y7ZjSGSkzoksiC+GZ3I/2cwZyA3Qfa+0XfgLi -8PMKJyXyREMt+DgWO57JQC/OakhRdCR19mM6NKd+ynd/IEz/NIbjMLDVKwW8HEPx -N3r5CU9O96nr62DI68KVj3jwUR3cDi/5xfhosYhCQjHJuobNbeFR18dY2nQNLWYd -S0wtskla1fl9eYHwYAzwru4wHT4WJC7+V4pscfCI0YZB6PslxDKrv73l5H1tz4cf -Vy58NRSBAoGBAPSmjoVtQzTvQ6PZIs81SF1ulJI9kUpyFaBoSSgt+2ZkeNtF6Hih -Zm7OVJ9wg9sfjpB3SFBUjuhXz/ts/t6dkA2PgCbrvhBMRKSGbfyhhtM2gRf002I4 -bJ7Y0C/ont4WzC/XbXEkAmh+fG2/JRvbdVQaIdyS6MmVHtCtRsHEQZS5AoGBAO1K -IXOKAFA+320+Hkbqskfevmxrv+JHIdetliaREZwQH+VYUUM8u5/Kt3oyMat+mH90 -rZOKQK2zM8cz4tKclTUT54nrtICxeo6UHVc56FqXZ6sVvVgm8Cnvt1md4XwG4FwQ -r/OlaM6Hr5HRf8dkzuzqm4ZQYRHGzZ6AMphj8Xu3AoGAdmo7p5dIJVH98kuCDrsi -iJ6iaNpF/buUfiyb5EfFXD0bRj7jE6hDdTSHPxjtqVzv2zrxFHipJwqBz5dlEYlA -FWA0ziHiv+66dsveZp4kLQ0/lMHaorre0E/vDJFSe/qa4DksbsvYIo2+WjxfkMk7 -U/bGFwZAiHmWDbkg+16rw3kCgYEAyyodWf9eJVavlakJ404vNrnP8KSQtfyRTUii -toKewTBNHuBvM1JckoPOdCFlxZ+ukfIka56DojU8r+IM4qaOWdOg+sWE1mses9S9 -CmHaPzZC3IjQhRlRp5ZHNcOnu7lnf2wKOmH1Sl+CQydMcDwvr0lvv6AyfDXq9zps -F2365CECgYEAmYgs/qwnh9m0aGDw/ZGrASoE0TxlpizPvsVDGx9t9UGC2Z+5QvAE -ZcQeKoLCbktr0BnRLI+W1g+KpXQGcnSF9VX/qwUlf72XA6C6kobQvW+Yd/H/IN5d -jPqoL/m41rRzm+J+9/Tfc8Aiy1kkllUYnVJdC5QLAIswuhI8lkaFTN4= ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCw6LyAUraG6B2R +Qam0Sj3iz0+CDmeAlV4bpjUJR5skxsEC8PKZMCYfXGXNBzNFHBb1zMasb/Z/AG25 +dSnBYhZzGL4X5AAveftWeLXepql5U7/4TYgs3RbwUecj7MivtYRqZ1CfKOxJKXTX +jCjclis5LSZZKPjWJcWLBeHeEgRzxfOiA/cmkSSEJH0d//EI68RokADbX8kgDpC7 +mSa/WoHLBirJpQvyvsYR++jJS88IEww1iOu5GMXR88w0c2VqPc8dTvsHS8efzhID +7qFGEsouX08vJ1dZZoj7rFGfh1d5qfy5ekXeQZKIOH/eyPayaXQBnYnil3oA2zSM +8UICdQK9AgMBAAECggEAJZPOJIDNQiMwUqAsvL3PXuvTsue93v97Taq0lcvGvd1U +9ru5AEaMtnkhK5eVsZ6Zlu0AH3Up2gi8hdoH/EqKQ7jz+e2lh3Ak7dV2pjxm/71F +J+hKHmN5AaOYEhaz+zS2k4ZuBtzBsfmzFqzwKgjg1gSL4oD0OEKuLw1ZEJtppDCC +0hQtb/GQYDx4Gz/y078A6YtyOdypx3qozVV39HcY167SXNEhZsS4Ylz1T7X0pgob +PrY0R9fJMGyUICCbf+/Y91e/P2886btfcamIjsfDRSJMwqFQ7CInjouaxGFPcHrQ +vziQiXbbpiJqs/L5/vVX2hzntIXQwmdGhEjL/kmnWQKBgQD3ib2qvppxCbru+K5f +t7oXhXhcQ5GAJROrbk7lUuEkXTeciHC0XO9YYsUecWJiKcXU5r+7nr10IrP9pmhK +CQoAOAZrGuiogIdAlGCwyCc7UQXeboZgz7siqMRASmJ66CWwpj8s01XwjfXGT4Pb +dbXfSeR1Q1P/bMPocjDVv7wN6QKBgQC29OgLt7vr3p8LgCGQcKhT/pLtiP2Av938 +gWD65TmpXVE/JM5d2UoZeKndtZkxbr1ey0WmejGqYkv3WU+XxtrZaBFgltoR1zcq +Rrvsd8patVwEV1h+Ds5G7vDtBIDT6SKNF3WZq3AXrCrGbQB3qTH1jyoC2rL3axXu +7UNmNEiltQKBgAHAp+cdklpah0hJ2nIzCs4/06pTkCQoHwuHrGdTPuTTBCHHlYSx +Y8BscpjUlK29PflT6OebKBw6YqvZEcP0bG2z99eqSRtoTYzXgBfAUwbIfBInFix5 +TAniyADsheX43stxYeEfXexmFOdiiLx1COSb0VJDN8UHMBvlMxNQWDSBAoGAOP3b +VuMaL+R+SLfWPMdLODcCD+pvhW6/OMwYqK9FIgQGrhPKESQB2CNlTsImAWcMqH3L +qYtA82GBZoC0sYPpYnXvi9YSAiK3dXzpR0UdjNoX2uZWk5YLHb+K31pawyhJcggP +wxnLZiRkgsErtxrGjEbXgGIeA8Kg53eTWkAJLU0CgYAT41lSNatA+NtTut4jdwPV +N4LFp1+q4UK9GESmj88GCwGMOshQTGP+lw1Z4dYdMhN8nqS609txw+UiBS7uWMK7 +ggL6jDP5rdOM5wYg7YyFoXQ+eJTjXFgyOBHZDewj/3He3GsxChP9gLAoGzG/LYsv +fU6jVstUd5TCsG+97dsl5A== +-----END PRIVATE KEY----- ` -var DefaultClientID = []byte{8, 1, 18, 237, 9, 10, 176, 2, 8, 2, 18, 16, 247, 149, 61, 229, 178, 130, 18, 227, 78, 162, 65, 84, 240, 234, 99, 108, 24, 233, 237, 172, 245, 5, 34, 142, 2, 48, 130, 1, 10, 2, 130, 1, 1, 0, 226, 197, 10, 14, 155, 204, 27, 248, 157, 23, 202, 2, 31, 144, 21, 75, 1, 93, 228, 201, 62, 172, 76, 14, 6, 194, 217, 49, 135, 101, 137, 117, 158, 214, 25, 253, 153, 209, 58, 187, 218, 99, 178, 191, 155, 46, 182, 99, 148, 172, 76, 22, 163, 207, 197, 178, 20, 112, 45, 72, 139, 176, 69, 74, 55, 182, 21, 223, 36, 198, 118, 136, 166, 180, 22, 196, 51, 224, 43, 227, 82, 75, 30, 239, 82, 126, 57, 217, 60, 129, 212, 191, 101, 199, 127, 89, 6, 221, 15, 149, 23, 240, 142, 64, 168, 117, 127, 136, 247, 47, 168, 6, 6, 187, 220, 212, 97, 238, 19, 219, 180, 188, 215, 123, 250, 255, 185, 177, 65, 104, 75, 190, 105, 25, 3, 100, 28, 24, 62, 161, 224, 31, 84, 104, 20, 187, 178, 20, 211, 35, 126, 161, 156, 62, 139, 6, 197, 199, 131, 182, 243, 242, 178, 96, 113, 7, 221, 199, 147, 103, 175, 154, 94, 95, 141, 214, 6, 131, 171, 113, 207, 157, 116, 131, 229, 197, 60, 49, 111, 236, 100, 178, 212, 171, 150, 170, 43, 124, 220, 202, 179, 62, 91, 61, 168, 4, 12, 147, 5, 28, 211, 152, 32, 140, 56, 70, 8, 165, 184, 254, 159, 123, 126, 125, 183, 88, 49, 68, 221, 60, 210, 74, 196, 47, 200, 146, 202, 3, 123, 61, 160, 150, 237, 36, 32, 255, 128, 225, 216, 168, 59, 231, 90, 127, 51, 63, 2, 3, 1, 0, 1, 40, 240, 34, 72, 1, 18, 128, 2, 181, 69, 135, 13, 36, 72, 2, 2, 176, 112, 152, 226, 24, 117, 128, 238, 225, 194, 114, 8, 188, 180, 141, 162, 26, 161, 183, 202, 49, 147, 218, 1, 14, 207, 11, 125, 231, 24, 127, 10, 115, 147, 50, 61, 106, 13, 38, 240, 103, 0, 123, 75, 241, 234, 38, 11, 231, 115, 202, 98, 108, 161, 63, 250, 36, 2, 164, 18, 176, 208, 79, 130, 11, 48, 125, 118, 127, 0, 60, 69, 146, 90, 115, 83, 94, 6, 75, 201, 83, 24, 13, 146, 193, 185, 192, 51, 90, 159, 92, 100, 180, 221, 0, 52, 238, 87, 118, 248, 118, 12, 10, 17, 215, 221, 187, 51, 97, 88, 129, 20, 101, 222, 109, 13, 143, 175, 231, 182, 40, 244, 155, 184, 103, 136, 83, 218, 66, 71, 52, 241, 23, 51, 254, 103, 70, 28, 40, 194, 255, 121, 80, 157, 82, 23, 39, 124, 215, 136, 124, 201, 225, 190, 206, 164, 226, 20, 7, 221, 83, 94, 218, 57, 9, 117, 238, 140, 109, 81, 13, 156, 77, 13, 48, 165, 153, 72, 179, 42, 38, 61, 146, 233, 203, 159, 27, 38, 41, 64, 88, 241, 240, 177, 17, 87, 14, 73, 104, 117, 126, 82, 184, 192, 44, 104, 112, 234, 153, 199, 154, 57, 53, 150, 187, 248, 44, 48, 130, 220, 36, 177, 193, 152, 136, 71, 86, 95, 131, 253, 140, 9, 124, 36, 219, 137, 187, 228, 115, 46, 20, 197, 102, 29, 6, 89, 242, 34, 26, 180, 5, 10, 174, 2, 8, 1, 18, 16, 105, 227, 232, 152, 187, 44, 63, 184, 163, 179, 40, 29, 132, 248, 140, 20, 24, 142, 213, 190, 145, 5, 34, 142, 2, 48, 130, 1, 10, 2, 130, 1, 1, 0, 216, 246, 233, 181, 137, 240, 81, 32, 233, 164, 62, 208, 217, 78, 161, 254, 9, 149, 1, 109, 189, 30, 43, 64, 167, 220, 209, 197, 127, 195, 5, 80, 60, 207, 19, 63, 158, 152, 175, 206, 78, 230, 255, 132, 220, 66, 36, 38, 168, 255, 250, 79, 228, 191, 45, 68, 213, 15, 20, 58, 235, 188, 32, 76, 163, 180, 103, 250, 37, 27, 250, 96, 63, 219, 37, 226, 39, 168, 175, 169, 195, 125, 10, 239, 98, 230, 163, 148, 215, 40, 40, 159, 212, 150, 101, 27, 46, 140, 81, 65, 242, 124, 85, 173, 230, 57, 47, 55, 170, 211, 111, 55, 206, 125, 66, 131, 91, 45, 113, 126, 45, 56, 116, 251, 186, 211, 243, 20, 111, 209, 120, 49, 80, 183, 67, 191, 24, 185, 115, 87, 0, 116, 119, 91, 39, 221, 34, 140, 59, 133, 203, 142, 22, 93, 157, 202, 237, 23, 216, 229, 142, 152, 59, 198, 51, 8, 150, 117, 137, 82, 172, 67, 163, 180, 208, 145, 60, 173, 38, 101, 37, 210, 71, 12, 237, 185, 221, 4, 183, 171, 1, 210, 69, 25, 165, 220, 234, 132, 152, 225, 227, 114, 252, 129, 131, 150, 226, 194, 65, 29, 202, 100, 68, 44, 203, 249, 139, 121, 93, 96, 129, 14, 56, 48, 90, 251, 92, 227, 62, 173, 223, 184, 255, 125, 120, 171, 247, 94, 65, 184, 199, 170, 53, 133, 185, 90, 252, 136, 134, 138, 110, 175, 145, 235, 116, 161, 2, 3, 1, 0, 1, 40, 240, 34, 18, 128, 3, 34, 139, 99, 48, 235, 63, 144, 179, 86, 239, 191, 17, 146, 182, 39, 189, 182, 151, 32, 160, 237, 174, 2, 222, 89, 190, 253, 2, 13, 123, 235, 22, 92, 39, 73, 186, 62, 169, 30, 245, 70, 237, 136, 149, 149, 149, 73, 179, 121, 93, 132, 136, 15, 7, 48, 7, 49, 227, 99, 202, 205, 175, 119, 224, 177, 123, 82, 38, 220, 184, 219, 151, 99, 53, 11, 69, 231, 226, 118, 142, 176, 33, 127, 116, 54, 155, 177, 8, 229, 170, 33, 100, 106, 67, 216, 77, 28, 175, 231, 85, 143, 218, 60, 199, 75, 137, 71, 99, 86, 71, 193, 85, 161, 84, 18, 93, 154, 90, 119, 115, 63, 225, 12, 193, 44, 219, 104, 254, 220, 254, 80, 172, 153, 193, 174, 210, 115, 247, 147, 65, 205, 190, 101, 192, 210, 221, 145, 14, 222, 81, 145, 176, 127, 58, 224, 167, 255, 112, 65, 175, 37, 16, 65, 169, 202, 73, 92, 167, 198, 248, 139, 106, 17, 109, 64, 0, 250, 109, 142, 232, 32, 206, 102, 68, 205, 26, 185, 197, 49, 159, 234, 138, 254, 109, 122, 202, 140, 42, 65, 75, 209, 181, 72, 236, 175, 8, 209, 117, 147, 156, 250, 148, 111, 10, 177, 120, 96, 67, 18, 250, 0, 49, 204, 162, 233, 113, 189, 66, 34, 135, 35, 216, 228, 202, 98, 153, 213, 223, 81, 209, 16, 228, 112, 54, 18, 163, 98, 53, 83, 72, 59, 138, 143, 211, 78, 227, 91, 157, 114, 1, 228, 225, 58, 188, 184, 39, 109, 177, 179, 196, 93, 144, 128, 165, 56, 96, 26, 184, 178, 37, 210, 82, 192, 225, 249, 76, 205, 111, 149, 125, 9, 121, 197, 140, 79, 208, 78, 109, 186, 25, 244, 135, 239, 56, 224, 59, 37, 83, 198, 69, 237, 77, 93, 83, 100, 41, 172, 128, 41, 125, 245, 195, 247, 8, 0, 0, 41, 54, 233, 24, 32, 203, 199, 189, 235, 63, 34, 243, 175, 254, 97, 140, 153, 66, 71, 61, 132, 135, 66, 0, 68, 107, 128, 70, 2, 17, 176, 114, 204, 227, 107, 117, 16, 236, 212, 202, 210, 253, 200, 117, 154, 133, 121, 164, 155, 250, 220, 18, 10, 189, 1, 198, 188, 185, 26, 22, 10, 12, 99, 111, 109, 112, 97, 110, 121, 95, 110, 97, 109, 101, 18, 6, 71, 111, 111, 103, 108, 101, 26, 39, 10, 10, 109, 111, 100, 101, 108, 95, 110, 97, 109, 101, 18, 25, 65, 110, 100, 114, 111, 105, 100, 32, 83, 68, 75, 32, 98, 117, 105, 108, 116, 32, 102, 111, 114, 32, 120, 56, 54, 26, 24, 10, 17, 97, 114, 99, 104, 105, 116, 101, 99, 116, 117, 114, 101, 95, 110, 97, 109, 101, 18, 3, 120, 56, 54, 26, 26, 10, 11, 100, 101, 118, 105, 99, 101, 95, 110, 97, 109, 101, 18, 11, 103, 101, 110, 101, 114, 105, 99, 95, 120, 56, 54, 26, 36, 10, 12, 112, 114, 111, 100, 117, 99, 116, 95, 110, 97, 109, 101, 18, 20, 115, 100, 107, 95, 103, 111, 111, 103, 108, 101, 95, 112, 104, 111, 110, 101, 95, 120, 56, 54, 26, 91, 10, 10, 98, 117, 105, 108, 100, 95, 105, 110, 102, 111, 18, 77, 103, 111, 111, 103, 108, 101, 47, 115, 100, 107, 95, 103, 111, 111, 103, 108, 101, 95, 112, 104, 111, 110, 101, 95, 120, 56, 54, 47, 103, 101, 110, 101, 114, 105, 99, 95, 120, 56, 54, 58, 55, 46, 49, 46, 49, 47, 78, 89, 67, 47, 53, 52, 54, 52, 56, 57, 55, 58, 117, 115, 101, 114, 100, 101, 98, 117, 103, 47, 116, 101, 115, 116, 45, 107, 101, 121, 115, 26, 45, 10, 9, 100, 101, 118, 105, 99, 101, 95, 105, 100, 18, 32, 122, 100, 102, 68, 67, 80, 72, 97, 72, 114, 66, 81, 97, 107, 113, 75, 104, 69, 99, 70, 113, 88, 105, 76, 119, 98, 98, 108, 74, 119, 103, 0, 26, 38, 10, 20, 119, 105, 100, 101, 118, 105, 110, 101, 95, 99, 100, 109, 95, 118, 101, 114, 115, 105, 111, 110, 18, 14, 118, 52, 46, 49, 46, 48, 45, 97, 110, 100, 114, 111, 105, 100, 26, 36, 10, 31, 111, 101, 109, 95, 99, 114, 121, 112, 116, 111, 95, 115, 101, 99, 117, 114, 105, 116, 121, 95, 112, 97, 116, 99, 104, 95, 108, 101, 118, 101, 108, 18, 1, 48, 50, 8, 16, 1, 32, 0, 40, 11, 48, 0} +var DefaultClientID = []byte{8, 1, 18, 235, 9, 10, 174, 2, 8, 2, 18, 16, 235, 87, 246, 7, 211, 95, 249, 61, 250, 115, 165, 30, 32, 181, 74, 82, 24, 176, 196, 233, 229, 5, 34, 142, 2, 48, 130, 1, 10, 2, 130, 1, 1, 0, 176, 232, 188, 128, 82, 182, 134, 232, 29, 145, 65, 169, 180, 74, 61, 226, 207, 79, 130, 14, 103, 128, 149, 94, 27, 166, 53, 9, 71, 155, 36, 198, 193, 2, 240, 242, 153, 48, 38, 31, 92, 101, 205, 7, 51, 69, 28, 22, 245, 204, 198, 172, 111, 246, 127, 0, 109, 185, 117, 41, 193, 98, 22, 115, 24, 190, 23, 228, 0, 47, 121, 251, 86, 120, 181, 222, 166, 169, 121, 83, 191, 248, 77, 136, 44, 221, 22, 240, 81, 231, 35, 236, 200, 175, 181, 132, 106, 103, 80, 159, 40, 236, 73, 41, 116, 215, 140, 40, 220, 150, 43, 57, 45, 38, 89, 40, 248, 214, 37, 197, 139, 5, 225, 222, 18, 4, 115, 197, 243, 162, 3, 247, 38, 145, 36, 132, 36, 125, 29, 255, 241, 8, 235, 196, 104, 144, 0, 219, 95, 201, 32, 14, 144, 187, 153, 38, 191, 90, 129, 203, 6, 42, 201, 165, 11, 242, 190, 198, 17, 251, 232, 201, 75, 207, 8, 19, 12, 53, 136, 235, 185, 24, 197, 209, 243, 204, 52, 115, 101, 106, 61, 207, 29, 78, 251, 7, 75, 199, 159, 206, 18, 3, 238, 161, 70, 18, 202, 46, 95, 79, 47, 39, 87, 89, 102, 136, 251, 172, 81, 159, 135, 87, 121, 169, 252, 185, 122, 69, 222, 65, 146, 136, 56, 127, 222, 200, 246, 178, 105, 116, 1, 157, 137, 226, 151, 122, 0, 219, 52, 140, 241, 66, 2, 117, 2, 189, 2, 3, 1, 0, 1, 40, 243, 70, 18, 128, 2, 100, 159, 248, 125, 110, 116, 172, 7, 225, 133, 36, 210, 253, 6, 164, 191, 87, 206, 246, 125, 161, 32, 125, 122, 11, 103, 3, 96, 84, 188, 202, 211, 103, 112, 144, 54, 178, 43, 178, 6, 247, 253, 201, 153, 221, 6, 0, 218, 157, 112, 113, 32, 215, 224, 126, 34, 105, 137, 54, 220, 125, 249, 129, 220, 248, 164, 77, 169, 43, 200, 185, 249, 33, 71, 224, 139, 202, 166, 200, 165, 81, 121, 15, 28, 3, 131, 33, 149, 170, 106, 15, 110, 106, 207, 145, 77, 178, 8, 166, 47, 106, 33, 43, 73, 28, 127, 139, 91, 123, 213, 202, 185, 139, 68, 27, 191, 41, 221, 212, 125, 53, 53, 133, 22, 185, 57, 124, 137, 196, 195, 204, 241, 138, 245, 149, 255, 120, 141, 217, 233, 94, 17, 29, 172, 222, 142, 183, 242, 189, 29, 192, 73, 149, 79, 245, 220, 39, 34, 31, 156, 37, 25, 136, 218, 249, 146, 156, 224, 88, 114, 13, 4, 141, 138, 127, 142, 86, 94, 72, 37, 75, 80, 49, 230, 245, 10, 87, 225, 102, 1, 207, 249, 52, 90, 175, 204, 112, 166, 197, 74, 94, 64, 251, 0, 53, 196, 106, 109, 149, 223, 43, 104, 90, 156, 185, 35, 225, 33, 94, 196, 193, 144, 200, 106, 119, 208, 246, 129, 184, 181, 170, 17, 231, 105, 117, 65, 6, 166, 211, 31, 249, 103, 121, 94, 31, 34, 73, 240, 123, 131, 254, 198, 27, 34, 154, 97, 26, 180, 5, 10, 174, 2, 8, 1, 18, 16, 49, 191, 232, 42, 245, 220, 53, 29, 249, 97, 183, 146, 104, 35, 85, 106, 24, 251, 252, 157, 216, 5, 34, 142, 2, 48, 130, 1, 10, 2, 130, 1, 1, 0, 189, 85, 174, 96, 111, 37, 47, 218, 6, 211, 200, 99, 248, 236, 135, 185, 122, 174, 93, 160, 204, 167, 252, 51, 190, 128, 139, 75, 61, 89, 212, 65, 30, 220, 167, 179, 106, 145, 253, 239, 60, 91, 107, 64, 86, 180, 145, 90, 126, 106, 69, 136, 149, 0, 15, 123, 84, 0, 231, 181, 64, 122, 93, 98, 214, 132, 165, 70, 27, 67, 233, 177, 6, 106, 42, 49, 230, 101, 54, 131, 74, 98, 132, 83, 212, 141, 238, 5, 48, 248, 44, 103, 48, 242, 67, 157, 201, 255, 26, 71, 251, 179, 74, 55, 150, 133, 125, 36, 136, 63, 65, 149, 63, 24, 146, 14, 31, 191, 209, 96, 56, 33, 98, 182, 214, 58, 81, 218, 51, 66, 169, 178, 239, 9, 48, 126, 204, 102, 116, 210, 205, 30, 213, 61, 9, 161, 203, 152, 74, 28, 29, 5, 74, 177, 102, 234, 246, 144, 39, 105, 225, 234, 248, 101, 174, 250, 237, 131, 56, 193, 13, 3, 233, 45, 124, 25, 48, 125, 210, 51, 54, 253, 194, 85, 62, 120, 216, 35, 161, 218, 36, 225, 150, 211, 104, 102, 175, 34, 216, 230, 239, 7, 56, 242, 106, 201, 111, 43, 136, 190, 112, 66, 120, 179, 83, 64, 179, 19, 54, 233, 37, 103, 125, 158, 55, 252, 41, 126, 157, 158, 56, 176, 236, 209, 108, 125, 5, 211, 253, 25, 237, 237, 141, 159, 8, 171, 132, 147, 82, 57, 137, 154, 123, 99, 53, 237, 2, 3, 1, 0, 1, 40, 243, 70, 18, 128, 3, 75, 53, 55, 56, 3, 53, 71, 65, 50, 175, 215, 223, 94, 195, 187, 72, 205, 26, 40, 48, 132, 249, 43, 175, 209, 122, 241, 88, 120, 68, 74, 48, 139, 41, 32, 32, 50, 220, 189, 38, 184, 138, 238, 134, 68, 95, 112, 60, 27, 56, 92, 122, 202, 101, 149, 41, 57, 112, 3, 42, 78, 243, 40, 200, 47, 138, 219, 126, 183, 3, 42, 215, 171, 174, 193, 199, 8, 140, 73, 187, 1, 11, 183, 250, 76, 128, 228, 229, 72, 184, 84, 142, 28, 105, 36, 175, 46, 34, 27, 192, 239, 83, 175, 85, 50, 94, 44, 222, 59, 182, 21, 66, 209, 189, 64, 25, 251, 131, 25, 167, 206, 56, 119, 159, 232, 219, 162, 40, 6, 184, 197, 239, 74, 132, 94, 81, 67, 146, 3, 148, 4, 202, 122, 245, 228, 74, 33, 84, 32, 12, 147, 210, 25, 111, 135, 99, 45, 136, 25, 123, 77, 252, 110, 81, 33, 9, 222, 119, 235, 227, 4, 217, 150, 131, 41, 103, 39, 196, 160, 127, 42, 80, 219, 254, 182, 32, 212, 121, 216, 14, 10, 94, 59, 182, 80, 252, 224, 161, 243, 123, 173, 75, 196, 178, 253, 55, 4, 57, 31, 109, 84, 58, 173, 24, 28, 170, 215, 212, 141, 121, 167, 13, 151, 243, 148, 229, 183, 19, 69, 92, 193, 190, 255, 241, 196, 95, 89, 143, 40, 19, 189, 133, 115, 39, 33, 112, 133, 236, 167, 53, 150, 239, 206, 84, 13, 238, 97, 15, 202, 148, 89, 109, 147, 206, 214, 10, 47, 120, 232, 50, 106, 248, 45, 27, 49, 8, 54, 151, 26, 93, 106, 150, 69, 8, 247, 24, 83, 182, 220, 28, 221, 79, 52, 160, 104, 207, 50, 211, 153, 221, 85, 226, 35, 108, 117, 67, 235, 172, 103, 34, 131, 140, 60, 52, 54, 110, 223, 163, 222, 57, 224, 217, 113, 79, 254, 254, 83, 84, 227, 67, 91, 82, 149, 180, 53, 11, 45, 148, 187, 67, 139, 14, 170, 148, 66, 47, 33, 140, 53, 100, 47, 217, 175, 165, 146, 216, 177, 252, 241, 90, 62, 225, 143, 195, 21, 181, 214, 196, 87, 63, 203, 89, 16, 204, 28, 184, 252, 242, 101, 52, 239, 241, 65, 178, 26, 22, 10, 12, 99, 111, 109, 112, 97, 110, 121, 95, 110, 97, 109, 101, 18, 6, 76, 69, 78, 79, 86, 79, 26, 29, 10, 10, 109, 111, 100, 101, 108, 95, 110, 97, 109, 101, 18, 15, 76, 101, 110, 111, 118, 111, 32, 84, 66, 45, 88, 55, 48, 53, 76, 26, 30, 10, 17, 97, 114, 99, 104, 105, 116, 101, 99, 116, 117, 114, 101, 95, 110, 97, 109, 101, 18, 9, 97, 114, 109, 54, 52, 45, 118, 56, 97, 26, 20, 10, 11, 100, 101, 118, 105, 99, 101, 95, 110, 97, 109, 101, 18, 5, 88, 55, 48, 53, 76, 26, 21, 10, 12, 112, 114, 111, 100, 117, 99, 116, 95, 110, 97, 109, 101, 18, 5, 88, 55, 48, 53, 76, 26, 100, 10, 10, 98, 117, 105, 108, 100, 95, 105, 110, 102, 111, 18, 86, 76, 101, 110, 111, 118, 111, 47, 76, 101, 110, 111, 118, 111, 84, 66, 45, 88, 55, 48, 53, 70, 47, 88, 55, 48, 53, 70, 58, 56, 46, 49, 46, 48, 47, 79, 80, 77, 49, 46, 49, 55, 49, 48, 49, 57, 46, 48, 49, 57, 47, 83, 48, 48, 48, 48, 51, 56, 95, 49, 56, 49, 50, 50, 52, 95, 82, 79, 87, 58, 117, 115, 101, 114, 47, 114, 101, 108, 101, 97, 115, 101, 45, 107, 101, 121, 115, 26, 45, 10, 9, 100, 101, 118, 105, 99, 101, 95, 105, 100, 18, 32, 88, 55, 48, 53, 70, 49, 48, 48, 48, 48, 48, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 17, 10, 10, 111, 115, 95, 118, 101, 114, 115, 105, 111, 110, 18, 3, 56, 46, 49, 50, 6, 16, 1, 32, 4, 40, 9}