/**********key使用共享内存*************/
/**********使用T-box***********/
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cuda.h>
#include <iomanip>
#include <time.h>
#include "cuda_profiler_api.h"

#define BYTE unsigned char
typedef unsigned long u32;

using namespace std;

class aes_block
{
public:
    BYTE block[16];
};

BYTE AES_Sbox[] =
{   /*0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f */
    0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76, /*0*/ 
    0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0, /*1*/
    0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15, /*2*/
    0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75, /*3*/
    0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84, /*4*/
    0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf, /*5*/
    0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8, /*6*/ 
    0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2, /*7*/
    0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73, /*8*/
    0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb, /*9*/
    0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79, /*a*/
    0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08, /*b*/
    0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a, /*c*/
    0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e, /*d*/
    0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf, /*e*/
    0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16  /*f*/
};

void printBytes(BYTE b[], int len) {
int i;
for (i=0; i<len; i++)
    printf("%x ", b[i]);
printf("\n");
}


void f1printBytes(BYTE b[], int len, FILE* fp) {
int i;
int shiftTab[16]={0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15};
for (i=0; i<len; i++)
   fprintf(fp, "%02x ", b[shiftTab[i]]);
fprintf(fp, "\n");
}

int flag=0;
void f2printBytes(BYTE b[], int len, FILE* fp) {
int i;
for (i=0; i<len; i++){
   fprintf(fp, "%c", b[i]);
   if(b[i]=='\n')
        flag++;
   }
}

void f3printBytes(BYTE b[], int len, FILE* fp) {
int i;
for (i=0; i<len; i++){
    if(b[i]=='\0')
        return ;
    fprintf(fp, "%c", b[i]);
    if(b[i]=='\n')
    flag++;
   }
}

void AES_ExpandKey(BYTE key[]) {
    int kl = 16, ks=176, Rcon = 1, i, j;
    BYTE temp[4], temp2[4];

    for(i = kl; i < ks; i += 4) {
        memcpy(temp, &key[i-4], 4);
    if (i % kl == 0) {
        temp2[0] = AES_Sbox[temp[1]] ^ Rcon;
        temp2[1] = AES_Sbox[temp[2]];
        temp2[2] = AES_Sbox[temp[3]];
        temp2[3] = AES_Sbox[temp[0]];
        memcpy(temp, temp2, 4);
        if ((Rcon <<= 1) >= 256)
            Rcon ^= 0x11b;
}
    else if ((kl > 24) && (i % kl == 16)) {
        temp2[0] = AES_Sbox[temp[0]];
        temp2[1] = AES_Sbox[temp[1]];
        temp2[2] = AES_Sbox[temp[2]];
        temp2[3] = AES_Sbox[temp[3]];
        memcpy(temp, temp2, 4);
    }
    for(j = 0; j < 4; j++)
        key[i + j] = key[i + j - kl] ^ temp[j];
    }
}

__device__ u32 Byte2Word(BYTE k1, BYTE k2, BYTE k3, BYTE k4){
    u32 result(0x00000000);  
    u32 temp;  
    temp = k1;  // K1  
    temp <<= 24;  
    result |= temp;  
    temp = k2;  // K2  
    temp <<= 16;  
    result |= temp;  
    temp = k3;  // K3  
    temp <<= 8;  
    result |= temp;  
    temp = k4;  // K4  
    result |= temp;  
    return result;  
}

u32 Te0[256] = {
    0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU,
    0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U,
    0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU,
    0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU,
    0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U,
    0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU,
    0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU,
    0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU,
    0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU,
    0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU,
    0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U,
    0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU,
    0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU,
    0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U,
    0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU,
    0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU,
    0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU,
    0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU,
    0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU,
    0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U,
    0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU,
    0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU,
    0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU,
    0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU,
    0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U,
    0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U,
    0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U,
    0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U,
    0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU,
    0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U,
    0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U,
    0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU,
    0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU,
    0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U,
    0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U,
    0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U,
    0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU,
    0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U,
    0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU,
    0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U,
    0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU,
    0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U,
    0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U,
    0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU,
    0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U,
    0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U,
    0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U,
    0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U,
    0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U,
    0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U,
    0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U,
    0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U,
    0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU,
    0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U,
    0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U,
    0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U,
    0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U,
    0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U,
    0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U,
    0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU,
    0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U,
    0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U,
    0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U,
    0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU,
};

u32 Te1[256] = {
    0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU,
    0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U,
    0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU,
    0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U,
    0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU,
    0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U,
    0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU,
    0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U,
    0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U,
    0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU,
    0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U,
    0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U,
    0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U,
    0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU,
    0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U,
    0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U,
    0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU,
    0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U,
    0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U,
    0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U,
    0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU,
    0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU,
    0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U,
    0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU,
    0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU,
    0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U,
    0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU,
    0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U,
    0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU,
    0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U,
    0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U,
    0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U,
    0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU,
    0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U,
    0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU,
    0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U,
    0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU,
    0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U,
    0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U,
    0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU,
    0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU,
    0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU,
    0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U,
    0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U,
    0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU,
    0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U,
    0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU,
    0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U,
    0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU,
    0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U,
    0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU,
    0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU,
    0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U,
    0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU,
    0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U,
    0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU,
    0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U,
    0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U,
    0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U,
    0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU,
    0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU,
    0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U,
    0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU,
    0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U,
};

u32 Te2[256] = {
    0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU,
    0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U,
    0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU,
    0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U,
    0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU,
    0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U,
    0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU,
    0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U,
    0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U,
    0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU,
    0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U,
    0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U,
    0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U,
    0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU,
    0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U,
    0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U,
    0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU,
    0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U,
    0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U,
    0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U,
    0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU,
    0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU,
    0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U,
    0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU,
    0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU,
    0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U,
    0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU,
    0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U,
    0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU,
    0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U,
    0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U,
    0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U,
    0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU,
    0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U,
    0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU,
    0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U,
    0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU,
    0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U,
    0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U,
    0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU,
    0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU,
    0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU,
    0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U,
    0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U,
    0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU,
    0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U,
    0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU,
    0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U,
    0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU,
    0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U,
    0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU,
    0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU,
    0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U,
    0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU,
    0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U,
    0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU,
    0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U,
    0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U,
    0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U,
    0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU,
    0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU,
    0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U,
    0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU,
    0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U,
};

u32 Te3[256] = {
    0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U,
    0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U,
    0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U,
    0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU,
    0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU,
    0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU,
    0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U,
    0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU,
    0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU,
    0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U,
    0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U,
    0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU,
    0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU,
    0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU,
    0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU,
    0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU,
    0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U,
    0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU,
    0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU,
    0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U,
    0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U,
    0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U,
    0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U,
    0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U,
    0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU,
    0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U,
    0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU,
    0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU,
    0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U,
    0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U,
    0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U,
    0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU,
    0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U,
    0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU,
    0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU,
    0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U,
    0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U,
    0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU,
    0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U,
    0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU,
    0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U,
    0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U,
    0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U,
    0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U,
    0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU,
    0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U,
    0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU,
    0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U,
    0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU,
    0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U,
    0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU,
    0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU,
    0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU,
    0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU,
    0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U,
    0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U,
    0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U,
    0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U,
    0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U,
    0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U,
    0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU,
    0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U,
    0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU,
    0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU,
};


__global__ void AES_Encrypt(aes_block aes_block_array[], BYTE key[],int block_number,u32 Te0[], u32 Te1[] ,u32 Te2[] ,u32 Te3[] ) {
    int global_thread_index = blockDim.x*blockIdx.x + threadIdx.x;

    __shared__ u32 keywords[44];
    int stride=blockDim.x*gridDim.x;
    for(int real_thread=global_thread_index;real_thread < block_number;real_thread+=stride){

        if(threadIdx.x == 0 ){
            for(int i=0;i<176;i+=4)
                keywords[i/4]=Byte2Word(key[i],key[i+1],key[i+2],key[i+3]);
        }
        __syncthreads();
        u32 s0,s1,s2,s3,t0,t1,t2,t3;
        BYTE block[16]; //定义一个临时存放加密数据的块

        block[0] = aes_block_array[real_thread].block[0];
        block[1] = aes_block_array[real_thread].block[4];
        block[2] = aes_block_array[real_thread].block[8];
        block[3] = aes_block_array[real_thread].block[12];
        block[4] = aes_block_array[real_thread].block[1];
        block[5] = aes_block_array[real_thread].block[5];
        block[6] = aes_block_array[real_thread].block[9];
        block[7] = aes_block_array[real_thread].block[13];
        block[8] = aes_block_array[real_thread].block[2];
        block[9] = aes_block_array[real_thread].block[6];
        block[10] = aes_block_array[real_thread].block[10];
        block[11] = aes_block_array[real_thread].block[14];
        block[12] = aes_block_array[real_thread].block[3];
        block[13] = aes_block_array[real_thread].block[7];
        block[14] = aes_block_array[real_thread].block[11];
        block[15] = aes_block_array[real_thread].block[15];

        /* 初始addkey*/
        s0=Byte2Word(block[0],block[1],block[2],block[3])^keywords[0];
        s1=Byte2Word(block[4],block[5],block[6],block[7])^keywords[1];
        s2=Byte2Word(block[8],block[9],block[10],block[11])^keywords[2];
        s3=Byte2Word(block[12],block[13],block[14],block[15])^keywords[3];

        /*round 1: */
        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff]^keywords[4];
        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff]^keywords[5];
        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff]^keywords[6];
        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff]^keywords[7];

        /* round 2: */
        s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ keywords[ 8];
        s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ keywords[ 9];
        s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ keywords[10];
        s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ keywords[11];
        
        /* round 3: */
        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ keywords[12];
        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ keywords[13];
        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ keywords[14];
        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ keywords[15];

        /* round 4: */
        s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ keywords[16];
        s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ keywords[17];
        s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ keywords[18];
        s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ keywords[19];

        /* round 5: */
        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ keywords[20];
        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ keywords[21];
        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ keywords[22];
        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ keywords[23];

        /* round 6: */
        s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ keywords[24];
        s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ keywords[25];
        s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ keywords[26];
        s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ keywords[27];

        /* round 7: */
        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ keywords[28];
        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ keywords[29];
        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ keywords[30];
        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ keywords[31];

        /* round 8: */
        s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ keywords[32];
        s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ keywords[33];
        s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ keywords[34];
        s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ keywords[35];

        /* round 9: */
        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ keywords[36];
        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ keywords[37];
        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ keywords[38];
        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ keywords[39];

        /* round 10: */
        s0 =(Te2[(t0 >> 24)] & 0xff000000) ^(Te3[(t1 >> 16) & 0xff] & 0x00ff0000) ^(Te0[(t2 >>8) & 0xff] & 0x0000ff00) ^(Te1[(t3) & 0xff] & 0x000000ff) ^keywords[40];
        s1 =(Te2[(t1 >> 24)] & 0xff000000) ^(Te3[(t2 >> 16) & 0xff] & 0x00ff0000) ^(Te0[(t3 >>8) & 0xff] & 0x0000ff00) ^(Te1[(t0) & 0xff] & 0x000000ff) ^keywords[41];
        s2 =(Te2[(t2 >> 24)] & 0xff000000) ^(Te3[(t3 >> 16) & 0xff] & 0x00ff0000) ^(Te0[(t0 >>8) & 0xff] & 0x0000ff00) ^(Te1[(t1) & 0xff] & 0x000000ff) ^keywords[42];
        s3 =(Te2[(t3 >> 24)] & 0xff000000) ^(Te3[(t0 >> 16) & 0xff] & 0x00ff0000) ^(Te0[(t1 >>8) & 0xff] & 0x0000ff00) ^(Te1[(t2) & 0xff] & 0x000000ff) ^keywords[43];
      
        aes_block_array[real_thread].block[0]=(s0>>24)&0xff;
        aes_block_array[real_thread].block[1]=(s1>>24)&0xff;
        aes_block_array[real_thread].block[2]=(s2>>24)&0xff;
        aes_block_array[real_thread].block[3]=(s3>>24)&0xff;
        aes_block_array[real_thread].block[4]=(s0>>16)&0xff;
        aes_block_array[real_thread].block[5]=(s1>>16)&0xff;
        aes_block_array[real_thread].block[6]=(s2>>16)&0xff;
        aes_block_array[real_thread].block[7]=(s3>>16)&0xff;
        aes_block_array[real_thread].block[8]=(s0>>8)&0xff;
        aes_block_array[real_thread].block[9]=(s1>>8)&0xff;
        aes_block_array[real_thread].block[10]=(s2>>8)&0xff;
        aes_block_array[real_thread].block[11]=(s3>>8)&0xff;
        aes_block_array[real_thread].block[12]=s0&0xff;
        aes_block_array[real_thread].block[13]=s1&0xff;
        aes_block_array[real_thread].block[14]=s2&0xff;
        aes_block_array[real_thread].block[15]=s3&0xff;    
    }
}


int main(int argc, char* argv[]) {
    ifstream ifs;
    ifs.open(argv[1], ios::binary);
    if(!ifs){
        cerr<<"错误：无法打开加密文件"<<endl;
        exit(1);
    }
    ifs.seekg(0, ios::end); 
    int infileLength = ifs.tellg();
    infileLength-=1;
    ifs.seekg(0, ios::beg);
    cout<<"输入文件长度为(字节)： "<<infileLength<<endl<<"文件块个数为： "<<infileLength/16<<endl;

    int block_number = infileLength/16 ;
    int number_of_zero_pending = infileLength%16;
    aes_block* aes_block_array;

    BYTE key[16 * 11]; //定义AES中需要的最大的key
    int keyLen = 0;
    int blockLen = 16;
    ifstream key_fp;
    key_fp.open(argv[2]);
    while(key_fp.peek()!=EOF)
    {
            key_fp>>key[keyLen];
            if(key_fp.eof())
                break;
            keyLen++;
    }

    cout<<"密码长度为（字节）:"<<keyLen<<endl;

    switch (keyLen) 
    {
    case 16:break;
    case 24:break;
    case 32:break;
    default:printf("错误：密钥需要128, 192或256字节\n"); return 0;
    }
    
    AES_ExpandKey(key);

    if(number_of_zero_pending != 0)
        aes_block_array = new aes_block [ block_number + 1];
    else
        aes_block_array = new aes_block[ block_number ];
    char temp[16];

    FILE* en_fp; //定义加密文件
    en_fp = fopen(argv[3], "wb");
    int shiftTab[16]={0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15};
    for(int i=0; i<block_number; i++){
        ifs.read(temp, 16);
        for(int j=0; j<16; j++){
            aes_block_array[i].block[shiftTab[j]] = (unsigned char)temp[j];
        }
    }
    if(number_of_zero_pending != 0)
    {
        ifs.read(temp, number_of_zero_pending);
        for(int j=0; j<16; j++){
            aes_block_array[block_number].block[j] = (unsigned char)temp[j];
        }
        for(int j=1; j<=16-number_of_zero_pending; j++)
            aes_block_array[block_number].block[16-j] = '\0';
        block_number++;
    }
            
    cudaSetDevice(0);	//选择设备
    cudaDeviceProp prop;
    cudaGetDeviceProperties(&prop, 0);
    int num_sm = prop.multiProcessorCount; 

    aes_block *cuda_aes_block_array;
    BYTE *cuda_key;

    // int thrdperblock = block_number/num_sm;
    // if(block_number%num_sm>0)
    //     thrdperblock++;

    // //设备线程快内线程数最多为1024
    // if(thrdperblock>1024){
    //     thrdperblock = 1024;
    //     num_sm = block_number/1024;
    //     if(block_number%1024>0){
    //         num_sm++;
    //     }
    // }

    dim3 ThreadperBlock(1024);
    dim3 BlockperGrid(num_sm);

    cudaMalloc(&cuda_aes_block_array, block_number*sizeof(class aes_block));
    cudaMalloc(&cuda_key,16*15*sizeof(BYTE) );
    cudaMemcpy(cuda_aes_block_array, aes_block_array, block_number*sizeof(class aes_block), cudaMemcpyHostToDevice);
    cudaMemcpy(cuda_key, key, 16*15*sizeof(BYTE), cudaMemcpyHostToDevice);

    //将T-box分配到全局内存
    u32 * cuda_Te0;u32 * cuda_Te1;u32 * cuda_Te2;u32 * cuda_Te3;
    cudaMalloc(&cuda_Te0,256*sizeof(u32));
    cudaMalloc(&cuda_Te1,256*sizeof(u32));
    cudaMalloc(&cuda_Te2,256*sizeof(u32));
    cudaMalloc(&cuda_Te3,256*sizeof(u32));
    cudaMemcpy(cuda_Te0,Te0,256*sizeof(u32),cudaMemcpyHostToDevice);
    cudaMemcpy(cuda_Te1,Te1,256*sizeof(u32),cudaMemcpyHostToDevice);
    cudaMemcpy(cuda_Te2,Te2,256*sizeof(u32),cudaMemcpyHostToDevice);
    cudaMemcpy(cuda_Te3,Te3,256*sizeof(u32),cudaMemcpyHostToDevice);

    printf("加密数据块数: %d\n", block_number);

    cudaEvent_t start1;
    cudaEventCreate(&start1);
    cudaEvent_t stop1;
    cudaEventCreate(&stop1);
    cudaEventRecord(start1, 0);
    AES_Encrypt <<< BlockperGrid, ThreadperBlock>>>(cuda_aes_block_array, cuda_key, block_number, cuda_Te0, cuda_Te1 , cuda_Te2 , cuda_Te3);
    cudaEventRecord(stop1, 0);
    cudaEventSynchronize(stop1);
    float msecTotal1 = 0.0f,total;
    cudaEventElapsedTime(&msecTotal1, start1, stop1);
    cudaEventDestroy(start1);
    cudaEventDestroy(stop1);

    total=msecTotal1/1000;
    cout<<"加密时间："<<total<<endl;
    long r=1<<23; //单位换算常数
    cout<<"吞吐量为："<<block_number/total/r<<" Gbps"<<endl;

    cudaMemcpy(aes_block_array, cuda_aes_block_array, block_number*sizeof(class aes_block), cudaMemcpyDeviceToHost);

    cudaProfilerStop();
    cudaFree(cuda_aes_block_array);
    cudaFree(cuda_key);
    cudaFree(cuda_Te0);
    cudaFree(cuda_Te1);
    cudaFree(cuda_Te2);
    cudaFree(cuda_Te3);
    


    for(int i=0; i<block_number; i++)
        f1printBytes(aes_block_array[i].block, blockLen, en_fp);

    return 0;
}

	.file	"tmpxft_003511ec_00000000-6_AES_v4.cudafe1.cpp"
	.text
#APP
	.globl _ZSt21ios_base_library_initv

#NO_APP
	.type	_ZL26__cudaUnregisterBinaryUtilv, @function
_ZL26__cudaUnregisterBinaryUtilv:
.LFB4014:
	.cfi_startproc
	endbr64
	movq	_ZL20__cudaFatCubinHandle(%rip), %rdi
	jmp	__cudaUnregisterFatBinary@PLT
	.cfi_endproc
.LFE4014:
	.size	_ZL26__cudaUnregisterBinaryUtilv, .-_ZL26__cudaUnregisterBinaryUtilv
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC1:
	.string	"%x "
.LC2:
	.string	"\n"
	.text
	.globl	_Z10printBytesPhi
	.type	_Z10printBytesPhi, @function
_Z10printBytesPhi:
.LFB4005:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	leaq	.LC1(%rip), %r13
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	movq	%rdi, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	movl	%esi, %ebp
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	xorl	%ebx, %ebx
	pushq	%rcx
	.cfi_def_cfa_offset 48
.L3:
	cmpl	%ebx, %ebp
	jle	.L7
	movzbl	(%r12,%rbx), %edx
	movq	%r13, %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	incq	%rbx
	call	__printf_chk@PLT
	jmp	.L3
.L7:
	popq	%rdx
	.cfi_def_cfa_offset 40
	leaq	.LC2(%rip), %rsi
	popq	%rbx
	.cfi_def_cfa_offset 32
	movl	$2, %edi
	popq	%rbp
	.cfi_def_cfa_offset 24
	xorl	%eax, %eax
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE4005:
	.size	_Z10printBytesPhi, .-_Z10printBytesPhi
	.section	.rodata.str1.1
.LC3:
	.string	"%02x "
	.section	.rodata
	.align 32
.LC0:
	.long	0
	.long	4
	.long	8
	.long	12
	.long	1
	.long	5
	.long	9
	.long	13
	.long	2
	.long	6
	.long	10
	.long	14
	.long	3
	.long	7
	.long	11
	.long	15
	.text
	.globl	_Z12f1printBytesPhiP8_IO_FILE
	.type	_Z12f1printBytesPhiP8_IO_FILE, @function
_Z12f1printBytesPhiP8_IO_FILE:
.LFB4006:
	.cfi_startproc
	endbr64
	pushq	%r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	movl	$16, %ecx
	leaq	.LC3(%rip), %r15
	pushq	%r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	pushq	%r13
	.cfi_def_cfa_offset 32
	.cfi_offset 13, -32
	movq	%rdi, %r13
	pushq	%r12
	.cfi_def_cfa_offset 40
	.cfi_offset 12, -40
	movl	%esi, %r12d
	leaq	.LC0(%rip), %rsi
	pushq	%rbp
	.cfi_def_cfa_offset 48
	.cfi_offset 6, -48
	xorl	%ebp, %ebp
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	movq	%rdx, %rbx
	subq	$88, %rsp
	.cfi_def_cfa_offset 144
	movq	%fs:40, %rax
	movq	%rax, 72(%rsp)
	xorl	%eax, %eax
	leaq	8(%rsp), %rdi
	leaq	8(%rsp), %r14
	rep movsl
.L9:
	cmpl	%ebp, %r12d
	jle	.L14
	movslq	(%r14,%rbp,4), %rax
	movq	%r15, %rdx
	movl	$2, %esi
	movq	%rbx, %rdi
	incq	%rbp
	movzbl	0(%r13,%rax), %ecx
	xorl	%eax, %eax
	call	__fprintf_chk@PLT
	jmp	.L9
.L14:
	movq	72(%rsp), %rax
	subq	%fs:40, %rax
	je	.L11
	call	__stack_chk_fail@PLT
.L11:
	addq	$88, %rsp
	.cfi_def_cfa_offset 56
	movq	%rbx, %rdi
	leaq	.LC2(%rip), %rdx
	xorl	%eax, %eax
	popq	%rbx
	.cfi_def_cfa_offset 48
	movl	$2, %esi
	popq	%rbp
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	jmp	__fprintf_chk@PLT
	.cfi_endproc
.LFE4006:
	.size	_Z12f1printBytesPhiP8_IO_FILE, .-_Z12f1printBytesPhiP8_IO_FILE
	.section	.rodata.str1.1
.LC4:
	.string	"%c"
	.text
	.globl	_Z12f2printBytesPhiP8_IO_FILE
	.type	_Z12f2printBytesPhiP8_IO_FILE, @function
_Z12f2printBytesPhiP8_IO_FILE:
.LFB4007:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	leaq	.LC4(%rip), %r14
	pushq	%r13
	.cfi_def_cfa_offset 24
	.cfi_offset 13, -24
	movq	%rdx, %r13
	pushq	%r12
	.cfi_def_cfa_offset 32
	.cfi_offset 12, -32
	movl	%esi, %r12d
	pushq	%rbp
	.cfi_def_cfa_offset 40
	.cfi_offset 6, -40
	movq	%rdi, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 48
	.cfi_offset 3, -48
	xorl	%ebx, %ebx
.L16:
	cmpl	%ebx, %r12d
	jle	.L20
	movzbl	0(%rbp,%rbx), %ecx
	xorl	%eax, %eax
	movq	%r14, %rdx
	movl	$2, %esi
	movq	%r13, %rdi
	call	__fprintf_chk@PLT
	cmpb	$10, 0(%rbp,%rbx)
	jne	.L17
	incl	flag(%rip)
.L17:
	incq	%rbx
	jmp	.L16
.L20:
	popq	%rbx
	.cfi_def_cfa_offset 40
	popq	%rbp
	.cfi_def_cfa_offset 32
	popq	%r12
	.cfi_def_cfa_offset 24
	popq	%r13
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE4007:
	.size	_Z12f2printBytesPhiP8_IO_FILE, .-_Z12f2printBytesPhiP8_IO_FILE
	.globl	_Z12f3printBytesPhiP8_IO_FILE
	.type	_Z12f3printBytesPhiP8_IO_FILE, @function
_Z12f3printBytesPhiP8_IO_FILE:
.LFB4008:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	leaq	.LC4(%rip), %r14
	pushq	%r13
	.cfi_def_cfa_offset 24
	.cfi_offset 13, -24
	movq	%rdx, %r13
	pushq	%r12
	.cfi_def_cfa_offset 32
	.cfi_offset 12, -32
	movl	%esi, %r12d
	pushq	%rbp
	.cfi_def_cfa_offset 40
	.cfi_offset 6, -40
	movq	%rdi, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 48
	.cfi_offset 3, -48
	xorl	%ebx, %ebx
.L22:
	cmpl	%ebx, %r12d
	jle	.L21
	movzbl	0(%rbp,%rbx), %ecx
	testb	%cl, %cl
	je	.L21
	xorl	%eax, %eax
	movq	%r14, %rdx
	movl	$2, %esi
	movq	%r13, %rdi
	call	__fprintf_chk@PLT
	cmpb	$10, 0(%rbp,%rbx)
	jne	.L24
	incl	flag(%rip)
.L24:
	incq	%rbx
	jmp	.L22
.L21:
	popq	%rbx
	.cfi_def_cfa_offset 40
	popq	%rbp
	.cfi_def_cfa_offset 32
	popq	%r12
	.cfi_def_cfa_offset 24
	popq	%r13
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE4008:
	.size	_Z12f3printBytesPhiP8_IO_FILE, .-_Z12f3printBytesPhiP8_IO_FILE
	.globl	_Z13AES_ExpandKeyPh
	.type	_Z13AES_ExpandKeyPh, @function
_Z13AES_ExpandKeyPh:
.LFB4009:
	.cfi_startproc
	endbr64
	subq	$24, %rsp
	.cfi_def_cfa_offset 32
	movq	%rdi, %r9
	movl	$1, %r8d
	movl	$16, %edi
	movq	%fs:40, %rdx
	movq	%rdx, 8(%rsp)
	xorl	%edx, %edx
	leaq	AES_Sbox(%rip), %r10
	leaq	4(%rsp), %r11
.L31:
	movl	-4(%r9,%rdi), %edx
	movl	%edx, 4(%rsp)
	testl	$15, %edi
	jne	.L29
	movzbl	%dh, %ecx
	movb	%r8b, %al
	addl	%r8d, %r8d
	xorb	(%r10,%rcx), %al
	movl	%edx, %ecx
	shrl	$16, %ecx
	movzbl	%cl, %ecx
	movb	(%r10,%rcx), %cl
	movb	%cl, %ah
	movl	%edx, %ecx
	movzbl	%dl, %edx
	shrl	$24, %ecx
	movzbl	(%r10,%rdx), %edx
	movzwl	%ax, %eax
	movzbl	(%r10,%rcx), %ecx
	sall	$24, %edx
	sall	$16, %ecx
	orl	%ecx, %eax
	orl	%edx, %eax
	movl	%eax, 4(%rsp)
	cmpl	$255, %r8d
	jle	.L29
	xorl	$283, %r8d
.L29:
	movq	%rdi, %rcx
	xorl	%edx, %edx
.L30:
	movb	-16(%r9,%rcx), %sil
	incq	%rdx
	xorb	-1(%rdx,%r11), %sil
	movb	%sil, (%r9,%rcx)
	incq	%rcx
	cmpq	$4, %rdx
	jne	.L30
	addq	$4, %rdi
	cmpq	$176, %rdi
	jne	.L31
	movq	8(%rsp), %rax
	subq	%fs:40, %rax
	je	.L32
	call	__stack_chk_fail@PLT
.L32:
	addq	$24, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE4009:
	.size	_Z13AES_ExpandKeyPh, .-_Z13AES_ExpandKeyPh
	.globl	_Z9Byte2Wordhhhh
	.type	_Z9Byte2Wordhhhh, @function
_Z9Byte2Wordhhhh:
.LFB4010:
	.cfi_startproc
	endbr64
	pushq	%rax
	.cfi_def_cfa_offset 16
	popq	%rax
	.cfi_def_cfa_offset 8
	subq	$24, %rsp
	.cfi_def_cfa_offset 32
	movl	$1, 12(%rsp)
	movl	12(%rsp), %edi
	call	exit@PLT
	.cfi_endproc
.LFE4010:
	.size	_Z9Byte2Wordhhhh, .-_Z9Byte2Wordhhhh
	.globl	_Z54__device_stub__Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_P9aes_blockPhiPmS2_S2_S2_
	.type	_Z54__device_stub__Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_P9aes_blockPhiPmS2_S2_S2_, @function
_Z54__device_stub__Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_P9aes_blockPhiPmS2_S2_S2_:
.LFB4036:
	.cfi_startproc
	endbr64
	subq	$200, %rsp
	.cfi_def_cfa_offset 208
	movq	208(%rsp), %rax
	movq	%rdi, 56(%rsp)
	leaq	80(%rsp), %rdi
	movq	%rsi, 48(%rsp)
	leaq	92(%rsp), %rsi
	movl	%edx, 44(%rsp)
	leaq	64(%rsp), %rdx
	movq	%rcx, 32(%rsp)
	leaq	72(%rsp), %rcx
	movq	%r8, 24(%rsp)
	movq	%r9, 16(%rsp)
	movq	%rax, 8(%rsp)
	movq	%fs:40, %rax
	movq	%rax, 184(%rsp)
	xorl	%eax, %eax
	leaq	56(%rsp), %rax
	movl	$1, 88(%rsp)
	movq	%rax, 128(%rsp)
	leaq	48(%rsp), %rax
	movq	%rax, 136(%rsp)
	leaq	44(%rsp), %rax
	movq	%rax, 144(%rsp)
	leaq	32(%rsp), %rax
	movq	%rax, 152(%rsp)
	leaq	24(%rsp), %rax
	movq	%rax, 160(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 168(%rsp)
	leaq	8(%rsp), %rax
	movq	%rax, 176(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 80(%rsp)
	movq	%rax, 92(%rsp)
	movl	$1, 100(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L38
	pushq	72(%rsp)
	.cfi_def_cfa_offset 216
	leaq	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_(%rip), %rdi
	pushq	72(%rsp)
	.cfi_def_cfa_offset 224
	movq	108(%rsp), %rcx
	movl	116(%rsp), %r8d
	movq	96(%rsp), %rsi
	movl	104(%rsp), %edx
	leaq	144(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 216
	popq	%rdx
	.cfi_def_cfa_offset 208
.L38:
	movq	184(%rsp), %rax
	subq	%fs:40, %rax
	je	.L40
	call	__stack_chk_fail@PLT
.L40:
	addq	$200, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE4036:
	.size	_Z54__device_stub__Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_P9aes_blockPhiPmS2_S2_S2_, .-_Z54__device_stub__Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_P9aes_blockPhiPmS2_S2_S2_
	.globl	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.type	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_, @function
_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_:
.LFB4037:
	.cfi_startproc
	endbr64
	jmp	_Z54__device_stub__Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_P9aes_blockPhiPmS2_S2_S2_
	.cfi_endproc
.LFE4037:
	.size	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_, .-_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.section	.rodata.str1.1
.LC5:
	.string	"_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_"
	.section	.text.startup,"ax",@progbits
	.type	_ZL24__sti____cudaRegisterAllv, @function
_ZL24__sti____cudaRegisterAllv:
.LFB4039:
	.cfi_startproc
	endbr64
	pushq	%rax
	.cfi_def_cfa_offset 16
	leaq	_ZL15__fatDeviceText(%rip), %rdi
	call	__cudaRegisterFatBinary@PLT
	pushq	$0
	.cfi_def_cfa_offset 24
	xorl	%r9d, %r9d
	orl	$-1, %r8d
	pushq	$0
	.cfi_def_cfa_offset 32
	leaq	.LC5(%rip), %rdx
	movq	%rax, %rdi
	leaq	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_(%rip), %rsi
	pushq	$0
	.cfi_def_cfa_offset 40
	movq	%rdx, %rcx
	pushq	$0
	.cfi_def_cfa_offset 48
	movq	%rax, _ZL20__cudaFatCubinHandle(%rip)
	call	__cudaRegisterFunction@PLT
	movq	_ZL20__cudaFatCubinHandle(%rip), %rdi
	addq	$32, %rsp
	.cfi_def_cfa_offset 16
	call	__cudaRegisterFatBinaryEnd@PLT
	leaq	_ZL26__cudaUnregisterBinaryUtilv(%rip), %rdi
	popq	%rdx
	.cfi_def_cfa_offset 8
	jmp	atexit@PLT
	.cfi_endproc
.LFE4039:
	.size	_ZL24__sti____cudaRegisterAllv, .-_ZL24__sti____cudaRegisterAllv
	.section	.init_array,"aw"
	.align 8
	.quad	_ZL24__sti____cudaRegisterAllv
	.section	.rodata.str1.1
.LC6:
	.string	"\351\224\231\350\257\257\357\274\232\346\227\240\346\263\225\346\211\223\345\274\200\345\212\240\345\257\206\346\226\207\344\273\266"
.LC7:
	.string	"\350\276\223\345\205\245\346\226\207\344\273\266\351\225\277\345\272\246\344\270\272(\345\255\227\350\212\202)\357\274\232 "
.LC8:
	.string	"\346\226\207\344\273\266\345\235\227\344\270\252\346\225\260\344\270\272\357\274\232 "
.LC9:
	.string	"\345\257\206\347\240\201\351\225\277\345\272\246\344\270\272\357\274\210\345\255\227\350\212\202\357\274\211:"
.LC10:
	.string	"\351\224\231\350\257\257\357\274\232\345\257\206\351\222\245\351\234\200\350\246\201128, 192\346\210\226256\345\255\227\350\212\202\n"
.LC11:
	.string	"wb"
.LC12:
	.string	"\345\212\240\345\257\206\346\225\260\346\215\256\345\235\227\346\225\260: %d\n"
.LC15:
	.string	"\345\212\240\345\257\206\346\227\266\351\227\264\357\274\232"
.LC16:
	.string	"\345\220\236\345\220\220\351\207\217\344\270\272\357\274\232"
.LC18:
	.string	" Gbps"
	.section	.text.startup
	.globl	main
	.type	main, @function
main:
.LFB4011:
	.cfi_startproc
	.cfi_personality 0x9b,DW.ref.__gxx_personality_v0
	.cfi_lsda 0x1b,.LLSDA4011
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	pushq	%r15
	pushq	%r14
	pushq	%r13
	.cfi_offset 15, -24
	.cfi_offset 14, -32
	.cfi_offset 13, -40
	movq	%rsi, %r13
	pushq	%r12
	pushq	%rbx
	subq	$2488, %rsp
	.cfi_offset 12, -48
	.cfi_offset 3, -56
	movq	%fs:40, %rax
	movq	%rax, -56(%rbp)
	xorl	%eax, %eax
	leaq	-2320(%rbp), %rax
	movq	%rax, %rdi
	movq	%rax, -2488(%rbp)
.LEHB0:
	call	_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev@PLT
.LEHE0:
	movq	8(%r13), %rsi
	movl	$4, %edx
	movq	-2488(%rbp), %rdi
.LEHB1:
	call	_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@PLT
	movl	-2032(%rbp), %eax
	andl	$5, %eax
	movl	%eax, -2516(%rbp)
	je	.L46
	leaq	.LC6(%rip), %rsi
	leaq	_ZSt4cerr(%rip), %rdi
	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
	movq	_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rsi
	movq	%rax, %rdi
	call	_ZNSolsEPFRSoS_E@PLT
	movl	$1, %edi
	call	exit@PLT
.L46:
	movq	-2488(%rbp), %rdi
	movl	$2, %edx
	xorl	%esi, %esi
	call	_ZNSi5seekgElSt12_Ios_Seekdir@PLT
	movq	-2488(%rbp), %rdi
	call	_ZNSi5tellgEv@PLT
	movq	-2488(%rbp), %rdi
	decl	%eax
	xorl	%edx, %edx
	xorl	%esi, %esi
	movl	%eax, -2496(%rbp)
	call	_ZNSi5seekgElSt12_Ios_Seekdir@PLT
	leaq	_ZSt4cout(%rip), %r14
	leaq	.LC7(%rip), %rsi
	movq	%r14, %rdi
	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
	movl	-2496(%rbp), %esi
	movq	%rax, %rdi
	call	_ZNSolsEi@PLT
	movq	_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rsi
	movq	%rax, %rdi
	call	_ZNSolsEPFRSoS_E@PLT
	movq	%rax, %rdi
	leaq	.LC8(%rip), %rsi
	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
	movq	%rax, %rdi
	movl	-2496(%rbp), %eax
	movl	$16, %ecx
	cltd
	idivl	%ecx
	movl	%eax, %esi
	movl	%eax, -2492(%rbp)
	movl	%eax, %r12d
	call	_ZNSolsEi@PLT
	movq	_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rsi
	movq	%rax, %rdi
	call	_ZNSolsEPFRSoS_E@PLT
	leaq	-1800(%rbp), %rax
	movq	%rax, %rdi
	movq	%rax, -2504(%rbp)
	call	_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev@PLT
.LEHE1:
	movq	16(%r13), %rsi
	movq	-2504(%rbp), %rdi
	movl	$8, %edx
.LEHB2:
	call	_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@PLT
	xorl	%ebx, %ebx
	leaq	-232(%rbp), %r15
.L47:
	movq	-2504(%rbp), %rdi
	call	_ZNSi4peekEv@PLT
	incl	%eax
	je	.L50
	movq	-2504(%rbp), %rdi
	leaq	(%r15,%rbx), %rsi
	call	_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_RS3_@PLT
	leaq	1(%rbx), %rax
	testb	$2, -1512(%rbp)
	je	.L75
.L50:
	leaq	.LC9(%rip), %rsi
	movq	%r14, %rdi
	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
	movq	%rax, %rdi
	movl	%ebx, %esi
	call	_ZNSolsEi@PLT
	jmp	.L92
.L75:
	movq	%rax, %rbx
	jmp	.L47
.L92:
	movq	_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rsi
	movq	%rax, %rdi
	call	_ZNSolsEPFRSoS_E@PLT
	cmpl	$32, %ebx
	ja	.L51
	movl	$65793, %eax
	salq	$16, %rax
	btq	%rbx, %rax
	jc	.L52
.L51:
	leaq	.LC10(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
.L69:
	movq	-2504(%rbp), %rdi
	call	_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@PLT
	movq	-2488(%rbp), %rdi
	call	_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@PLT
	movq	-56(%rbp), %rax
	subq	%fs:40, %rax
	je	.L73
	jmp	.L85
.L52:
	leaq	-232(%rbp), %rdi
	call	_Z13AES_ExpandKeyPh
	movl	-2496(%rbp), %eax
	andl	$15, %eax
	movl	%eax, -2520(%rbp)
	je	.L53
	movl	-2492(%rbp), %eax
	leal	1(%rax), %edi
	movabsq	$576460752303423487, %rax
	movslq	%edi, %rdi
	cmpq	%rdi, %rax
	jnb	.L91
	movq	-56(%rbp), %rax
	subq	%fs:40, %rax
	jne	.L85
	call	__cxa_throw_bad_array_new_length@PLT
.L53:
	movslq	-2492(%rbp), %rdi
	movabsq	$576460752303423487, %rax
	cmpq	%rdi, %rax
	jb	.L57
.L91:
	salq	$4, %rdi
	call	_Znam@PLT
	movq	24(%r13), %rdi
	leaq	.LC11(%rip), %rsi
	movq	%rax, %rbx
	call	fopen@PLT
	leaq	-2384(%rbp), %rdi
	movl	$16, %ecx
	leaq	.LC0(%rip), %rsi
	movq	%rax, -2528(%rbp)
	rep movsl
	movq	%rbx, -2512(%rbp)
	movq	%rbx, %r14
	xorl	%r13d, %r13d
	leaq	-248(%rbp), %r15
	jmp	.L59
.L57:
	movq	-56(%rbp), %rax
	subq	%fs:40, %rax
	jne	.L85
	call	__cxa_throw_bad_array_new_length@PLT
.L61:
	movq	-2488(%rbp), %rdi
	movl	$16, %edx
	movq	%r15, %rsi
	call	_ZNSi4readEPcl@PLT
	xorl	%eax, %eax
.L60:
	movslq	-2384(%rbp,%rax,4), %rdx
	movb	(%rax,%r15), %cl
	incq	%rax
	movb	%cl, (%r14,%rdx)
	cmpq	$16, %rax
	jne	.L60
	incl	%r13d
	addq	$16, %r14
.L59:
	cmpl	%r13d, -2492(%rbp)
	jg	.L61
	cmpl	$0, -2520(%rbp)
	je	.L62
	movl	-2496(%rbp), %eax
	movl	$16, %ecx
	leaq	-248(%rbp), %r13
	movq	-2488(%rbp), %rdi
	movq	%r13, %rsi
	cltd
	idivl	%ecx
	movslq	%edx, %rdx
	movq	%rdx, %r12
	call	_ZNSi4readEPcl@PLT
	movslq	-2492(%rbp), %rax
	xorl	%edx, %edx
	salq	$4, %rax
	addq	%rbx, %rax
.L63:
	movb	0(%r13,%rdx), %cl
	movb	%cl, (%rax,%rdx)
	incq	%rdx
	cmpq	$16, %rdx
	jne	.L63
	movl	$15, %edx
	subl	%r12d, %edx
	movl	-2492(%rbp), %r12d
	subq	%rdx, %rax
	leal	1(%rdx), %ecx
	leaq	15(%rax), %rsi
	xorl	%eax, %eax
	incl	%r12d
	movq	%rsi, %rdi
	rep stosb
.L62:
	xorl	%edi, %edi
	call	cudaSetDevice@PLT
	leaq	-1280(%rbp), %rdi
	xorl	%esi, %esi
	call	cudaGetDeviceProperties_v2@PLT
	movl	$4194305, %eax
	leaq	-2472(%rbp), %rdi
	movl	$1, -2400(%rbp)
	salq	$10, %rax
	movq	%rax, -2408(%rbp)
	movl	-892(%rbp), %eax
	movl	%eax, -2396(%rbp)
	movabsq	$4294967297, %rax
	movq	%rax, -2392(%rbp)
	movslq	%r12d, %rax
	salq	$4, %rax
	movq	%rax, %rsi
	movq	%rax, %r15
	call	cudaMalloc@PLT
	leaq	-2464(%rbp), %rdi
	movl	$240, %esi
	call	cudaMalloc@PLT
	movq	-2472(%rbp), %rdi
	movl	$1, %ecx
	movq	%r15, %rdx
	movq	%rbx, %rsi
	call	cudaMemcpy@PLT
	movq	-2464(%rbp), %rdi
	movl	$1, %ecx
	movl	$240, %edx
	leaq	-232(%rbp), %rsi
	call	cudaMemcpy@PLT
	leaq	-2456(%rbp), %rdi
	movl	$2048, %esi
	call	cudaMalloc@PLT
	leaq	-2448(%rbp), %rdi
	movl	$2048, %esi
	call	cudaMalloc@PLT
	leaq	-2440(%rbp), %rdi
	movl	$2048, %esi
	call	cudaMalloc@PLT
	leaq	-2432(%rbp), %rdi
	movl	$2048, %esi
	call	cudaMalloc@PLT
	movq	-2456(%rbp), %rdi
	movl	$1, %ecx
	movl	$2048, %edx
	leaq	Te0(%rip), %rsi
	call	cudaMemcpy@PLT
	movq	-2448(%rbp), %rdi
	movl	$1, %ecx
	movl	$2048, %edx
	leaq	Te1(%rip), %rsi
	call	cudaMemcpy@PLT
	movq	-2440(%rbp), %rdi
	movl	$1, %ecx
	movl	$2048, %edx
	leaq	Te2(%rip), %rsi
	call	cudaMemcpy@PLT
	movq	-2432(%rbp), %rdi
	movl	$1, %ecx
	movl	$2048, %edx
	leaq	Te3(%rip), %rsi
	call	cudaMemcpy@PLT
	movl	%r12d, %edx
	leaq	.LC12(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	-2424(%rbp), %rdi
	call	cudaEventCreate@PLT
	leaq	-2416(%rbp), %rdi
	call	cudaEventCreate@PLT
	movq	-2424(%rbp), %rdi
	xorl	%esi, %esi
	call	cudaEventRecord@PLT
	movl	-2400(%rbp), %ecx
	movq	-2408(%rbp), %rdx
	xorl	%r9d, %r9d
	xorl	%r8d, %r8d
	movq	-2396(%rbp), %rdi
	movl	-2388(%rbp), %esi
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	je	.L64
.L66:
	movq	-2416(%rbp), %rdi
	xorl	%esi, %esi
	call	cudaEventRecord@PLT
	jmp	.L93
.L64:
	pushq	%rcx
	movq	-2464(%rbp), %rsi
	movl	%r12d, %edx
	pushq	-2432(%rbp)
	movq	-2472(%rbp), %rdi
	movq	-2440(%rbp), %r9
	movq	-2448(%rbp), %r8
	movq	-2456(%rbp), %rcx
	.cfi_escape 0x2e,0x10
	call	_Z54__device_stub__Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_P9aes_blockPhiPmS2_S2_S2_
	popq	%rax
	popq	%rdx
	jmp	.L66
.L93:
	movq	-2416(%rbp), %rdi
	.cfi_escape 0x2e,0
	call	cudaEventSynchronize@PLT
	movq	-2416(%rbp), %rdx
	movq	-2424(%rbp), %rsi
	leaq	-2476(%rbp), %rdi
	movl	$0x00000000, -2476(%rbp)
	call	cudaEventElapsedTime@PLT
	movq	-2424(%rbp), %rdi
	call	cudaEventDestroy@PLT
	movq	-2416(%rbp), %rdi
	call	cudaEventDestroy@PLT
	leaq	_ZSt4cout(%rip), %r13
	leaq	.LC15(%rip), %rsi
	movss	-2476(%rbp), %xmm0
	divss	.LC14(%rip), %xmm0
	movq	%r13, %rdi
	movss	%xmm0, -2492(%rbp)
	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
	movq	%rax, %rdi
	cvtss2sd	-2492(%rbp), %xmm0
	call	_ZNSo9_M_insertIdEERSoT_@PLT
	movq	_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rsi
	movq	%rax, %rdi
	call	_ZNSolsEPFRSoS_E@PLT
	leaq	.LC16(%rip), %rsi
	movq	%r13, %rdi
	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
	cvtsi2ssl	%r12d, %xmm0
	divss	-2492(%rbp), %xmm0
	movq	%rax, %rdi
	mulss	.LC17(%rip), %xmm0
	cvtss2sd	%xmm0, %xmm0
	call	_ZNSo9_M_insertIdEERSoT_@PLT
	movq	%rax, %rdi
	leaq	.LC18(%rip), %rsi
	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
	movq	_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rsi
	movq	%rax, %rdi
	call	_ZNSolsEPFRSoS_E@PLT
	movq	-2472(%rbp), %rsi
	movl	$2, %ecx
	movq	%r15, %rdx
	movq	%rbx, %rdi
	call	cudaMemcpy@PLT
	call	cudaProfilerStop@PLT
	movq	-2472(%rbp), %rdi
	call	cudaFree@PLT
	movq	-2464(%rbp), %rdi
	call	cudaFree@PLT
	movq	-2456(%rbp), %rdi
	call	cudaFree@PLT
	movq	-2448(%rbp), %rdi
	call	cudaFree@PLT
	movq	-2440(%rbp), %rdi
	call	cudaFree@PLT
	movq	-2432(%rbp), %rdi
	call	cudaFree@PLT
.L67:
	movl	-2516(%rbp), %eax
	cmpl	%eax, %r12d
	jle	.L69
	movq	-2528(%rbp), %rdx
	movq	-2512(%rbp), %rdi
	movl	$16, %esi
	call	_Z12f1printBytesPhiP8_IO_FILE
.LEHE2:
	incl	-2516(%rbp)
	addq	$16, -2512(%rbp)
	jmp	.L67
.L77:
	endbr64
	movq	%rax, %rbx
.L70:
	movq	-2504(%rbp), %rdi
	call	_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@PLT
	jmp	.L71
.L76:
	endbr64
	movq	%rax, %rbx
.L71:
	movq	-2488(%rbp), %rdi
	call	_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@PLT
	movq	-56(%rbp), %rax
	subq	%fs:40, %rax
	jne	.L85
	movq	%rbx, %rdi
.LEHB3:
	call	_Unwind_Resume@PLT
.LEHE3:
.L85:
	call	__stack_chk_fail@PLT
.L73:
	leaq	-40(%rbp), %rsp
	xorl	%eax, %eax
	popq	%rbx
	popq	%r12
	popq	%r13
	popq	%r14
	popq	%r15
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE4011:
	.globl	__gxx_personality_v0
	.section	.gcc_except_table,"a",@progbits
.LLSDA4011:
	.byte	0xff
	.byte	0xff
	.byte	0x1
	.uleb128 .LLSDACSE4011-.LLSDACSB4011
.LLSDACSB4011:
	.uleb128 .LEHB0-.LFB4011
	.uleb128 .LEHE0-.LEHB0
	.uleb128 0
	.uleb128 0
	.uleb128 .LEHB1-.LFB4011
	.uleb128 .LEHE1-.LEHB1
	.uleb128 .L76-.LFB4011
	.uleb128 0
	.uleb128 .LEHB2-.LFB4011
	.uleb128 .LEHE2-.LEHB2
	.uleb128 .L77-.LFB4011
	.uleb128 0
	.uleb128 .LEHB3-.LFB4011
	.uleb128 .LEHE3-.LEHB3
	.uleb128 0
	.uleb128 0
.LLSDACSE4011:
	.section	.text.startup
	.size	main, .-main
	.section	.nvFatBinSegment,"aw"
	.align 8
	.type	_ZL15__fatDeviceText, @object
	.size	_ZL15__fatDeviceText, 24
_ZL15__fatDeviceText:
	.long	1180844977
	.long	1
	.quad	fatbinData
	.quad	0
	.local	_ZL20__cudaFatCubinHandle
	.comm	_ZL20__cudaFatCubinHandle,8,8
	.globl	Te3
	.data
	.align 32
	.type	Te3, @object
	.size	Te3, 2048
Te3:
	.quad	1667474886
	.quad	2088535288
	.quad	2004326894
	.quad	2071694838
	.quad	4075949567
	.quad	1802223062
	.quad	1869591006
	.quad	3318043793
	.quad	808472672
	.quad	16843522
	.quad	1734846926
	.quad	724270422
	.quad	4278065639
	.quad	3621216949
	.quad	2880169549
	.quad	1987484396
	.quad	3402253711
	.quad	2189597983
	.quad	3385409673
	.quad	2105378810
	.quad	4210693615
	.quad	1499065266
	.quad	1195886990
	.quad	4042263547
	.quad	2913856577
	.quad	3570689971
	.quad	2728590687
	.quad	2947541573
	.quad	2627518243
	.quad	2762274643
	.quad	1920112356
	.quad	3233831835
	.quad	3082273397
	.quad	4261223649
	.quad	2475929149
	.quad	640051788
	.quad	909531756
	.quad	1061110142
	.quad	4160160501
	.quad	3435941763
	.quad	875846760
	.quad	2779116625
	.quad	3857003729
	.quad	4059105529
	.quad	1903268834
	.quad	3638064043
	.quad	825316194
	.quad	353713962
	.quad	67374088
	.quad	3351728789
	.quad	589522246
	.quad	3284360861
	.quad	404236336
	.quad	2526454071
	.quad	84217610
	.quad	2593830191
	.quad	117901582
	.quad	303183396
	.quad	2155911963
	.quad	3806477791
	.quad	3958056653
	.quad	656894286
	.quad	2998062463
	.quad	1970642922
	.quad	151591698
	.quad	2206440989
	.quad	741110872
	.quad	437923380
	.quad	454765878
	.quad	1852748508
	.quad	1515908788
	.quad	2694904667
	.quad	1381168804
	.quad	993742198
	.quad	3604373943
	.quad	3014905469
	.quad	690584402
	.quad	3823320797
	.quad	791638366
	.quad	2223281939
	.quad	1398011302
	.quad	3520161977
	.quad	0
	.quad	3991743681
	.quad	538992704
	.quad	4244381667
	.quad	2981218425
	.quad	1532751286
	.quad	1785380564
	.quad	3419096717
	.quad	3200178535
	.quad	960056178
	.quad	1246420628
	.quad	1280103576
	.quad	1482221744
	.quad	3486468741
	.quad	3503319995
	.quad	4025428677
	.quad	2863326543
	.quad	4227536621
	.quad	1128514950
	.quad	1296947098
	.quad	859002214
	.quad	2240123921
	.quad	1162203018
	.quad	4193849577
	.quad	33687044
	.quad	2139062782
	.quad	1347481760
	.quad	1010582648
	.quad	2678045221
	.quad	2829640523
	.quad	1364325282
	.quad	2745433693
	.quad	1077985408
	.quad	2408548869
	.quad	2459086143
	.quad	2644360225
	.quad	943212656
	.quad	4126475505
	.quad	3166494563
	.quad	3065430391
	.quad	3671750063
	.quad	555836226
	.quad	269496352
	.quad	4294908645
	.quad	4092792573
	.quad	3537006015
	.quad	3452783745
	.quad	202118168
	.quad	320025894
	.quad	3974901699
	.quad	1600119230
	.quad	2543297077
	.quad	1145359496
	.quad	387397934
	.quad	3301201811
	.quad	2812801621
	.quad	2122220284
	.quad	1027426170
	.quad	1684319432
	.quad	1566435258
	.quad	421079858
	.quad	1936954854
	.quad	1616945344
	.quad	2172753945
	.quad	1330631070
	.quad	3705438115
	.quad	572679748
	.quad	707427924
	.quad	2425400123
	.quad	2290647819
	.quad	1179044492
	.quad	4008585671
	.quad	3099120491
	.quad	336870440
	.quad	3739122087
	.quad	1583276732
	.quad	185277718
	.quad	3688593069
	.quad	3772791771
	.quad	842159716
	.quad	976899700
	.quad	168435220
	.quad	1229577106
	.quad	101059084
	.quad	606366792
	.quad	1549591736
	.quad	3267517855
	.quad	3553849021
	.quad	2897014595
	.quad	1650632388
	.quad	2442242105
	.quad	2509612081
	.quad	3840161747
	.quad	2038008818
	.quad	3890688725
	.quad	3368567691
	.quad	926374254
	.quad	1835907034
	.quad	2374863873
	.quad	3587531953
	.quad	1313788572
	.quad	2846482505
	.quad	1819063512
	.quad	1448540844
	.quad	4109633523
	.quad	3941213647
	.quad	1701162954
	.quad	2054852340
	.quad	2930698567
	.quad	134748176
	.quad	3132806511
	.quad	2021165296
	.quad	623210314
	.quad	774795868
	.quad	471606328
	.quad	2795958615
	.quad	3031746419
	.quad	3334885783
	.quad	3907527627
	.quad	3722280097
	.quad	1953799400
	.quad	522133822
	.quad	1263263126
	.quad	3183336545
	.quad	2341176845
	.quad	2324333839
	.quad	1886425312
	.quad	1044267644
	.quad	3048588401
	.quad	1718004428
	.quad	1212733584
	.quad	50529542
	.quad	4143317495
	.quad	235803164
	.quad	1633788866
	.quad	892690282
	.quad	1465383342
	.quad	3115962473
	.quad	2256965911
	.quad	3250673817
	.quad	488449850
	.quad	2661202215
	.quad	3789633753
	.quad	4177007595
	.quad	2560144171
	.quad	286339874
	.quad	1768537042
	.quad	3654906025
	.quad	2391705863
	.quad	2492770099
	.quad	2610673197
	.quad	505291324
	.quad	2273808917
	.quad	3924369609
	.quad	3469625735
	.quad	1431699370
	.quad	673740880
	.quad	3755965093
	.quad	2358021891
	.quad	2711746649
	.quad	2307489801
	.quad	218961690
	.quad	3217021541
	.quad	3873845719
	.quad	1111672452
	.quad	1751693520
	.quad	1094828930
	.quad	2576986153
	.quad	757954394
	.quad	252645662
	.quad	2964376443
	.quad	1414855848
	.quad	3149649517
	.quad	370555436
	.globl	Te2
	.align 32
	.type	Te2, @object
	.size	Te2, 2048
Te2:
	.quad	1671808611
	.quad	2089089148
	.quad	2006576759
	.quad	2072901243
	.quad	4061003762
	.quad	1807603307
	.quad	1873927791
	.quad	3310653893
	.quad	810573872
	.quad	16974337
	.quad	1739181671
	.quad	729634347
	.quad	4263110654
	.quad	3613570519
	.quad	2883997099
	.quad	1989864566
	.quad	3393556426
	.quad	2191335298
	.quad	3376449993
	.quad	2106063485
	.quad	4195741690
	.quad	1508618841
	.quad	1204391495
	.quad	4027317232
	.quad	2917941677
	.quad	3563566036
	.quad	2734514082
	.quad	2951366063
	.quad	2629772188
	.quad	2767672228
	.quad	1922491506
	.quad	3227229120
	.quad	3082974647
	.quad	4246528509
	.quad	2477669779
	.quad	644500518
	.quad	911895606
	.quad	1061256767
	.quad	4144166391
	.quad	3427763148
	.quad	878471220
	.quad	2784252325
	.quad	3845444069
	.quad	4043897329
	.quad	1905517169
	.quad	3631459288
	.quad	827548209
	.quad	356461077
	.quad	67897348
	.quad	3344078279
	.quad	593839651
	.quad	3277757891
	.quad	405286936
	.quad	2527147926
	.quad	84871685
	.quad	2595565466
	.quad	118033927
	.quad	305538066
	.quad	2157648768
	.quad	3795705826
	.quad	3945188843
	.quad	661212711
	.quad	2999812018
	.quad	1973414517
	.quad	152769033
	.quad	2208177539
	.quad	745822252
	.quad	439235610
	.quad	455947803
	.quad	1857215598
	.quad	1525593178
	.quad	2700827552
	.quad	1391895634
	.quad	994932283
	.quad	3596728278
	.quad	3016654259
	.quad	695947817
	.quad	3812548067
	.quad	795958831
	.quad	2224493444
	.quad	1408607827
	.quad	3513301457
	.quad	0
	.quad	3979133421
	.quad	543178784
	.quad	4229948412
	.quad	2982705585
	.quad	1542305371
	.quad	1790891114
	.quad	3410398667
	.quad	3201918910
	.quad	961245753
	.quad	1256100938
	.quad	1289001036
	.quad	1491644504
	.quad	3477767631
	.quad	3496721360
	.quad	4012557807
	.quad	2867154858
	.quad	4212583931
	.quad	1137018435
	.quad	1305975373
	.quad	861234739
	.quad	2241073541
	.quad	1171229253
	.quad	4178635257
	.quad	33948674
	.quad	2139225727
	.quad	1357946960
	.quad	1011120188
	.quad	2679776671
	.quad	2833468328
	.quad	1374921297
	.quad	2751356323
	.quad	1086357568
	.quad	2408187279
	.quad	2460827538
	.quad	2646352285
	.quad	944271416
	.quad	4110742005
	.quad	3168756668
	.quad	3066132406
	.quad	3665145818
	.quad	560153121
	.quad	271589392
	.quad	4279952895
	.quad	4077846003
	.quad	3530407890
	.quad	3444343245
	.quad	202643468
	.quad	322250259
	.quad	3962553324
	.quad	1608629855
	.quad	2543990167
	.quad	1154254916
	.quad	389623319
	.quad	3294073796
	.quad	2817676711
	.quad	2122513534
	.quad	1028094525
	.quad	1689045092
	.quad	1575467613
	.quad	422261273
	.quad	1939203699
	.quad	1621147744
	.quad	2174228865
	.quad	1339137615
	.quad	3699352540
	.quad	577127458
	.quad	712922154
	.quad	2427141008
	.quad	2290289544
	.quad	1187679302
	.quad	3995715566
	.quad	3100863416
	.quad	339486740
	.quad	3732514782
	.quad	1591917662
	.quad	186455563
	.quad	3681988059
	.quad	3762019296
	.quad	844522546
	.quad	978220090
	.quad	169743370
	.quad	1239126601
	.quad	101321734
	.quad	611076132
	.quad	1558493276
	.quad	3260915650
	.quad	3547250131
	.quad	2901361580
	.quad	1655096418
	.quad	2443721105
	.quad	2510565781
	.quad	3828863972
	.quad	2039214713
	.quad	3878868455
	.quad	3359869896
	.quad	928607799
	.quad	1840765549
	.quad	2374762893
	.quad	3580146133
	.quad	1322425422
	.quad	2850048425
	.quad	1823791212
	.quad	1459268694
	.quad	4094161908
	.quad	3928346602
	.quad	1706019429
	.quad	2056189050
	.quad	2934523822
	.quad	135794696
	.quad	3134549946
	.quad	2022240376
	.quad	628050469
	.quad	779246638
	.quad	472135708
	.quad	2800834470
	.quad	3032970164
	.quad	3327236038
	.quad	3894660072
	.quad	3715932637
	.quad	1956440180
	.quad	522272287
	.quad	1272813131
	.quad	3185336765
	.quad	2340818315
	.quad	2323976074
	.quad	1888542832
	.quad	1044544574
	.quad	3049550261
	.quad	1722469478
	.quad	1222152264
	.quad	50660867
	.quad	4127324150
	.quad	236067854
	.quad	1638122081
	.quad	895445557
	.quad	1475980887
	.quad	3117443513
	.quad	2257655686
	.quad	3243809217
	.quad	489110045
	.quad	2662934430
	.quad	3778599393
	.quad	4162055160
	.quad	2561878936
	.quad	288563729
	.quad	1773916777
	.quad	3648039385
	.quad	2391345038
	.quad	2493985684
	.quad	2612407707
	.quad	505560094
	.quad	2274497927
	.quad	3911240169
	.quad	3460925390
	.quad	1442818645
	.quad	678973480
	.quad	3749357023
	.quad	2358182796
	.quad	2717407649
	.quad	2306869641
	.quad	219617805
	.quad	3218761151
	.quad	3862026214
	.quad	1120306242
	.quad	1756942440
	.quad	1103331905
	.quad	2578459033
	.quad	762796589
	.quad	252780047
	.quad	2966125488
	.quad	1425844308
	.quad	3151392187
	.quad	372911126
	.globl	Te1
	.align 32
	.type	Te1, @object
	.size	Te1, 2048
Te1:
	.quad	2781242211
	.quad	2230877308
	.quad	2582542199
	.quad	2381740923
	.quad	234877682
	.quad	3184946027
	.quad	2984144751
	.quad	1418839493
	.quad	1348481072
	.quad	50462977
	.quad	2848876391
	.quad	2102799147
	.quad	434634494
	.quad	1656084439
	.quad	3863849899
	.quad	2599188086
	.quad	1167051466
	.quad	2636087938
	.quad	1082771913
	.quad	2281340285
	.quad	368048890
	.quad	3954334041
	.quad	3381544775
	.quad	201060592
	.quad	3963727277
	.quad	1739838676
	.quad	4250903202
	.quad	3930435503
	.quad	3206782108
	.quad	4149453988
	.quad	2531553906
	.quad	1536934080
	.quad	3262494647
	.quad	484572669
	.quad	2923271059
	.quad	1783375398
	.quad	1517041206
	.quad	1098792767
	.quad	49674231
	.quad	1334037708
	.quad	1550332980
	.quad	4098991525
	.quad	886171109
	.quad	150598129
	.quad	2481090929
	.quad	1940642008
	.quad	1398944049
	.quad	1059722517
	.quad	201851908
	.quad	1385547719
	.quad	1699095331
	.quad	1587397571
	.quad	674240536
	.quad	2704774806
	.quad	252314885
	.quad	3039795866
	.quad	151914247
	.quad	908333586
	.quad	2602270848
	.quad	1038082786
	.quad	651029483
	.quad	1766729511
	.quad	3447698098
	.quad	2682942837
	.quad	454166793
	.quad	2652734339
	.quad	1951935532
	.quad	775166490
	.quad	758520603
	.quad	3000790638
	.quad	4004797018
	.quad	4217086112
	.quad	4137964114
	.quad	1299594043
	.quad	1639438038
	.quad	3464344499
	.quad	2068982057
	.quad	1054729187
	.quad	1901997871
	.quad	2534638724
	.quad	4121318227
	.quad	1757008337
	.quad	0
	.quad	750906861
	.quad	1614815264
	.quad	535035132
	.quad	3363418545
	.quad	3988151131
	.quad	3201591914
	.quad	1183697867
	.quad	3647454910
	.quad	1265776953
	.quad	3734260298
	.quad	3566750796
	.quad	3903871064
	.quad	1250283471
	.quad	1807470800
	.quad	717615087
	.quad	3847203498
	.quad	384695291
	.quad	3313910595
	.quad	3617213773
	.quad	1432761139
	.quad	2484176261
	.quad	3481945413
	.quad	283769337
	.quad	100925954
	.quad	2180939647
	.quad	4037038160
	.quad	1148730428
	.quad	3123027871
	.quad	3813386408
	.quad	4087501137
	.quad	4267549603
	.quad	3229630528
	.quad	2315620239
	.quad	2906624658
	.quad	3156319645
	.quad	1215313976
	.quad	82966005
	.quad	3747855548
	.quad	3245848246
	.quad	1974459098
	.quad	1665278241
	.quad	807407632
	.quad	451280895
	.quad	251524083
	.quad	1841287890
	.quad	1283575245
	.quad	337120268
	.quad	891687699
	.quad	801369324
	.quad	3787349855
	.quad	2721421207
	.quad	3431482436
	.quad	959321879
	.quad	1469301956
	.quad	4065699751
	.quad	2197585534
	.quad	1199193405
	.quad	2898814052
	.quad	3887750493
	.quad	724703513
	.quad	2514908019
	.quad	2696962144
	.quad	2551808385
	.quad	3516813135
	.quad	2141445340
	.quad	1715741218
	.quad	2119445034
	.quad	2872807568
	.quad	2198571144
	.quad	3398190662
	.quad	700968686
	.quad	3547052216
	.quad	1009259540
	.quad	2041044702
	.quad	3803995742
	.quad	487983883
	.quad	1991105499
	.quad	1004265696
	.quad	1449407026
	.quad	1316239930
	.quad	504629770
	.quad	3683797321
	.quad	168560134
	.quad	1816667172
	.quad	3837287516
	.quad	1570751170
	.quad	1857934291
	.quad	4014189740
	.quad	2797888098
	.quad	2822345105
	.quad	2754712981
	.quad	936633572
	.quad	2347923833
	.quad	852879335
	.quad	1133234376
	.quad	1500395319
	.quad	3084545389
	.quad	2348912013
	.quad	1689376213
	.quad	3533459022
	.quad	3762923945
	.quad	3034082412
	.quad	4205598294
	.quad	133428468
	.quad	634383082
	.quad	2949277029
	.quad	2398386810
	.quad	3913789102
	.quad	403703816
	.quad	3580869306
	.quad	2297460856
	.quad	1867130149
	.quad	1918643758
	.quad	607656988
	.quad	4049053350
	.quad	3346248884
	.quad	1368901318
	.quad	600565992
	.quad	2090982877
	.quad	2632479860
	.quad	557719327
	.quad	3717614411
	.quad	3697393085
	.quad	2249034635
	.quad	2232388234
	.quad	2430627952
	.quad	1115438654
	.quad	3295786421
	.quad	2865522278
	.quad	3633334344
	.quad	84280067
	.quad	33027830
	.quad	303828494
	.quad	2747425121
	.quad	1600795957
	.quad	4188952407
	.quad	3496589753
	.quad	2434238086
	.quad	1486471617
	.quad	658119965
	.quad	3106381470
	.quad	953803233
	.quad	334231800
	.quad	3005978776
	.quad	857870609
	.quad	3151128937
	.quad	1890179545
	.quad	2298973838
	.quad	2805175444
	.quad	3056442267
	.quad	574365214
	.quad	2450884487
	.quad	550103529
	.quad	1233637070
	.quad	4289353045
	.quad	2018519080
	.quad	2057691103
	.quad	2399374476
	.quad	4166623649
	.quad	2148108681
	.quad	387583245
	.quad	3664101311
	.quad	836232934
	.quad	3330556482
	.quad	3100665960
	.quad	3280093505
	.quad	2955516313
	.quad	2002398509
	.quad	287182607
	.quad	3413881008
	.quad	4238890068
	.quad	3597515707
	.quad	975967766
	.globl	Te0
	.align 32
	.type	Te0, @object
	.size	Te0, 2048
Te0:
	.quad	3328402341
	.quad	4168907908
	.quad	4000806809
	.quad	4135287693
	.quad	4294111757
	.quad	3597364157
	.quad	3731845041
	.quad	2445657428
	.quad	1613770832
	.quad	33620227
	.quad	3462883241
	.quad	1445669757
	.quad	3892248089
	.quad	3050821474
	.quad	1303096294
	.quad	3967186586
	.quad	2412431941
	.quad	528646813
	.quad	2311702848
	.quad	4202528135
	.quad	4026202645
	.quad	2992200171
	.quad	2387036105
	.quad	4226871307
	.quad	1101901292
	.quad	3017069671
	.quad	1604494077
	.quad	1169141738
	.quad	597466303
	.quad	1403299063
	.quad	3832705686
	.quad	2613100635
	.quad	1974974402
	.quad	3791519004
	.quad	1033081774
	.quad	1277568618
	.quad	1815492186
	.quad	2118074177
	.quad	4126668546
	.quad	2211236943
	.quad	1748251740
	.quad	1369810420
	.quad	3521504564
	.quad	4193382664
	.quad	3799085459
	.quad	2883115123
	.quad	1647391059
	.quad	706024767
	.quad	134480908
	.quad	2512897874
	.quad	1176707941
	.quad	2646852446
	.quad	806885416
	.quad	932615841
	.quad	168101135
	.quad	798661301
	.quad	235341577
	.quad	605164086
	.quad	461406363
	.quad	3756188221
	.quad	3454790438
	.quad	1311188841
	.quad	2142417613
	.quad	3933566367
	.quad	302582043
	.quad	495158174
	.quad	1479289972
	.quad	874125870
	.quad	907746093
	.quad	3698224818
	.quad	3025820398
	.quad	1537253627
	.quad	2756858614
	.quad	1983593293
	.quad	3084310113
	.quad	2108928974
	.quad	1378429307
	.quad	3722699582
	.quad	1580150641
	.quad	327451799
	.quad	2790478837
	.quad	3117535592
	.quad	0
	.quad	3253595436
	.quad	1075847264
	.quad	3825007647
	.quad	2041688520
	.quad	3059440621
	.quad	3563743934
	.quad	2378943302
	.quad	1740553945
	.quad	1916352843
	.quad	2487896798
	.quad	2555137236
	.quad	2958579944
	.quad	2244988746
	.quad	3151024235
	.quad	3320835882
	.quad	1336584933
	.quad	3992714006
	.quad	2252555205
	.quad	2588757463
	.quad	1714631509
	.quad	293963156
	.quad	2319795663
	.quad	3925473552
	.quad	67240454
	.quad	4269768577
	.quad	2689618160
	.quad	2017213508
	.quad	631218106
	.quad	1269344483
	.quad	2723238387
	.quad	1571005438
	.quad	2151694528
	.quad	93294474
	.quad	1066570413
	.quad	563977660
	.quad	1882732616
	.quad	4059428100
	.quad	1673313503
	.quad	2008463041
	.quad	2950355573
	.quad	1109467491
	.quad	537923632
	.quad	3858759450
	.quad	4260623118
	.quad	3218264685
	.quad	2177748300
	.quad	403442708
	.quad	638784309
	.quad	3287084079
	.quad	3193921505
	.quad	899127202
	.quad	2286175436
	.quad	773265209
	.quad	2479146071
	.quad	1437050866
	.quad	4236148354
	.quad	2050833735
	.quad	3362022572
	.quad	3126681063
	.quad	840505643
	.quad	3866325909
	.quad	3227541664
	.quad	427917720
	.quad	2655997905
	.quad	2749160575
	.quad	1143087718
	.quad	1412049534
	.quad	999329963
	.quad	193497219
	.quad	2353415882
	.quad	3354324521
	.quad	1807268051
	.quad	672404540
	.quad	2816401017
	.quad	3160301282
	.quad	369822493
	.quad	2916866934
	.quad	3688947771
	.quad	1681011286
	.quad	1949973070
	.quad	336202270
	.quad	2454276571
	.quad	201721354
	.quad	1210328172
	.quad	3093060836
	.quad	2680341085
	.quad	3184776046
	.quad	1135389935
	.quad	3294782118
	.quad	965841320
	.quad	831886756
	.quad	3554993207
	.quad	4068047243
	.quad	3588745010
	.quad	2345191491
	.quad	1849112409
	.quad	3664604599
	.quad	26054028
	.quad	2983581028
	.quad	2622377682
	.quad	1235855840
	.quad	3630984372
	.quad	2891339514
	.quad	4092916743
	.quad	3488279077
	.quad	3395642799
	.quad	4101667470
	.quad	1202630377
	.quad	268961816
	.quad	1874508501
	.quad	4034427016
	.quad	1243948399
	.quad	1546530418
	.quad	941366308
	.quad	1470539505
	.quad	1941222599
	.quad	2546386513
	.quad	3421038627
	.quad	2715671932
	.quad	3899946140
	.quad	1042226977
	.quad	2521517021
	.quad	1639824860
	.quad	227249030
	.quad	260737669
	.quad	3765465232
	.quad	2084453954
	.quad	1907733956
	.quad	3429263018
	.quad	2420656344
	.quad	100860677
	.quad	4160157185
	.quad	470683154
	.quad	3261161891
	.quad	1781871967
	.quad	2924959737
	.quad	1773779408
	.quad	394692241
	.quad	2579611992
	.quad	974986535
	.quad	664706745
	.quad	3655459128
	.quad	3958962195
	.quad	731420851
	.quad	571543859
	.quad	3530123707
	.quad	2849626480
	.quad	126783113
	.quad	865375399
	.quad	765172662
	.quad	1008606754
	.quad	361203602
	.quad	3387549984
	.quad	2278477385
	.quad	2857719295
	.quad	1344809080
	.quad	2782912378
	.quad	59542671
	.quad	1503764984
	.quad	160008576
	.quad	437062935
	.quad	1707065306
	.quad	3622233649
	.quad	2218934982
	.quad	3496503480
	.quad	2185314755
	.quad	697932208
	.quad	1512910199
	.quad	504303377
	.quad	2075177163
	.quad	2824099068
	.quad	1841019862
	.quad	739644986
	.globl	flag
	.bss
	.align 4
	.type	flag, @object
	.size	flag, 4
flag:
	.zero	4
	.globl	AES_Sbox
	.data
	.align 32
	.type	AES_Sbox, @object
	.size	AES_Sbox, 256
AES_Sbox:
	.string	"c|w{\362ko\3050\001g+\376\327\253v\312\202\311}\372YG\360\255\324\242\257\234\244r\300\267\375\223&6?\367\3144\245\345\361q\3301\025\004\307#\303\030\226\005\232\007\022\200\342\353'\262u\t\203,\032\033nZ\240R;\326\263)\343/\204S\321"
	.ascii	"\355 \374\261[j\313\2769JLX\317\320\357\252\373CM3\205E\371\002"
	.ascii	"\177P<\237\250Q\243@\217\222\2358\365\274\266\332!\020\377\363"
	.ascii	"\322\315\f\023\354_\227D\027\304\247~=d]\031s`\201O\334\"*\220"
	.ascii	"\210F\356\270\024\336^\013\333\3402:\nI\006$\\\302\323\254b\221"
	.ascii	"\225\344y\347\3107m\215\325N\251lV\364\352ez\256\b\272x%.\034"
	.ascii	"\246\264\306\350\335t\037K\275\213\212p>\265fH\003\366\016a5"
	.ascii	"W\271\206\301\035\236\341\370\230\021i\331\216\224\233\036\207"
	.ascii	"\351\316U(\337\214\241\211\r\277\346BhA\231-\017\260T\273\026"
	.section	.rodata.cst4,"aM",@progbits,4
	.align 4
.LC14:
	.long	1148846080
	.align 4
.LC17:
	.long	872415232
	.hidden	DW.ref.__gxx_personality_v0
	.weak	DW.ref.__gxx_personality_v0
	.section	.data.rel.local.DW.ref.__gxx_personality_v0,"awG",@progbits,DW.ref.__gxx_personality_v0,comdat
	.align 8
	.type	DW.ref.__gxx_personality_v0, @object
	.size	DW.ref.__gxx_personality_v0, 8
DW.ref.__gxx_personality_v0:
	.quad	__gxx_personality_v0
	.ident	"GCC: (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

/**********key使用共享内存*************/
/**********使用T-box***********/
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <cstring>
#include <hip/hip_runtime.h>
#include <iomanip>
#include <time.h>
#include "hip/hip_runtime_api.h"

#define BYTE unsigned char
typedef unsigned long u32;

using namespace std;

class aes_block
{
public:
    BYTE block[16];
};

BYTE AES_Sbox[] =
{   /*0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f */
    0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76, /*0*/ 
    0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0, /*1*/
    0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15, /*2*/
    0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75, /*3*/
    0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84, /*4*/
    0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf, /*5*/
    0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8, /*6*/ 
    0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2, /*7*/
    0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73, /*8*/
    0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb, /*9*/
    0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79, /*a*/
    0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08, /*b*/
    0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a, /*c*/
    0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e, /*d*/
    0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf, /*e*/
    0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16  /*f*/
};

void printBytes(BYTE b[], int len) {
int i;
for (i=0; i<len; i++)
    printf("%x ", b[i]);
printf("\n");
}


void f1printBytes(BYTE b[], int len, FILE* fp) {
int i;
int shiftTab[16]={0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15};
for (i=0; i<len; i++)
   fprintf(fp, "%02x ", b[shiftTab[i]]);
fprintf(fp, "\n");
}

int flag=0;
void f2printBytes(BYTE b[], int len, FILE* fp) {
int i;
for (i=0; i<len; i++){
   fprintf(fp, "%c", b[i]);
   if(b[i]=='\n')
        flag++;
   }
}

void f3printBytes(BYTE b[], int len, FILE* fp) {
int i;
for (i=0; i<len; i++){
    if(b[i]=='\0')
        return ;
    fprintf(fp, "%c", b[i]);
    if(b[i]=='\n')
    flag++;
   }
}

void AES_ExpandKey(BYTE key[]) {
    int kl = 16, ks=176, Rcon = 1, i, j;
    BYTE temp[4], temp2[4];

    for(i = kl; i < ks; i += 4) {
        memcpy(temp, &key[i-4], 4);
    if (i % kl == 0) {
        temp2[0] = AES_Sbox[temp[1]] ^ Rcon;
        temp2[1] = AES_Sbox[temp[2]];
        temp2[2] = AES_Sbox[temp[3]];
        temp2[3] = AES_Sbox[temp[0]];
        memcpy(temp, temp2, 4);
        if ((Rcon <<= 1) >= 256)
            Rcon ^= 0x11b;
}
    else if ((kl > 24) && (i % kl == 16)) {
        temp2[0] = AES_Sbox[temp[0]];
        temp2[1] = AES_Sbox[temp[1]];
        temp2[2] = AES_Sbox[temp[2]];
        temp2[3] = AES_Sbox[temp[3]];
        memcpy(temp, temp2, 4);
    }
    for(j = 0; j < 4; j++)
        key[i + j] = key[i + j - kl] ^ temp[j];
    }
}

__device__ u32 Byte2Word(BYTE k1, BYTE k2, BYTE k3, BYTE k4){
    u32 result(0x00000000);  
    u32 temp;  
    temp = k1;  // K1  
    temp <<= 24;  
    result |= temp;  
    temp = k2;  // K2  
    temp <<= 16;  
    result |= temp;  
    temp = k3;  // K3  
    temp <<= 8;  
    result |= temp;  
    temp = k4;  // K4  
    result |= temp;  
    return result;  
}

u32 Te0[256] = {
    0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU,
    0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U,
    0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU,
    0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU,
    0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U,
    0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU,
    0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU,
    0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU,
    0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU,
    0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU,
    0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U,
    0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU,
    0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU,
    0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U,
    0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU,
    0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU,
    0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU,
    0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU,
    0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU,
    0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U,
    0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU,
    0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU,
    0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU,
    0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU,
    0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U,
    0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U,
    0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U,
    0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U,
    0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU,
    0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U,
    0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U,
    0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU,
    0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU,
    0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U,
    0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U,
    0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U,
    0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU,
    0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U,
    0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU,
    0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U,
    0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU,
    0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U,
    0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U,
    0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU,
    0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U,
    0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U,
    0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U,
    0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U,
    0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U,
    0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U,
    0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U,
    0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U,
    0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU,
    0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U,
    0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U,
    0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U,
    0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U,
    0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U,
    0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U,
    0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU,
    0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U,
    0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U,
    0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U,
    0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU,
};

u32 Te1[256] = {
    0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU,
    0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U,
    0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU,
    0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U,
    0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU,
    0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U,
    0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU,
    0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U,
    0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U,
    0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU,
    0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U,
    0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U,
    0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U,
    0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU,
    0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U,
    0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U,
    0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU,
    0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U,
    0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U,
    0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U,
    0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU,
    0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU,
    0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U,
    0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU,
    0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU,
    0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U,
    0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU,
    0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U,
    0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU,
    0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U,
    0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U,
    0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U,
    0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU,
    0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U,
    0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU,
    0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U,
    0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU,
    0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U,
    0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U,
    0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU,
    0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU,
    0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU,
    0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U,
    0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U,
    0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU,
    0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U,
    0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU,
    0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U,
    0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU,
    0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U,
    0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU,
    0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU,
    0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U,
    0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU,
    0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U,
    0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU,
    0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U,
    0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U,
    0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U,
    0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU,
    0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU,
    0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U,
    0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU,
    0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U,
};

u32 Te2[256] = {
    0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU,
    0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U,
    0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU,
    0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U,
    0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU,
    0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U,
    0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU,
    0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U,
    0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U,
    0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU,
    0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U,
    0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U,
    0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U,
    0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU,
    0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U,
    0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U,
    0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU,
    0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U,
    0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U,
    0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U,
    0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU,
    0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU,
    0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U,
    0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU,
    0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU,
    0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U,
    0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU,
    0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U,
    0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU,
    0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U,
    0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U,
    0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U,
    0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU,
    0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U,
    0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU,
    0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U,
    0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU,
    0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U,
    0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U,
    0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU,
    0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU,
    0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU,
    0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U,
    0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U,
    0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU,
    0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U,
    0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU,
    0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U,
    0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU,
    0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U,
    0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU,
    0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU,
    0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U,
    0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU,
    0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U,
    0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU,
    0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U,
    0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U,
    0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U,
    0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU,
    0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU,
    0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U,
    0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU,
    0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U,
};

u32 Te3[256] = {
    0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U,
    0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U,
    0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U,
    0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU,
    0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU,
    0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU,
    0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U,
    0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU,
    0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU,
    0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U,
    0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U,
    0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU,
    0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU,
    0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU,
    0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU,
    0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU,
    0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U,
    0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU,
    0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU,
    0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U,
    0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U,
    0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U,
    0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U,
    0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U,
    0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU,
    0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U,
    0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU,
    0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU,
    0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U,
    0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U,
    0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U,
    0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU,
    0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U,
    0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU,
    0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU,
    0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U,
    0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U,
    0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU,
    0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U,
    0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU,
    0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U,
    0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U,
    0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U,
    0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U,
    0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU,
    0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U,
    0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU,
    0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U,
    0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU,
    0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U,
    0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU,
    0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU,
    0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU,
    0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU,
    0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U,
    0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U,
    0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U,
    0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U,
    0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U,
    0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U,
    0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU,
    0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U,
    0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU,
    0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU,
};


__global__ void AES_Encrypt(aes_block aes_block_array[], BYTE key[],int block_number,u32 Te0[], u32 Te1[] ,u32 Te2[] ,u32 Te3[] ) {
    int global_thread_index = blockDim.x*blockIdx.x + threadIdx.x;

    __shared__ u32 keywords[44];
    int stride=blockDim.x*gridDim.x;
    for(int real_thread=global_thread_index;real_thread < block_number;real_thread+=stride){

        if(threadIdx.x == 0 ){
            for(int i=0;i<176;i+=4)
                keywords[i/4]=Byte2Word(key[i],key[i+1],key[i+2],key[i+3]);
        }
        __syncthreads();
        u32 s0,s1,s2,s3,t0,t1,t2,t3;
        BYTE block[16]; //定义一个临时存放加密数据的块

        block[0] = aes_block_array[real_thread].block[0];
        block[1] = aes_block_array[real_thread].block[4];
        block[2] = aes_block_array[real_thread].block[8];
        block[3] = aes_block_array[real_thread].block[12];
        block[4] = aes_block_array[real_thread].block[1];
        block[5] = aes_block_array[real_thread].block[5];
        block[6] = aes_block_array[real_thread].block[9];
        block[7] = aes_block_array[real_thread].block[13];
        block[8] = aes_block_array[real_thread].block[2];
        block[9] = aes_block_array[real_thread].block[6];
        block[10] = aes_block_array[real_thread].block[10];
        block[11] = aes_block_array[real_thread].block[14];
        block[12] = aes_block_array[real_thread].block[3];
        block[13] = aes_block_array[real_thread].block[7];
        block[14] = aes_block_array[real_thread].block[11];
        block[15] = aes_block_array[real_thread].block[15];

        /* 初始addkey*/
        s0=Byte2Word(block[0],block[1],block[2],block[3])^keywords[0];
        s1=Byte2Word(block[4],block[5],block[6],block[7])^keywords[1];
        s2=Byte2Word(block[8],block[9],block[10],block[11])^keywords[2];
        s3=Byte2Word(block[12],block[13],block[14],block[15])^keywords[3];

        /*round 1: */
        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff]^keywords[4];
        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff]^keywords[5];
        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff]^keywords[6];
        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff]^keywords[7];

        /* round 2: */
        s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ keywords[ 8];
        s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ keywords[ 9];
        s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ keywords[10];
        s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ keywords[11];
        
        /* round 3: */
        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ keywords[12];
        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ keywords[13];
        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ keywords[14];
        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ keywords[15];

        /* round 4: */
        s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ keywords[16];
        s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ keywords[17];
        s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ keywords[18];
        s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ keywords[19];

        /* round 5: */
        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ keywords[20];
        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ keywords[21];
        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ keywords[22];
        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ keywords[23];

        /* round 6: */
        s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ keywords[24];
        s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ keywords[25];
        s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ keywords[26];
        s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ keywords[27];

        /* round 7: */
        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ keywords[28];
        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ keywords[29];
        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ keywords[30];
        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ keywords[31];

        /* round 8: */
        s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ keywords[32];
        s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ keywords[33];
        s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ keywords[34];
        s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ keywords[35];

        /* round 9: */
        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ keywords[36];
        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ keywords[37];
        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ keywords[38];
        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ keywords[39];

        /* round 10: */
        s0 =(Te2[(t0 >> 24)] & 0xff000000) ^(Te3[(t1 >> 16) & 0xff] & 0x00ff0000) ^(Te0[(t2 >>8) & 0xff] & 0x0000ff00) ^(Te1[(t3) & 0xff] & 0x000000ff) ^keywords[40];
        s1 =(Te2[(t1 >> 24)] & 0xff000000) ^(Te3[(t2 >> 16) & 0xff] & 0x00ff0000) ^(Te0[(t3 >>8) & 0xff] & 0x0000ff00) ^(Te1[(t0) & 0xff] & 0x000000ff) ^keywords[41];
        s2 =(Te2[(t2 >> 24)] & 0xff000000) ^(Te3[(t3 >> 16) & 0xff] & 0x00ff0000) ^(Te0[(t0 >>8) & 0xff] & 0x0000ff00) ^(Te1[(t1) & 0xff] & 0x000000ff) ^keywords[42];
        s3 =(Te2[(t3 >> 24)] & 0xff000000) ^(Te3[(t0 >> 16) & 0xff] & 0x00ff0000) ^(Te0[(t1 >>8) & 0xff] & 0x0000ff00) ^(Te1[(t2) & 0xff] & 0x000000ff) ^keywords[43];
      
        aes_block_array[real_thread].block[0]=(s0>>24)&0xff;
        aes_block_array[real_thread].block[1]=(s1>>24)&0xff;
        aes_block_array[real_thread].block[2]=(s2>>24)&0xff;
        aes_block_array[real_thread].block[3]=(s3>>24)&0xff;
        aes_block_array[real_thread].block[4]=(s0>>16)&0xff;
        aes_block_array[real_thread].block[5]=(s1>>16)&0xff;
        aes_block_array[real_thread].block[6]=(s2>>16)&0xff;
        aes_block_array[real_thread].block[7]=(s3>>16)&0xff;
        aes_block_array[real_thread].block[8]=(s0>>8)&0xff;
        aes_block_array[real_thread].block[9]=(s1>>8)&0xff;
        aes_block_array[real_thread].block[10]=(s2>>8)&0xff;
        aes_block_array[real_thread].block[11]=(s3>>8)&0xff;
        aes_block_array[real_thread].block[12]=s0&0xff;
        aes_block_array[real_thread].block[13]=s1&0xff;
        aes_block_array[real_thread].block[14]=s2&0xff;
        aes_block_array[real_thread].block[15]=s3&0xff;    
    }
}


int main(int argc, char* argv[]) {
    ifstream ifs;
    ifs.open(argv[1], ios::binary);
    if(!ifs){
        cerr<<"错误：无法打开加密文件"<<endl;
        exit(1);
    }
    ifs.seekg(0, ios::end); 
    int infileLength = ifs.tellg();
    infileLength-=1;
    ifs.seekg(0, ios::beg);
    cout<<"输入文件长度为(字节)： "<<infileLength<<endl<<"文件块个数为： "<<infileLength/16<<endl;

    int block_number = infileLength/16 ;
    int number_of_zero_pending = infileLength%16;
    aes_block* aes_block_array;

    BYTE key[16 * 11]; //定义AES中需要的最大的key
    int keyLen = 0;
    int blockLen = 16;
    ifstream key_fp;
    key_fp.open(argv[2]);
    while(key_fp.peek()!=EOF)
    {
            key_fp>>key[keyLen];
            if(key_fp.eof())
                break;
            keyLen++;
    }

    cout<<"密码长度为（字节）:"<<keyLen<<endl;

    switch (keyLen) 
    {
    case 16:break;
    case 24:break;
    case 32:break;
    default:printf("错误：密钥需要128, 192或256字节\n"); return 0;
    }
    
    AES_ExpandKey(key);

    if(number_of_zero_pending != 0)
        aes_block_array = new aes_block [ block_number + 1];
    else
        aes_block_array = new aes_block[ block_number ];
    char temp[16];

    FILE* en_fp; //定义加密文件
    en_fp = fopen(argv[3], "wb");
    int shiftTab[16]={0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15};
    for(int i=0; i<block_number; i++){
        ifs.read(temp, 16);
        for(int j=0; j<16; j++){
            aes_block_array[i].block[shiftTab[j]] = (unsigned char)temp[j];
        }
    }
    if(number_of_zero_pending != 0)
    {
        ifs.read(temp, number_of_zero_pending);
        for(int j=0; j<16; j++){
            aes_block_array[block_number].block[j] = (unsigned char)temp[j];
        }
        for(int j=1; j<=16-number_of_zero_pending; j++)
            aes_block_array[block_number].block[16-j] = '\0';
        block_number++;
    }
            
    hipSetDevice(0);	//选择设备
    hipDeviceProp_t prop;
    hipGetDeviceProperties(&prop, 0);
    int num_sm = prop.multiProcessorCount; 

    aes_block *cuda_aes_block_array;
    BYTE *cuda_key;

    // int thrdperblock = block_number/num_sm;
    // if(block_number%num_sm>0)
    //     thrdperblock++;

    // //设备线程快内线程数最多为1024
    // if(thrdperblock>1024){
    //     thrdperblock = 1024;
    //     num_sm = block_number/1024;
    //     if(block_number%1024>0){
    //         num_sm++;
    //     }
    // }

    dim3 ThreadperBlock(1024);
    dim3 BlockperGrid(num_sm);

    hipMalloc(&cuda_aes_block_array, block_number*sizeof(class aes_block));
    hipMalloc(&cuda_key,16*15*sizeof(BYTE) );
    hipMemcpy(cuda_aes_block_array, aes_block_array, block_number*sizeof(class aes_block), hipMemcpyHostToDevice);
    hipMemcpy(cuda_key, key, 16*15*sizeof(BYTE), hipMemcpyHostToDevice);

    //将T-box分配到全局内存
    u32 * cuda_Te0;u32 * cuda_Te1;u32 * cuda_Te2;u32 * cuda_Te3;
    hipMalloc(&cuda_Te0,256*sizeof(u32));
    hipMalloc(&cuda_Te1,256*sizeof(u32));
    hipMalloc(&cuda_Te2,256*sizeof(u32));
    hipMalloc(&cuda_Te3,256*sizeof(u32));
    hipMemcpy(cuda_Te0,Te0,256*sizeof(u32),hipMemcpyHostToDevice);
    hipMemcpy(cuda_Te1,Te1,256*sizeof(u32),hipMemcpyHostToDevice);
    hipMemcpy(cuda_Te2,Te2,256*sizeof(u32),hipMemcpyHostToDevice);
    hipMemcpy(cuda_Te3,Te3,256*sizeof(u32),hipMemcpyHostToDevice);

    printf("加密数据块数: %d\n", block_number);

    hipEvent_t start1;
    hipEventCreate(&start1);
    hipEvent_t stop1;
    hipEventCreate(&stop1);
    hipEventRecord(start1, 0);
    AES_Encrypt <<< BlockperGrid, ThreadperBlock>>>(cuda_aes_block_array, cuda_key, block_number, cuda_Te0, cuda_Te1 , cuda_Te2 , cuda_Te3);
    hipEventRecord(stop1, 0);
    hipEventSynchronize(stop1);
    float msecTotal1 = 0.0f,total;
    hipEventElapsedTime(&msecTotal1, start1, stop1);
    hipEventDestroy(start1);
    hipEventDestroy(stop1);

    total=msecTotal1/1000;
    cout<<"加密时间："<<total<<endl;
    long r=1<<23; //单位换算常数
    cout<<"吞吐量为："<<block_number/total/r<<" Gbps"<<endl;

    hipMemcpy(aes_block_array, cuda_aes_block_array, block_number*sizeof(class aes_block), hipMemcpyDeviceToHost);

    hipProfilerStop();
    hipFree(cuda_aes_block_array);
    hipFree(cuda_key);
    hipFree(cuda_Te0);
    hipFree(cuda_Te1);
    hipFree(cuda_Te2);
    hipFree(cuda_Te3);
    


    for(int i=0; i<block_number; i++)
        f1printBytes(aes_block_array[i].block, blockLen, en_fp);

    return 0;
}

	.text
	.file	"AES_v4.hip"
                                        # Start of file scope inline assembly
	.globl	_ZSt21ios_base_library_initv

                                        # End of file scope inline assembly
	.globl	_Z10printBytesPhi               # -- Begin function _Z10printBytesPhi
	.type	_Z10printBytesPhi,@function
_Z10printBytesPhi:                      # @_Z10printBytesPhi
	.cfi_startproc
# %bb.0:
	testl	%esi, %esi
	jle	.LBB0_4
# %bb.1:                                # %.lr.ph.preheader
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%rbx
	.cfi_def_cfa_offset 32
	.cfi_offset %rbx, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	movq	%rdi, %rbx
	movl	%esi, %r14d
	xorl	%r15d, %r15d
.LBB0_2:                                # %.lr.ph
                                        # =>This Inner Loop Header: Depth=1
	movzbl	(%rbx,%r15), %esi
	movl	$.L.str, %edi
	xorl	%eax, %eax
	callq	printf
	incq	%r15
	cmpq	%r15, %r14
	jne	.LBB0_2
# %bb.3:
	popq	%rbx
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	.cfi_restore %rbx
	.cfi_restore %r14
	.cfi_restore %r15
.LBB0_4:                                # %._crit_edge
	movl	$10, %edi
	jmp	putchar@PLT                     # TAILCALL
.Lfunc_end0:
	.size	_Z10printBytesPhi, .Lfunc_end0-_Z10printBytesPhi
	.cfi_endproc
                                        # -- End function
	.section	.rodata.cst16,"aM",@progbits,16
	.p2align	4, 0x0                          # -- Begin function _Z12f1printBytesPhiP8_IO_FILE
.LCPI1_0:
	.long	0                               # 0x0
	.long	4                               # 0x4
	.long	8                               # 0x8
	.long	12                              # 0xc
.LCPI1_1:
	.long	1                               # 0x1
	.long	5                               # 0x5
	.long	9                               # 0x9
	.long	13                              # 0xd
.LCPI1_2:
	.long	2                               # 0x2
	.long	6                               # 0x6
	.long	10                              # 0xa
	.long	14                              # 0xe
.LCPI1_3:
	.long	3                               # 0x3
	.long	7                               # 0x7
	.long	11                              # 0xb
	.long	15                              # 0xf
	.text
	.globl	_Z12f1printBytesPhiP8_IO_FILE
	.type	_Z12f1printBytesPhiP8_IO_FILE,@function
_Z12f1printBytesPhiP8_IO_FILE:          # @_Z12f1printBytesPhiP8_IO_FILE
	.cfi_startproc
# %bb.0:
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%r12
	.cfi_def_cfa_offset 32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	subq	$72, %rsp
	.cfi_def_cfa_offset 112
	.cfi_offset %rbx, -40
	.cfi_offset %r12, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	movq	%rdx, %rbx
	movaps	.LCPI1_0(%rip), %xmm0           # xmm0 = [0,4,8,12]
	movaps	%xmm0, (%rsp)
	movaps	.LCPI1_1(%rip), %xmm0           # xmm0 = [1,5,9,13]
	movaps	%xmm0, 16(%rsp)
	movaps	.LCPI1_2(%rip), %xmm0           # xmm0 = [2,6,10,14]
	movaps	%xmm0, 32(%rsp)
	movaps	.LCPI1_3(%rip), %xmm0           # xmm0 = [3,7,11,15]
	movaps	%xmm0, 48(%rsp)
	testl	%esi, %esi
	jle	.LBB1_3
# %bb.1:                                # %.lr.ph.preheader
	movq	%rdi, %r14
	movl	%esi, %r15d
	xorl	%r12d, %r12d
.LBB1_2:                                # %.lr.ph
                                        # =>This Inner Loop Header: Depth=1
	movslq	(%rsp,%r12,4), %rax
	movzbl	(%r14,%rax), %edx
	movl	$.L.str.2, %esi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	callq	fprintf
	incq	%r12
	cmpq	%r12, %r15
	jne	.LBB1_2
.LBB1_3:                                # %._crit_edge
	movl	$10, %edi
	movq	%rbx, %rsi
	addq	$72, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%r12
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	jmp	fputc@PLT                       # TAILCALL
.Lfunc_end1:
	.size	_Z12f1printBytesPhiP8_IO_FILE, .Lfunc_end1-_Z12f1printBytesPhiP8_IO_FILE
	.cfi_endproc
                                        # -- End function
	.globl	_Z12f2printBytesPhiP8_IO_FILE   # -- Begin function _Z12f2printBytesPhiP8_IO_FILE
	.type	_Z12f2printBytesPhiP8_IO_FILE,@function
_Z12f2printBytesPhiP8_IO_FILE:          # @_Z12f2printBytesPhiP8_IO_FILE
	.cfi_startproc
# %bb.0:
	testl	%esi, %esi
	jle	.LBB2_6
# %bb.1:                                # %.lr.ph.preheader
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%r12
	.cfi_def_cfa_offset 32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	pushq	%rax
	.cfi_def_cfa_offset 48
	.cfi_offset %rbx, -40
	.cfi_offset %r12, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	movq	%rdx, %rbx
	movq	%rdi, %r14
	movl	%esi, %r15d
	xorl	%r12d, %r12d
.LBB2_2:                                # %.lr.ph
                                        # =>This Inner Loop Header: Depth=1
	movzbl	(%r14,%r12), %edi
	movq	%rbx, %rsi
	callq	fputc@PLT
	cmpb	$10, (%r14,%r12)
	jne	.LBB2_4
# %bb.3:                                #   in Loop: Header=BB2_2 Depth=1
	incl	flag(%rip)
.LBB2_4:                                #   in Loop: Header=BB2_2 Depth=1
	incq	%r12
	cmpq	%r12, %r15
	jne	.LBB2_2
# %bb.5:
	addq	$8, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%r12
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	.cfi_restore %rbx
	.cfi_restore %r12
	.cfi_restore %r14
	.cfi_restore %r15
.LBB2_6:                                # %._crit_edge
	retq
.Lfunc_end2:
	.size	_Z12f2printBytesPhiP8_IO_FILE, .Lfunc_end2-_Z12f2printBytesPhiP8_IO_FILE
	.cfi_endproc
                                        # -- End function
	.globl	_Z12f3printBytesPhiP8_IO_FILE   # -- Begin function _Z12f3printBytesPhiP8_IO_FILE
	.type	_Z12f3printBytesPhiP8_IO_FILE,@function
_Z12f3printBytesPhiP8_IO_FILE:          # @_Z12f3printBytesPhiP8_IO_FILE
	.cfi_startproc
# %bb.0:
	testl	%esi, %esi
	jle	.LBB3_7
# %bb.1:                                # %.lr.ph.preheader
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%r12
	.cfi_def_cfa_offset 32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	pushq	%rax
	.cfi_def_cfa_offset 48
	.cfi_offset %rbx, -40
	.cfi_offset %r12, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	movq	%rdx, %rbx
	movq	%rdi, %r14
	movl	%esi, %r15d
	xorl	%r12d, %r12d
.LBB3_2:                                # %.lr.ph
                                        # =>This Inner Loop Header: Depth=1
	movzbl	(%r14,%r12), %edi
	testl	%edi, %edi
	je	.LBB3_6
# %bb.3:                                #   in Loop: Header=BB3_2 Depth=1
	movq	%rbx, %rsi
	callq	fputc@PLT
	cmpb	$10, (%r14,%r12)
	jne	.LBB3_5
# %bb.4:                                #   in Loop: Header=BB3_2 Depth=1
	incl	flag(%rip)
.LBB3_5:                                #   in Loop: Header=BB3_2 Depth=1
	incq	%r12
	cmpq	%r12, %r15
	jne	.LBB3_2
.LBB3_6:
	addq	$8, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%r12
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	.cfi_restore %rbx
	.cfi_restore %r12
	.cfi_restore %r14
	.cfi_restore %r15
.LBB3_7:                                # %._crit_edge
	retq
.Lfunc_end3:
	.size	_Z12f3printBytesPhiP8_IO_FILE, .Lfunc_end3-_Z12f3printBytesPhiP8_IO_FILE
	.cfi_endproc
                                        # -- End function
	.globl	_Z13AES_ExpandKeyPh             # -- Begin function _Z13AES_ExpandKeyPh
	.type	_Z13AES_ExpandKeyPh,@function
_Z13AES_ExpandKeyPh:                    # @_Z13AES_ExpandKeyPh
	.cfi_startproc
# %bb.0:
	leaq	16(%rdi), %rax
	movl	$1, %ecx
	movl	$16, %esi
	movl	$255, %edx
.LBB4_1:                                # =>This Loop Header: Depth=1
                                        #     Child Loop BB4_4 Depth 2
	movl	-4(%rdi,%rsi), %r8d
	movl	%r8d, -4(%rsp)
	testb	$12, %sil
	jne	.LBB4_3
# %bb.2:                                #   in Loop: Header=BB4_1 Depth=1
	movl	%r8d, %r9d
	shrl	$24, %r9d
	movl	%r8d, %r10d
	shrl	$16, %r10d
	movl	%r8d, %r11d
	shrl	$8, %r11d
	andl	%edx, %r11d
	movb	AES_Sbox(%r11), %r11b
	xorb	%cl, %r11b
	andl	%edx, %r10d
	movb	AES_Sbox(%r10), %r10b
	movb	AES_Sbox(%r9), %r9b
	movzbl	%r8b, %r8d
	movb	AES_Sbox(%r8), %r8b
	movb	%r11b, -4(%rsp)
	movb	%r10b, -3(%rsp)
	movb	%r9b, -2(%rsp)
	movb	%r8b, -1(%rsp)
	addl	%ecx, %ecx
	movl	%ecx, %r8d
	xorl	$283, %r8d                      # imm = 0x11B
	cmpl	$256, %ecx                      # imm = 0x100
	cmovgel	%r8d, %ecx
.LBB4_3:                                #   in Loop: Header=BB4_1 Depth=1
	xorl	%r8d, %r8d
.LBB4_4:                                #   Parent Loop BB4_1 Depth=1
                                        # =>  This Inner Loop Header: Depth=2
	movb	-4(%rsp,%r8), %r9b
	xorb	-16(%rax,%r8), %r9b
	movb	%r9b, (%rax,%r8)
	incq	%r8
	cmpq	$4, %r8
	jne	.LBB4_4
# %bb.5:                                #   in Loop: Header=BB4_1 Depth=1
	leaq	4(%rsi), %r8
	addq	$4, %rax
	cmpq	$172, %rsi
	movq	%r8, %rsi
	jb	.LBB4_1
# %bb.6:
	retq
.Lfunc_end4:
	.size	_Z13AES_ExpandKeyPh, .Lfunc_end4-_Z13AES_ExpandKeyPh
	.cfi_endproc
                                        # -- End function
	.globl	_Z26__device_stub__AES_EncryptP9aes_blockPhiPmS2_S2_S2_ # -- Begin function _Z26__device_stub__AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.type	_Z26__device_stub__AES_EncryptP9aes_blockPhiPmS2_S2_S2_,@function
_Z26__device_stub__AES_EncryptP9aes_blockPhiPmS2_S2_S2_: # @_Z26__device_stub__AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.cfi_startproc
# %bb.0:
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%r13
	.cfi_def_cfa_offset 32
	pushq	%r12
	.cfi_def_cfa_offset 40
	pushq	%rbx
	.cfi_def_cfa_offset 48
	subq	$160, %rsp
	.cfi_def_cfa_offset 208
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	56(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	48(%rsp), %rdi
	movq	%rsi, (%rdi)
	leaq	4(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	40(%rsp), %rdx
	movq	%rcx, (%rdx)
	leaq	32(%rsp), %rcx
	movq	%r8, (%rcx)
	leaq	24(%rsp), %r8
	movq	%r9, (%r8)
	leaq	96(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rdi, 8(%rbx)
	movq	%rsi, 16(%rbx)
	movq	%rdx, 24(%rbx)
	movq	%rcx, 32(%rbx)
	movq	%r8, 40(%rbx)
	leaq	208(%rsp), %rax
	movq	%rax, 48(%rbx)
	leaq	80(%rsp), %r14
	leaq	64(%rsp), %r15
	leaq	16(%rsp), %r12
	leaq	8(%rsp), %r13
	movq	%r14, %rdi
	movq	%r15, %rsi
	movq	%r12, %rdx
	movq	%r13, %rcx
	callq	__hipPopCallConfiguration
	movq	(%r14), %rsi
	movl	8(%r14), %edx
	movq	(%r15), %rcx
	movl	8(%r15), %r8d
	movl	$_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$176, %rsp
	.cfi_adjust_cfa_offset -176
	popq	%rbx
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end5:
	.size	_Z26__device_stub__AES_EncryptP9aes_blockPhiPmS2_S2_S2_, .Lfunc_end5-_Z26__device_stub__AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.cfi_endproc
                                        # -- End function
	.section	.rodata.cst16,"aM",@progbits,16
	.p2align	4, 0x0                          # -- Begin function main
.LCPI6_0:
	.long	0                               # 0x0
	.long	4                               # 0x4
	.long	8                               # 0x8
	.long	12                              # 0xc
.LCPI6_1:
	.long	1                               # 0x1
	.long	5                               # 0x5
	.long	9                               # 0x9
	.long	13                              # 0xd
.LCPI6_2:
	.long	2                               # 0x2
	.long	6                               # 0x6
	.long	10                              # 0xa
	.long	14                              # 0xe
.LCPI6_3:
	.long	3                               # 0x3
	.long	7                               # 0x7
	.long	11                              # 0xb
	.long	15                              # 0xf
	.section	.rodata.cst4,"aM",@progbits,4
	.p2align	2, 0x0
.LCPI6_4:
	.long	0x447a0000                      # float 1000
.LCPI6_5:
	.long	0x34000000                      # float 1.1920929E-7
	.text
	.globl	main
	.type	main,@function
main:                                   # @main
.Lfunc_begin0:
	.cfi_startproc
	.cfi_personality 3, __gxx_personality_v0
	.cfi_lsda 3, .Lexception0
# %bb.0:
	pushq	%rbp
	.cfi_def_cfa_offset 16
	pushq	%r15
	.cfi_def_cfa_offset 24
	pushq	%r14
	.cfi_def_cfa_offset 32
	pushq	%r13
	.cfi_def_cfa_offset 40
	pushq	%r12
	.cfi_def_cfa_offset 48
	pushq	%rbx
	.cfi_def_cfa_offset 56
	subq	$2888, %rsp                     # imm = 0xB48
	.cfi_def_cfa_offset 2944
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movq	%rsi, %r15
	leaq	200(%rsp), %rbx
	movq	%rbx, %rdi
	callq	_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev
	movq	8(%r15), %rsi
.Ltmp0:
	movq	%rbx, %rdi
	movl	$4, %edx
	callq	_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode
.Ltmp1:
# %bb.1:
	movq	200(%rsp), %rax
	movq	-24(%rax), %rax
	testb	$5, 232(%rsp,%rax)
	jne	.LBB6_90
# %bb.2:
.Ltmp6:
	leaq	200(%rsp), %rdi
	xorl	%esi, %esi
	movl	$2, %edx
	callq	_ZNSi5seekgElSt12_Ios_Seekdir
.Ltmp7:
# %bb.3:
.Ltmp9:
	leaq	200(%rsp), %rdi
	callq	_ZNSi5tellgEv
.Ltmp10:
# %bb.4:
.Ltmp12:
	movq	%rax, %r13
	leaq	200(%rsp), %rdi
	xorl	%esi, %esi
	xorl	%edx, %edx
	callq	_ZNSi5seekgElSt12_Ios_Seekdir
.Ltmp13:
# %bb.5:
.Ltmp14:
	movl	$_ZSt4cout, %edi
	movl	$.L.str.5, %esi
	movl	$33, %edx
	callq	_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l
.Ltmp15:
# %bb.6:                                # %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit106
.Ltmp16:
	leal	-1(%r13), %r12d
	movl	$_ZSt4cout, %edi
	movl	%r12d, %esi
	callq	_ZNSolsEi
.Ltmp17:
# %bb.7:
	movq	%rax, %rbx
	movq	(%rax), %rax
	movq	-24(%rax), %rdi
	addq	%rbx, %rdi
.Ltmp18:
	movl	$10, %esi
	callq	_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc
.Ltmp19:
# %bb.8:                                # %.noexc
.Ltmp20:
	movsbl	%al, %esi
	movq	%rbx, %rdi
	callq	_ZNSo3putEc
.Ltmp21:
# %bb.9:                                # %.noexc121
.Ltmp22:
	movq	%rax, %rdi
	callq	_ZNSo5flushEv
.Ltmp23:
# %bb.10:                               # %_ZNSolsEPFRSoS_E.exit107
.Ltmp24:
	movq	%rax, %r14
	movl	$.L.str.6, %esi
	movl	$22, %edx
	movq	%rax, %rdi
	callq	_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l
.Ltmp25:
# %bb.11:                               # %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit108
	leal	15(%r12), %ebp
	testl	%r12d, %r12d
	cmovnsl	%r12d, %ebp
	movl	%ebp, %ebx
	sarl	$4, %ebx
.Ltmp26:
	movq	%r14, %rdi
	movl	%ebx, %esi
	callq	_ZNSolsEi
.Ltmp27:
# %bb.12:
	movq	%rax, %r14
	movq	(%rax), %rax
	movq	-24(%rax), %rdi
	addq	%r14, %rdi
.Ltmp28:
	movl	$10, %esi
	callq	_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc
.Ltmp29:
# %bb.13:                               # %.noexc123
.Ltmp30:
	movsbl	%al, %esi
	movq	%r14, %rdi
	callq	_ZNSo3putEc
.Ltmp31:
# %bb.14:                               # %.noexc124
.Ltmp32:
	movq	%rax, %rdi
	callq	_ZNSo5flushEv
.Ltmp33:
# %bb.15:                               # %_ZNSolsEPFRSoS_E.exit109
.Ltmp35:
	leaq	896(%rsp), %rdi
	callq	_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev
.Ltmp36:
# %bb.16:
	movq	16(%r15), %rsi
.Ltmp38:
	leaq	896(%rsp), %rdi
	movl	$8, %edx
	callq	_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode
.Ltmp39:
# %bb.17:                               # %.preheader147
	andl	$-16, %ebp
	subl	%ebp, %r12d
	xorl	%r14d, %r14d
	leaq	896(%rsp), %rbp
.LBB6_18:                               # =>This Inner Loop Header: Depth=1
.Ltmp40:
	movq	%rbp, %rdi
	callq	_ZNSi4peekEv
.Ltmp41:
# %bb.19:                               #   in Loop: Header=BB6_18 Depth=1
	cmpl	$-1, %eax
	je	.LBB6_23
# %bb.20:                               #   in Loop: Header=BB6_18 Depth=1
	leaq	(%rsp,%r14), %rsi
	addq	$720, %rsi                      # imm = 0x2D0
.Ltmp42:
	movq	%rbp, %rdi
	callq	_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_RS3_
.Ltmp43:
# %bb.21:                               # %_ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Rh.exit
                                        #   in Loop: Header=BB6_18 Depth=1
	movq	896(%rsp), %rax
	movq	-24(%rax), %rax
	testb	$2, 928(%rsp,%rax)
	jne	.LBB6_23
# %bb.22:                               #   in Loop: Header=BB6_18 Depth=1
	incq	%r14
	jmp	.LBB6_18
.LBB6_23:
.Ltmp45:
	movl	$_ZSt4cout, %edi
	movl	$.L.str.7, %esi
	movl	$28, %edx
	callq	_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l
.Ltmp46:
# %bb.24:                               # %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit110
.Ltmp47:
	movl	$_ZSt4cout, %edi
	movl	%r14d, %esi
	callq	_ZNSolsEi
.Ltmp48:
# %bb.25:
	movq	%rax, %rbp
	movq	(%rax), %rax
	movq	-24(%rax), %rdi
	addq	%rbp, %rdi
.Ltmp49:
	movl	$10, %esi
	callq	_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc
.Ltmp50:
# %bb.26:                               # %.noexc127
.Ltmp51:
	movsbl	%al, %esi
	movq	%rbp, %rdi
	callq	_ZNSo3putEc
.Ltmp52:
# %bb.27:                               # %.noexc128
.Ltmp53:
	movq	%rax, %rdi
	callq	_ZNSo5flushEv
.Ltmp54:
# %bb.28:                               # %_ZNSolsEPFRSoS_E.exit111
	cmpl	$32, %r14d
	ja	.LBB6_88
# %bb.29:                               # %_ZNSolsEPFRSoS_E.exit111
	movl	%r14d, %eax
	movabsq	$4311810048, %rcx               # imm = 0x101010000
	btq	%rax, %rcx
	jae	.LBB6_88
# %bb.30:                               # %.invoke
	leaq	720(%rsp), %rdi
	callq	_Z13AES_ExpandKeyPh
	xorl	%eax, %eax
	xorl	%ecx, %ecx
	testl	%r12d, %r12d
	sete	%al
	setne	%cl
	addl	%ebx, %ecx
	shll	$4, %eax
	orl	$-30, %eax
	movslq	%ecx, %rcx
	shlq	$4, %rcx
	cmpl	%r13d, %eax
	movq	$-1, %rdi
	cmovleq	%rcx, %rdi
.Ltmp55:
	callq	_Znam
.Ltmp56:
# %bb.31:
	movq	%rax, %r14
	movl	%ebx, 20(%rsp)                  # 4-byte Spill
	movq	24(%r15), %rdi
	movl	$.L.str.9, %esi
	callq	fopen
	movq	%rax, 120(%rsp)                 # 8-byte Spill
	movaps	.LCPI6_0(%rip), %xmm0           # xmm0 = [0,4,8,12]
	movaps	%xmm0, 128(%rsp)
	movaps	.LCPI6_1(%rip), %xmm0           # xmm0 = [1,5,9,13]
	movaps	%xmm0, 144(%rsp)
	movaps	.LCPI6_2(%rip), %xmm0           # xmm0 = [2,6,10,14]
	movaps	%xmm0, 160(%rsp)
	movaps	.LCPI6_3(%rip), %xmm0           # xmm0 = [3,7,11,15]
	movaps	%xmm0, 176(%rsp)
	cmpl	$17, %r13d
	jl	.LBB6_37
# %bb.32:                               # %.lr.ph.preheader
	movl	20(%rsp), %eax                  # 4-byte Reload
	cmpl	$2, %eax
	movl	$1, %ebx
	cmovgel	%eax, %ebx
	xorl	%r15d, %r15d
	leaq	200(%rsp), %r13
	leaq	96(%rsp), %rbp
.LBB6_33:                               # %.lr.ph
                                        # =>This Loop Header: Depth=1
                                        #     Child Loop BB6_35 Depth 2
.Ltmp58:
	movl	$16, %edx
	movq	%r13, %rdi
	movq	%rbp, %rsi
	callq	_ZNSi4readEPcl
.Ltmp59:
# %bb.34:                               # %.preheader146
                                        #   in Loop: Header=BB6_33 Depth=1
	movq	%r15, %rax
	shlq	$4, %rax
	addq	%r14, %rax
	xorl	%ecx, %ecx
.LBB6_35:                               #   Parent Loop BB6_33 Depth=1
                                        # =>  This Inner Loop Header: Depth=2
	movb	96(%rsp,%rcx), %dl
	movslq	128(%rsp,%rcx,4), %rsi
	movb	%dl, (%rax,%rsi)
	incq	%rcx
	cmpq	$16, %rcx
	jne	.LBB6_35
# %bb.36:                               #   in Loop: Header=BB6_33 Depth=1
	incq	%r15
	cmpq	%rbx, %r15
	jne	.LBB6_33
.LBB6_37:                               # %._crit_edge
	testl	%r12d, %r12d
	je	.LBB6_40
# %bb.38:
	movslq	%r12d, %rdx
.Ltmp61:
	leaq	200(%rsp), %rdi
	leaq	96(%rsp), %rsi
	callq	_ZNSi4readEPcl
.Ltmp62:
	movl	20(%rsp), %ebx                  # 4-byte Reload
# %bb.39:                               # %._crit_edge155
	movslq	%ebx, %rax
	movaps	96(%rsp), %xmm0
	shlq	$4, %rax
	movups	%xmm0, (%r14,%rax)
	movl	$16, %edx
	subl	%r12d, %edx
	orq	$15, %rax
	movl	$15, %ecx
	subl	%r12d, %ecx
	subq	%rcx, %rax
	movq	%r14, %rdi
	addq	%rax, %rdi
	xorl	%esi, %esi
	callq	memset@PLT
	incl	%ebx
	jmp	.LBB6_41
.LBB6_40:
	movl	20(%rsp), %ebx                  # 4-byte Reload
.LBB6_41:
.Ltmp63:
	xorl	%edi, %edi
	callq	hipSetDevice
.Ltmp64:
# %bb.42:
.Ltmp66:
	leaq	1416(%rsp), %rdi
	xorl	%esi, %esi
	callq	hipGetDevicePropertiesR0600
.Ltmp67:
# %bb.43:
	movl	1804(%rsp), %r13d
	movslq	%ebx, %r12
	shlq	$4, %r12
.Ltmp69:
	leaq	32(%rsp), %rdi
	movq	%r12, %rsi
	callq	hipMalloc
.Ltmp70:
# %bb.44:                               # %_ZL9hipMallocI9aes_blockE10hipError_tPPT_m.exit
.Ltmp71:
	leaq	80(%rsp), %rdi
	movl	$240, %esi
	callq	hipMalloc
.Ltmp72:
# %bb.45:                               # %_ZL9hipMallocIhE10hipError_tPPT_m.exit
	movq	32(%rsp), %rdi
.Ltmp73:
	movq	%r14, %rsi
	movq	%r12, %rdx
	movl	$1, %ecx
	callq	hipMemcpy
.Ltmp74:
# %bb.46:
	movq	80(%rsp), %rdi
.Ltmp75:
	leaq	720(%rsp), %rsi
	movl	$240, %edx
	movl	$1, %ecx
	callq	hipMemcpy
.Ltmp76:
# %bb.47:
.Ltmp78:
	leaq	72(%rsp), %rdi
	movl	$2048, %esi                     # imm = 0x800
	callq	hipMalloc
.Ltmp79:
# %bb.48:                               # %_ZL9hipMallocImE10hipError_tPPT_m.exit
.Ltmp80:
	leaq	64(%rsp), %rdi
	movl	$2048, %esi                     # imm = 0x800
	callq	hipMalloc
.Ltmp81:
# %bb.49:                               # %_ZL9hipMallocImE10hipError_tPPT_m.exit112
.Ltmp82:
	leaq	56(%rsp), %rdi
	movl	$2048, %esi                     # imm = 0x800
	callq	hipMalloc
.Ltmp83:
# %bb.50:                               # %_ZL9hipMallocImE10hipError_tPPT_m.exit113
.Ltmp84:
	leaq	48(%rsp), %rdi
	movl	$2048, %esi                     # imm = 0x800
	callq	hipMalloc
.Ltmp85:
# %bb.51:                               # %_ZL9hipMallocImE10hipError_tPPT_m.exit114
	movq	72(%rsp), %rdi
.Ltmp86:
	movl	$Te0, %esi
	movl	$2048, %edx                     # imm = 0x800
	movl	$1, %ecx
	callq	hipMemcpy
.Ltmp87:
# %bb.52:
	movq	64(%rsp), %rdi
.Ltmp88:
	movl	$Te1, %esi
	movl	$2048, %edx                     # imm = 0x800
	movl	$1, %ecx
	callq	hipMemcpy
.Ltmp89:
# %bb.53:
	movq	56(%rsp), %rdi
.Ltmp90:
	movl	$Te2, %esi
	movl	$2048, %edx                     # imm = 0x800
	movl	$1, %ecx
	callq	hipMemcpy
.Ltmp91:
# %bb.54:
	movq	48(%rsp), %rdi
.Ltmp92:
	movl	$Te3, %esi
	movl	$2048, %edx                     # imm = 0x800
	movl	$1, %ecx
	callq	hipMemcpy
.Ltmp93:
# %bb.55:
	movl	$.L.str.10, %edi
	movl	%ebx, %esi
	xorl	%eax, %eax
	callq	printf
.Ltmp95:
	leaq	40(%rsp), %rdi
	callq	hipEventCreate
.Ltmp96:
# %bb.56:
.Ltmp98:
	leaq	24(%rsp), %rdi
	callq	hipEventCreate
.Ltmp99:
# %bb.57:
	movq	40(%rsp), %rdi
.Ltmp100:
	xorl	%esi, %esi
	callq	hipEventRecord
.Ltmp101:
# %bb.58:
.Ltmp102:
	btsq	$32, %r13
	movabsq	$4294968320, %rdx               # imm = 0x100000400
	movq	%r13, %rdi
	movl	$1, %esi
	movl	$1, %ecx
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
.Ltmp103:
# %bb.59:
	testl	%eax, %eax
	jne	.LBB6_61
# %bb.60:
	movq	32(%rsp), %rdi
	movq	80(%rsp), %rsi
	movq	72(%rsp), %rcx
	movq	64(%rsp), %r8
	movq	56(%rsp), %r9
	movq	48(%rsp), %rax
.Ltmp104:
	movq	%rax, (%rsp)
	movl	%ebx, %edx
	callq	_Z26__device_stub__AES_EncryptP9aes_blockPhiPmS2_S2_S2_
.Ltmp105:
.LBB6_61:
	movq	24(%rsp), %rdi
.Ltmp106:
	xorl	%esi, %esi
	callq	hipEventRecord
.Ltmp107:
# %bb.62:
	movq	24(%rsp), %rdi
.Ltmp108:
	callq	hipEventSynchronize
.Ltmp109:
# %bb.63:
	leaq	92(%rsp), %rdi
	movl	$0, (%rdi)
	movq	40(%rsp), %rsi
	movq	24(%rsp), %rdx
.Ltmp111:
	callq	hipEventElapsedTime
.Ltmp112:
# %bb.64:
	movq	40(%rsp), %rdi
.Ltmp113:
	callq	hipEventDestroy
.Ltmp114:
# %bb.65:
	movq	24(%rsp), %rdi
.Ltmp115:
	callq	hipEventDestroy
.Ltmp116:
# %bb.66:
	movss	92(%rsp), %xmm0                 # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 20(%rsp)                 # 4-byte Spill
.Ltmp117:
	movl	$_ZSt4cout, %edi
	movl	$.L.str.11, %esi
	movl	$15, %edx
	callq	_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l
.Ltmp118:
# %bb.67:                               # %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit115
	movss	20(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	divss	.LCPI6_4(%rip), %xmm0
	movss	%xmm0, 20(%rsp)                 # 4-byte Spill
	cvtss2sd	%xmm0, %xmm0
.Ltmp119:
	movl	$_ZSt4cout, %edi
	callq	_ZNSo9_M_insertIdEERSoT_
.Ltmp120:
# %bb.68:                               # %_ZNSolsEf.exit
	movq	%rax, %r13
	movq	(%rax), %rax
	movq	-24(%rax), %rdi
	addq	%r13, %rdi
.Ltmp121:
	movl	$10, %esi
	callq	_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc
.Ltmp122:
# %bb.69:                               # %.noexc131
.Ltmp123:
	movsbl	%al, %esi
	movq	%r13, %rdi
	callq	_ZNSo3putEc
.Ltmp124:
# %bb.70:                               # %.noexc132
.Ltmp125:
	movq	%rax, %rdi
	callq	_ZNSo5flushEv
.Ltmp126:
# %bb.71:                               # %_ZNSolsEPFRSoS_E.exit116
.Ltmp128:
	movl	$_ZSt4cout, %edi
	movl	$.L.str.12, %esi
	movl	$15, %edx
	callq	_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l
.Ltmp129:
# %bb.72:                               # %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit117
	xorps	%xmm0, %xmm0
	cvtsi2ss	%ebx, %xmm0
	divss	20(%rsp), %xmm0                 # 4-byte Folded Reload
	mulss	.LCPI6_5(%rip), %xmm0
	cvtss2sd	%xmm0, %xmm0
.Ltmp130:
	movl	$_ZSt4cout, %edi
	callq	_ZNSo9_M_insertIdEERSoT_
.Ltmp131:
# %bb.73:                               # %_ZNSolsEf.exit118
.Ltmp132:
	movq	%rax, %r13
	movl	$.L.str.13, %esi
	movl	$5, %edx
	movq	%rax, %rdi
	callq	_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l
.Ltmp133:
# %bb.74:                               # %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit119
	movq	(%r13), %rax
	movq	-24(%rax), %rdi
	addq	%r13, %rdi
.Ltmp134:
	movl	$10, %esi
	callq	_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc
.Ltmp135:
# %bb.75:                               # %.noexc135
.Ltmp136:
	movsbl	%al, %esi
	movq	%r13, %rdi
	callq	_ZNSo3putEc
.Ltmp137:
# %bb.76:                               # %.noexc136
.Ltmp138:
	movq	%rax, %rdi
	callq	_ZNSo5flushEv
.Ltmp139:
# %bb.77:                               # %_ZNSolsEPFRSoS_E.exit120
	movq	32(%rsp), %rsi
.Ltmp140:
	movq	%r14, %rdi
	movq	%r12, %rdx
	movl	$2, %ecx
	callq	hipMemcpy
.Ltmp141:
# %bb.78:
.Ltmp142:
	callq	hipProfilerStop
.Ltmp143:
# %bb.79:
	movq	32(%rsp), %rdi
.Ltmp144:
	callq	hipFree
.Ltmp145:
# %bb.80:
	movq	80(%rsp), %rdi
.Ltmp146:
	callq	hipFree
.Ltmp147:
# %bb.81:
	movq	72(%rsp), %rdi
.Ltmp148:
	callq	hipFree
.Ltmp149:
# %bb.82:
	movq	64(%rsp), %rdi
.Ltmp150:
	callq	hipFree
.Ltmp151:
# %bb.83:
	movq	56(%rsp), %rdi
.Ltmp152:
	callq	hipFree
.Ltmp153:
# %bb.84:
	movq	48(%rsp), %rdi
.Ltmp154:
	callq	hipFree
.Ltmp155:
# %bb.85:                               # %.preheader
	testl	%ebx, %ebx
	movq	120(%rsp), %r15                 # 8-byte Reload
	jle	.LBB6_89
# %bb.86:                               # %.lr.ph157.preheader
	movl	%ebx, %ebx
.LBB6_87:                               # %.lr.ph157
                                        # =>This Inner Loop Header: Depth=1
	movq	%r14, %rdi
	movl	$16, %esi
	movq	%r15, %rdx
	callq	_Z12f1printBytesPhiP8_IO_FILE
	addq	$16, %r14
	decq	%rbx
	jne	.LBB6_87
	jmp	.LBB6_89
.LBB6_88:
	movl	$.Lstr, %edi
	callq	puts@PLT
.LBB6_89:
	leaq	896(%rsp), %rdi
	callq	_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev
	leaq	200(%rsp), %rdi
	callq	_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev
	xorl	%eax, %eax
	addq	$2888, %rsp                     # imm = 0xB48
	.cfi_def_cfa_offset 56
	popq	%rbx
	.cfi_def_cfa_offset 48
	popq	%r12
	.cfi_def_cfa_offset 40
	popq	%r13
	.cfi_def_cfa_offset 32
	popq	%r14
	.cfi_def_cfa_offset 24
	popq	%r15
	.cfi_def_cfa_offset 16
	popq	%rbp
	.cfi_def_cfa_offset 8
	retq
.LBB6_90:
	.cfi_def_cfa_offset 2944
.Ltmp2:
	movl	$_ZSt4cerr, %edi
	movl	$.L.str.4, %esi
	movl	$33, %edx
	callq	_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l
.Ltmp3:
# %bb.91:                               # %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit
.Ltmp4:
	movl	$_ZSt4cerr, %edi
	callq	_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
.Ltmp5:
# %bb.92:                               # %_ZNSolsEPFRSoS_E.exit
	movl	$1, %edi
	callq	exit
.LBB6_93:
.Ltmp97:
	jmp	.LBB6_109
.LBB6_94:
.Ltmp68:
	jmp	.LBB6_109
.LBB6_95:
.Ltmp37:
	jmp	.LBB6_99
.LBB6_96:
.Ltmp11:
	jmp	.LBB6_99
.LBB6_97:
.Ltmp65:
	jmp	.LBB6_109
.LBB6_98:
.Ltmp8:
	jmp	.LBB6_99
.LBB6_100:
.Ltmp77:
	jmp	.LBB6_109
.LBB6_101:
.Ltmp110:
	jmp	.LBB6_109
.LBB6_102:
.Ltmp127:
	jmp	.LBB6_109
.LBB6_103:
.Ltmp94:
	jmp	.LBB6_109
.LBB6_104:                              # %.loopexit.split-lp
.Ltmp57:
	jmp	.LBB6_109
.LBB6_105:
.Ltmp156:
	jmp	.LBB6_109
.LBB6_106:
.Ltmp34:
.LBB6_99:
	movq	%rax, %rbx
	jmp	.LBB6_110
.LBB6_107:
.Ltmp60:
	jmp	.LBB6_109
.LBB6_108:                              # %.loopexit
.Ltmp44:
.LBB6_109:
	movq	%rax, %rbx
	leaq	896(%rsp), %rdi
	callq	_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev
.LBB6_110:
	leaq	200(%rsp), %rdi
	callq	_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev
	movq	%rbx, %rdi
	callq	_Unwind_Resume@PLT
.Lfunc_end6:
	.size	main, .Lfunc_end6-main
	.cfi_endproc
	.section	.gcc_except_table,"a",@progbits
	.p2align	2, 0x0
GCC_except_table6:
.Lexception0:
	.byte	255                             # @LPStart Encoding = omit
	.byte	255                             # @TType Encoding = omit
	.byte	1                               # Call site Encoding = uleb128
	.uleb128 .Lcst_end0-.Lcst_begin0
.Lcst_begin0:
	.uleb128 .Lfunc_begin0-.Lfunc_begin0    # >> Call Site 1 <<
	.uleb128 .Ltmp0-.Lfunc_begin0           #   Call between .Lfunc_begin0 and .Ltmp0
	.byte	0                               #     has no landing pad
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp0-.Lfunc_begin0           # >> Call Site 2 <<
	.uleb128 .Ltmp7-.Ltmp0                  #   Call between .Ltmp0 and .Ltmp7
	.uleb128 .Ltmp8-.Lfunc_begin0           #     jumps to .Ltmp8
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp9-.Lfunc_begin0           # >> Call Site 3 <<
	.uleb128 .Ltmp10-.Ltmp9                 #   Call between .Ltmp9 and .Ltmp10
	.uleb128 .Ltmp11-.Lfunc_begin0          #     jumps to .Ltmp11
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp12-.Lfunc_begin0          # >> Call Site 4 <<
	.uleb128 .Ltmp33-.Ltmp12                #   Call between .Ltmp12 and .Ltmp33
	.uleb128 .Ltmp34-.Lfunc_begin0          #     jumps to .Ltmp34
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp35-.Lfunc_begin0          # >> Call Site 5 <<
	.uleb128 .Ltmp36-.Ltmp35                #   Call between .Ltmp35 and .Ltmp36
	.uleb128 .Ltmp37-.Lfunc_begin0          #     jumps to .Ltmp37
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp38-.Lfunc_begin0          # >> Call Site 6 <<
	.uleb128 .Ltmp39-.Ltmp38                #   Call between .Ltmp38 and .Ltmp39
	.uleb128 .Ltmp57-.Lfunc_begin0          #     jumps to .Ltmp57
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp40-.Lfunc_begin0          # >> Call Site 7 <<
	.uleb128 .Ltmp43-.Ltmp40                #   Call between .Ltmp40 and .Ltmp43
	.uleb128 .Ltmp44-.Lfunc_begin0          #     jumps to .Ltmp44
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp45-.Lfunc_begin0          # >> Call Site 8 <<
	.uleb128 .Ltmp56-.Ltmp45                #   Call between .Ltmp45 and .Ltmp56
	.uleb128 .Ltmp57-.Lfunc_begin0          #     jumps to .Ltmp57
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp58-.Lfunc_begin0          # >> Call Site 9 <<
	.uleb128 .Ltmp59-.Ltmp58                #   Call between .Ltmp58 and .Ltmp59
	.uleb128 .Ltmp60-.Lfunc_begin0          #     jumps to .Ltmp60
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp61-.Lfunc_begin0          # >> Call Site 10 <<
	.uleb128 .Ltmp62-.Ltmp61                #   Call between .Ltmp61 and .Ltmp62
	.uleb128 .Ltmp65-.Lfunc_begin0          #     jumps to .Ltmp65
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp62-.Lfunc_begin0          # >> Call Site 11 <<
	.uleb128 .Ltmp63-.Ltmp62                #   Call between .Ltmp62 and .Ltmp63
	.byte	0                               #     has no landing pad
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp63-.Lfunc_begin0          # >> Call Site 12 <<
	.uleb128 .Ltmp64-.Ltmp63                #   Call between .Ltmp63 and .Ltmp64
	.uleb128 .Ltmp65-.Lfunc_begin0          #     jumps to .Ltmp65
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp66-.Lfunc_begin0          # >> Call Site 13 <<
	.uleb128 .Ltmp67-.Ltmp66                #   Call between .Ltmp66 and .Ltmp67
	.uleb128 .Ltmp68-.Lfunc_begin0          #     jumps to .Ltmp68
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp69-.Lfunc_begin0          # >> Call Site 14 <<
	.uleb128 .Ltmp76-.Ltmp69                #   Call between .Ltmp69 and .Ltmp76
	.uleb128 .Ltmp77-.Lfunc_begin0          #     jumps to .Ltmp77
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp78-.Lfunc_begin0          # >> Call Site 15 <<
	.uleb128 .Ltmp93-.Ltmp78                #   Call between .Ltmp78 and .Ltmp93
	.uleb128 .Ltmp94-.Lfunc_begin0          #     jumps to .Ltmp94
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp95-.Lfunc_begin0          # >> Call Site 16 <<
	.uleb128 .Ltmp96-.Ltmp95                #   Call between .Ltmp95 and .Ltmp96
	.uleb128 .Ltmp97-.Lfunc_begin0          #     jumps to .Ltmp97
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp98-.Lfunc_begin0          # >> Call Site 17 <<
	.uleb128 .Ltmp109-.Ltmp98               #   Call between .Ltmp98 and .Ltmp109
	.uleb128 .Ltmp110-.Lfunc_begin0         #     jumps to .Ltmp110
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp111-.Lfunc_begin0         # >> Call Site 18 <<
	.uleb128 .Ltmp126-.Ltmp111              #   Call between .Ltmp111 and .Ltmp126
	.uleb128 .Ltmp127-.Lfunc_begin0         #     jumps to .Ltmp127
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp128-.Lfunc_begin0         # >> Call Site 19 <<
	.uleb128 .Ltmp155-.Ltmp128              #   Call between .Ltmp128 and .Ltmp155
	.uleb128 .Ltmp156-.Lfunc_begin0         #     jumps to .Ltmp156
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp2-.Lfunc_begin0           # >> Call Site 20 <<
	.uleb128 .Ltmp5-.Ltmp2                  #   Call between .Ltmp2 and .Ltmp5
	.uleb128 .Ltmp8-.Lfunc_begin0           #     jumps to .Ltmp8
	.byte	0                               #   On action: cleanup
	.uleb128 .Ltmp5-.Lfunc_begin0           # >> Call Site 21 <<
	.uleb128 .Lfunc_end6-.Ltmp5             #   Call between .Ltmp5 and .Lfunc_end6
	.byte	0                               #     has no landing pad
	.byte	0                               #   On action: cleanup
.Lcst_end0:
	.p2align	2, 0x0
                                        # -- End function
	.text
	.p2align	4, 0x90                         # -- Begin function __hip_module_ctor
	.type	__hip_module_ctor,@function
__hip_module_ctor:                      # @__hip_module_ctor
	.cfi_startproc
# %bb.0:
	subq	$40, %rsp
	.cfi_def_cfa_offset 48
	movq	__hip_gpubin_handle(%rip), %rdi
	testq	%rdi, %rdi
	jne	.LBB7_2
# %bb.1:
	movl	$__hip_fatbin_wrapper, %edi
	callq	__hipRegisterFatBinary
	movq	%rax, %rdi
	movq	%rax, __hip_gpubin_handle(%rip)
.LBB7_2:
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_, %esi
	movl	$.L__unnamed_1, %edx
	movl	$.L__unnamed_1, %ecx
	movl	$-1, %r8d
	xorl	%r9d, %r9d
	callq	__hipRegisterFunction
	movl	$__hip_module_dtor, %edi
	addq	$40, %rsp
	.cfi_def_cfa_offset 8
	jmp	atexit                          # TAILCALL
.Lfunc_end7:
	.size	__hip_module_ctor, .Lfunc_end7-__hip_module_ctor
	.cfi_endproc
                                        # -- End function
	.p2align	4, 0x90                         # -- Begin function __hip_module_dtor
	.type	__hip_module_dtor,@function
__hip_module_dtor:                      # @__hip_module_dtor
	.cfi_startproc
# %bb.0:
	movq	__hip_gpubin_handle(%rip), %rdi
	testq	%rdi, %rdi
	je	.LBB8_2
# %bb.1:
	pushq	%rax
	.cfi_def_cfa_offset 16
	callq	__hipUnregisterFatBinary
	movq	$0, __hip_gpubin_handle(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
.LBB8_2:
	retq
.Lfunc_end8:
	.size	__hip_module_dtor, .Lfunc_end8-__hip_module_dtor
	.cfi_endproc
                                        # -- End function
	.type	AES_Sbox,@object                # @AES_Sbox
	.data
	.globl	AES_Sbox
	.p2align	4, 0x0
AES_Sbox:
	.ascii	"c|w{\362ko\3050\001g+\376\327\253v\312\202\311}\372YG\360\255\324\242\257\234\244r\300\267\375\223&6?\367\3144\245\345\361q\3301\025\004\307#\303\030\226\005\232\007\022\200\342\353'\262u\t\203,\032\033nZ\240R;\326\263)\343/\204S\321\000\355 \374\261[j\313\2769JLX\317\320\357\252\373CM3\205E\371\002\177P<\237\250Q\243@\217\222\2358\365\274\266\332!\020\377\363\322\315\f\023\354_\227D\027\304\247~=d]\031s`\201O\334\"*\220\210F\356\270\024\336^\013\333\3402:\nI\006$\\\302\323\254b\221\225\344y\347\3107m\215\325N\251lV\364\352ez\256\b\272x%.\034\246\264\306\350\335t\037K\275\213\212p>\265fH\003\366\016a5W\271\206\301\035\236\341\370\230\021i\331\216\224\233\036\207\351\316U(\337\214\241\211\r\277\346BhA\231-\017\260T\273\026"
	.size	AES_Sbox, 256

	.type	.L.str,@object                  # @.str
	.section	.rodata.str1.1,"aMS",@progbits,1
.L.str:
	.asciz	"%x "
	.size	.L.str, 4

	.type	.L.str.2,@object                # @.str.2
.L.str.2:
	.asciz	"%02x "
	.size	.L.str.2, 6

	.type	flag,@object                    # @flag
	.bss
	.globl	flag
	.p2align	2, 0x0
flag:
	.long	0                               # 0x0
	.size	flag, 4

	.type	Te0,@object                     # @Te0
	.data
	.globl	Te0
	.p2align	4, 0x0
Te0:
	.quad	3328402341                      # 0xc66363a5
	.quad	4168907908                      # 0xf87c7c84
	.quad	4000806809                      # 0xee777799
	.quad	4135287693                      # 0xf67b7b8d
	.quad	4294111757                      # 0xfff2f20d
	.quad	3597364157                      # 0xd66b6bbd
	.quad	3731845041                      # 0xde6f6fb1
	.quad	2445657428                      # 0x91c5c554
	.quad	1613770832                      # 0x60303050
	.quad	33620227                        # 0x2010103
	.quad	3462883241                      # 0xce6767a9
	.quad	1445669757                      # 0x562b2b7d
	.quad	3892248089                      # 0xe7fefe19
	.quad	3050821474                      # 0xb5d7d762
	.quad	1303096294                      # 0x4dababe6
	.quad	3967186586                      # 0xec76769a
	.quad	2412431941                      # 0x8fcaca45
	.quad	528646813                       # 0x1f82829d
	.quad	2311702848                      # 0x89c9c940
	.quad	4202528135                      # 0xfa7d7d87
	.quad	4026202645                      # 0xeffafa15
	.quad	2992200171                      # 0xb25959eb
	.quad	2387036105                      # 0x8e4747c9
	.quad	4226871307                      # 0xfbf0f00b
	.quad	1101901292                      # 0x41adadec
	.quad	3017069671                      # 0xb3d4d467
	.quad	1604494077                      # 0x5fa2a2fd
	.quad	1169141738                      # 0x45afafea
	.quad	597466303                       # 0x239c9cbf
	.quad	1403299063                      # 0x53a4a4f7
	.quad	3832705686                      # 0xe4727296
	.quad	2613100635                      # 0x9bc0c05b
	.quad	1974974402                      # 0x75b7b7c2
	.quad	3791519004                      # 0xe1fdfd1c
	.quad	1033081774                      # 0x3d9393ae
	.quad	1277568618                      # 0x4c26266a
	.quad	1815492186                      # 0x6c36365a
	.quad	2118074177                      # 0x7e3f3f41
	.quad	4126668546                      # 0xf5f7f702
	.quad	2211236943                      # 0x83cccc4f
	.quad	1748251740                      # 0x6834345c
	.quad	1369810420                      # 0x51a5a5f4
	.quad	3521504564                      # 0xd1e5e534
	.quad	4193382664                      # 0xf9f1f108
	.quad	3799085459                      # 0xe2717193
	.quad	2883115123                      # 0xabd8d873
	.quad	1647391059                      # 0x62313153
	.quad	706024767                       # 0x2a15153f
	.quad	134480908                       # 0x804040c
	.quad	2512897874                      # 0x95c7c752
	.quad	1176707941                      # 0x46232365
	.quad	2646852446                      # 0x9dc3c35e
	.quad	806885416                       # 0x30181828
	.quad	932615841                       # 0x379696a1
	.quad	168101135                       # 0xa05050f
	.quad	798661301                       # 0x2f9a9ab5
	.quad	235341577                       # 0xe070709
	.quad	605164086                       # 0x24121236
	.quad	461406363                       # 0x1b80809b
	.quad	3756188221                      # 0xdfe2e23d
	.quad	3454790438                      # 0xcdebeb26
	.quad	1311188841                      # 0x4e272769
	.quad	2142417613                      # 0x7fb2b2cd
	.quad	3933566367                      # 0xea75759f
	.quad	302582043                       # 0x1209091b
	.quad	495158174                       # 0x1d83839e
	.quad	1479289972                      # 0x582c2c74
	.quad	874125870                       # 0x341a1a2e
	.quad	907746093                       # 0x361b1b2d
	.quad	3698224818                      # 0xdc6e6eb2
	.quad	3025820398                      # 0xb45a5aee
	.quad	1537253627                      # 0x5ba0a0fb
	.quad	2756858614                      # 0xa45252f6
	.quad	1983593293                      # 0x763b3b4d
	.quad	3084310113                      # 0xb7d6d661
	.quad	2108928974                      # 0x7db3b3ce
	.quad	1378429307                      # 0x5229297b
	.quad	3722699582                      # 0xdde3e33e
	.quad	1580150641                      # 0x5e2f2f71
	.quad	327451799                       # 0x13848497
	.quad	2790478837                      # 0xa65353f5
	.quad	3117535592                      # 0xb9d1d168
	.quad	0                               # 0x0
	.quad	3253595436                      # 0xc1eded2c
	.quad	1075847264                      # 0x40202060
	.quad	3825007647                      # 0xe3fcfc1f
	.quad	2041688520                      # 0x79b1b1c8
	.quad	3059440621                      # 0xb65b5bed
	.quad	3563743934                      # 0xd46a6abe
	.quad	2378943302                      # 0x8dcbcb46
	.quad	1740553945                      # 0x67bebed9
	.quad	1916352843                      # 0x7239394b
	.quad	2487896798                      # 0x944a4ade
	.quad	2555137236                      # 0x984c4cd4
	.quad	2958579944                      # 0xb05858e8
	.quad	2244988746                      # 0x85cfcf4a
	.quad	3151024235                      # 0xbbd0d06b
	.quad	3320835882                      # 0xc5efef2a
	.quad	1336584933                      # 0x4faaaae5
	.quad	3992714006                      # 0xedfbfb16
	.quad	2252555205                      # 0x864343c5
	.quad	2588757463                      # 0x9a4d4dd7
	.quad	1714631509                      # 0x66333355
	.quad	293963156                       # 0x11858594
	.quad	2319795663                      # 0x8a4545cf
	.quad	3925473552                      # 0xe9f9f910
	.quad	67240454                        # 0x4020206
	.quad	4269768577                      # 0xfe7f7f81
	.quad	2689618160                      # 0xa05050f0
	.quad	2017213508                      # 0x783c3c44
	.quad	631218106                       # 0x259f9fba
	.quad	1269344483                      # 0x4ba8a8e3
	.quad	2723238387                      # 0xa25151f3
	.quad	1571005438                      # 0x5da3a3fe
	.quad	2151694528                      # 0x804040c0
	.quad	93294474                        # 0x58f8f8a
	.quad	1066570413                      # 0x3f9292ad
	.quad	563977660                       # 0x219d9dbc
	.quad	1882732616                      # 0x70383848
	.quad	4059428100                      # 0xf1f5f504
	.quad	1673313503                      # 0x63bcbcdf
	.quad	2008463041                      # 0x77b6b6c1
	.quad	2950355573                      # 0xafdada75
	.quad	1109467491                      # 0x42212163
	.quad	537923632                       # 0x20101030
	.quad	3858759450                      # 0xe5ffff1a
	.quad	4260623118                      # 0xfdf3f30e
	.quad	3218264685                      # 0xbfd2d26d
	.quad	2177748300                      # 0x81cdcd4c
	.quad	403442708                       # 0x180c0c14
	.quad	638784309                       # 0x26131335
	.quad	3287084079                      # 0xc3ecec2f
	.quad	3193921505                      # 0xbe5f5fe1
	.quad	899127202                       # 0x359797a2
	.quad	2286175436                      # 0x884444cc
	.quad	773265209                       # 0x2e171739
	.quad	2479146071                      # 0x93c4c457
	.quad	1437050866                      # 0x55a7a7f2
	.quad	4236148354                      # 0xfc7e7e82
	.quad	2050833735                      # 0x7a3d3d47
	.quad	3362022572                      # 0xc86464ac
	.quad	3126681063                      # 0xba5d5de7
	.quad	840505643                       # 0x3219192b
	.quad	3866325909                      # 0xe6737395
	.quad	3227541664                      # 0xc06060a0
	.quad	427917720                       # 0x19818198
	.quad	2655997905                      # 0x9e4f4fd1
	.quad	2749160575                      # 0xa3dcdc7f
	.quad	1143087718                      # 0x44222266
	.quad	1412049534                      # 0x542a2a7e
	.quad	999329963                       # 0x3b9090ab
	.quad	193497219                       # 0xb888883
	.quad	2353415882                      # 0x8c4646ca
	.quad	3354324521                      # 0xc7eeee29
	.quad	1807268051                      # 0x6bb8b8d3
	.quad	672404540                       # 0x2814143c
	.quad	2816401017                      # 0xa7dede79
	.quad	3160301282                      # 0xbc5e5ee2
	.quad	369822493                       # 0x160b0b1d
	.quad	2916866934                      # 0xaddbdb76
	.quad	3688947771                      # 0xdbe0e03b
	.quad	1681011286                      # 0x64323256
	.quad	1949973070                      # 0x743a3a4e
	.quad	336202270                       # 0x140a0a1e
	.quad	2454276571                      # 0x924949db
	.quad	201721354                       # 0xc06060a
	.quad	1210328172                      # 0x4824246c
	.quad	3093060836                      # 0xb85c5ce4
	.quad	2680341085                      # 0x9fc2c25d
	.quad	3184776046                      # 0xbdd3d36e
	.quad	1135389935                      # 0x43acacef
	.quad	3294782118                      # 0xc46262a6
	.quad	965841320                       # 0x399191a8
	.quad	831886756                       # 0x319595a4
	.quad	3554993207                      # 0xd3e4e437
	.quad	4068047243                      # 0xf279798b
	.quad	3588745010                      # 0xd5e7e732
	.quad	2345191491                      # 0x8bc8c843
	.quad	1849112409                      # 0x6e373759
	.quad	3664604599                      # 0xda6d6db7
	.quad	26054028                        # 0x18d8d8c
	.quad	2983581028                      # 0xb1d5d564
	.quad	2622377682                      # 0x9c4e4ed2
	.quad	1235855840                      # 0x49a9a9e0
	.quad	3630984372                      # 0xd86c6cb4
	.quad	2891339514                      # 0xac5656fa
	.quad	4092916743                      # 0xf3f4f407
	.quad	3488279077                      # 0xcfeaea25
	.quad	3395642799                      # 0xca6565af
	.quad	4101667470                      # 0xf47a7a8e
	.quad	1202630377                      # 0x47aeaee9
	.quad	268961816                       # 0x10080818
	.quad	1874508501                      # 0x6fbabad5
	.quad	4034427016                      # 0xf0787888
	.quad	1243948399                      # 0x4a25256f
	.quad	1546530418                      # 0x5c2e2e72
	.quad	941366308                       # 0x381c1c24
	.quad	1470539505                      # 0x57a6a6f1
	.quad	1941222599                      # 0x73b4b4c7
	.quad	2546386513                      # 0x97c6c651
	.quad	3421038627                      # 0xcbe8e823
	.quad	2715671932                      # 0xa1dddd7c
	.quad	3899946140                      # 0xe874749c
	.quad	1042226977                      # 0x3e1f1f21
	.quad	2521517021                      # 0x964b4bdd
	.quad	1639824860                      # 0x61bdbddc
	.quad	227249030                       # 0xd8b8b86
	.quad	260737669                       # 0xf8a8a85
	.quad	3765465232                      # 0xe0707090
	.quad	2084453954                      # 0x7c3e3e42
	.quad	1907733956                      # 0x71b5b5c4
	.quad	3429263018                      # 0xcc6666aa
	.quad	2420656344                      # 0x904848d8
	.quad	100860677                       # 0x6030305
	.quad	4160157185                      # 0xf7f6f601
	.quad	470683154                       # 0x1c0e0e12
	.quad	3261161891                      # 0xc26161a3
	.quad	1781871967                      # 0x6a35355f
	.quad	2924959737                      # 0xae5757f9
	.quad	1773779408                      # 0x69b9b9d0
	.quad	394692241                       # 0x17868691
	.quad	2579611992                      # 0x99c1c158
	.quad	974986535                       # 0x3a1d1d27
	.quad	664706745                       # 0x279e9eb9
	.quad	3655459128                      # 0xd9e1e138
	.quad	3958962195                      # 0xebf8f813
	.quad	731420851                       # 0x2b9898b3
	.quad	571543859                       # 0x22111133
	.quad	3530123707                      # 0xd26969bb
	.quad	2849626480                      # 0xa9d9d970
	.quad	126783113                       # 0x78e8e89
	.quad	865375399                       # 0x339494a7
	.quad	765172662                       # 0x2d9b9bb6
	.quad	1008606754                      # 0x3c1e1e22
	.quad	361203602                       # 0x15878792
	.quad	3387549984                      # 0xc9e9e920
	.quad	2278477385                      # 0x87cece49
	.quad	2857719295                      # 0xaa5555ff
	.quad	1344809080                      # 0x50282878
	.quad	2782912378                      # 0xa5dfdf7a
	.quad	59542671                        # 0x38c8c8f
	.quad	1503764984                      # 0x59a1a1f8
	.quad	160008576                       # 0x9898980
	.quad	437062935                       # 0x1a0d0d17
	.quad	1707065306                      # 0x65bfbfda
	.quad	3622233649                      # 0xd7e6e631
	.quad	2218934982                      # 0x844242c6
	.quad	3496503480                      # 0xd06868b8
	.quad	2185314755                      # 0x824141c3
	.quad	697932208                       # 0x299999b0
	.quad	1512910199                      # 0x5a2d2d77
	.quad	504303377                       # 0x1e0f0f11
	.quad	2075177163                      # 0x7bb0b0cb
	.quad	2824099068                      # 0xa85454fc
	.quad	1841019862                      # 0x6dbbbbd6
	.quad	739644986                       # 0x2c16163a
	.size	Te0, 2048

	.type	Te1,@object                     # @Te1
	.globl	Te1
	.p2align	4, 0x0
Te1:
	.quad	2781242211                      # 0xa5c66363
	.quad	2230877308                      # 0x84f87c7c
	.quad	2582542199                      # 0x99ee7777
	.quad	2381740923                      # 0x8df67b7b
	.quad	234877682                       # 0xdfff2f2
	.quad	3184946027                      # 0xbdd66b6b
	.quad	2984144751                      # 0xb1de6f6f
	.quad	1418839493                      # 0x5491c5c5
	.quad	1348481072                      # 0x50603030
	.quad	50462977                        # 0x3020101
	.quad	2848876391                      # 0xa9ce6767
	.quad	2102799147                      # 0x7d562b2b
	.quad	434634494                       # 0x19e7fefe
	.quad	1656084439                      # 0x62b5d7d7
	.quad	3863849899                      # 0xe64dabab
	.quad	2599188086                      # 0x9aec7676
	.quad	1167051466                      # 0x458fcaca
	.quad	2636087938                      # 0x9d1f8282
	.quad	1082771913                      # 0x4089c9c9
	.quad	2281340285                      # 0x87fa7d7d
	.quad	368048890                       # 0x15effafa
	.quad	3954334041                      # 0xebb25959
	.quad	3381544775                      # 0xc98e4747
	.quad	201060592                       # 0xbfbf0f0
	.quad	3963727277                      # 0xec41adad
	.quad	1739838676                      # 0x67b3d4d4
	.quad	4250903202                      # 0xfd5fa2a2
	.quad	3930435503                      # 0xea45afaf
	.quad	3206782108                      # 0xbf239c9c
	.quad	4149453988                      # 0xf753a4a4
	.quad	2531553906                      # 0x96e47272
	.quad	1536934080                      # 0x5b9bc0c0
	.quad	3262494647                      # 0xc275b7b7
	.quad	484572669                       # 0x1ce1fdfd
	.quad	2923271059                      # 0xae3d9393
	.quad	1783375398                      # 0x6a4c2626
	.quad	1517041206                      # 0x5a6c3636
	.quad	1098792767                      # 0x417e3f3f
	.quad	49674231                        # 0x2f5f7f7
	.quad	1334037708                      # 0x4f83cccc
	.quad	1550332980                      # 0x5c683434
	.quad	4098991525                      # 0xf451a5a5
	.quad	886171109                       # 0x34d1e5e5
	.quad	150598129                       # 0x8f9f1f1
	.quad	2481090929                      # 0x93e27171
	.quad	1940642008                      # 0x73abd8d8
	.quad	1398944049                      # 0x53623131
	.quad	1059722517                      # 0x3f2a1515
	.quad	201851908                       # 0xc080404
	.quad	1385547719                      # 0x5295c7c7
	.quad	1699095331                      # 0x65462323
	.quad	1587397571                      # 0x5e9dc3c3
	.quad	674240536                       # 0x28301818
	.quad	2704774806                      # 0xa1379696
	.quad	252314885                       # 0xf0a0505
	.quad	3039795866                      # 0xb52f9a9a
	.quad	151914247                       # 0x90e0707
	.quad	908333586                       # 0x36241212
	.quad	2602270848                      # 0x9b1b8080
	.quad	1038082786                      # 0x3ddfe2e2
	.quad	651029483                       # 0x26cdebeb
	.quad	1766729511                      # 0x694e2727
	.quad	3447698098                      # 0xcd7fb2b2
	.quad	2682942837                      # 0x9fea7575
	.quad	454166793                       # 0x1b120909
	.quad	2652734339                      # 0x9e1d8383
	.quad	1951935532                      # 0x74582c2c
	.quad	775166490                       # 0x2e341a1a
	.quad	758520603                       # 0x2d361b1b
	.quad	3000790638                      # 0xb2dc6e6e
	.quad	4004797018                      # 0xeeb45a5a
	.quad	4217086112                      # 0xfb5ba0a0
	.quad	4137964114                      # 0xf6a45252
	.quad	1299594043                      # 0x4d763b3b
	.quad	1639438038                      # 0x61b7d6d6
	.quad	3464344499                      # 0xce7db3b3
	.quad	2068982057                      # 0x7b522929
	.quad	1054729187                      # 0x3edde3e3
	.quad	1901997871                      # 0x715e2f2f
	.quad	2534638724                      # 0x97138484
	.quad	4121318227                      # 0xf5a65353
	.quad	1757008337                      # 0x68b9d1d1
	.quad	0                               # 0x0
	.quad	750906861                       # 0x2cc1eded
	.quad	1614815264                      # 0x60402020
	.quad	535035132                       # 0x1fe3fcfc
	.quad	3363418545                      # 0xc879b1b1
	.quad	3988151131                      # 0xedb65b5b
	.quad	3201591914                      # 0xbed46a6a
	.quad	1183697867                      # 0x468dcbcb
	.quad	3647454910                      # 0xd967bebe
	.quad	1265776953                      # 0x4b723939
	.quad	3734260298                      # 0xde944a4a
	.quad	3566750796                      # 0xd4984c4c
	.quad	3903871064                      # 0xe8b05858
	.quad	1250283471                      # 0x4a85cfcf
	.quad	1807470800                      # 0x6bbbd0d0
	.quad	717615087                       # 0x2ac5efef
	.quad	3847203498                      # 0xe54faaaa
	.quad	384695291                       # 0x16edfbfb
	.quad	3313910595                      # 0xc5864343
	.quad	3617213773                      # 0xd79a4d4d
	.quad	1432761139                      # 0x55663333
	.quad	2484176261                      # 0x94118585
	.quad	3481945413                      # 0xcf8a4545
	.quad	283769337                       # 0x10e9f9f9
	.quad	100925954                       # 0x6040202
	.quad	2180939647                      # 0x81fe7f7f
	.quad	4037038160                      # 0xf0a05050
	.quad	1148730428                      # 0x44783c3c
	.quad	3123027871                      # 0xba259f9f
	.quad	3813386408                      # 0xe34ba8a8
	.quad	4087501137                      # 0xf3a25151
	.quad	4267549603                      # 0xfe5da3a3
	.quad	3229630528                      # 0xc0804040
	.quad	2315620239                      # 0x8a058f8f
	.quad	2906624658                      # 0xad3f9292
	.quad	3156319645                      # 0xbc219d9d
	.quad	1215313976                      # 0x48703838
	.quad	82966005                        # 0x4f1f5f5
	.quad	3747855548                      # 0xdf63bcbc
	.quad	3245848246                      # 0xc177b6b6
	.quad	1974459098                      # 0x75afdada
	.quad	1665278241                      # 0x63422121
	.quad	807407632                       # 0x30201010
	.quad	451280895                       # 0x1ae5ffff
	.quad	251524083                       # 0xefdf3f3
	.quad	1841287890                      # 0x6dbfd2d2
	.quad	1283575245                      # 0x4c81cdcd
	.quad	337120268                       # 0x14180c0c
	.quad	891687699                       # 0x35261313
	.quad	801369324                       # 0x2fc3ecec
	.quad	3787349855                      # 0xe1be5f5f
	.quad	2721421207                      # 0xa2359797
	.quad	3431482436                      # 0xcc884444
	.quad	959321879                       # 0x392e1717
	.quad	1469301956                      # 0x5793c4c4
	.quad	4065699751                      # 0xf255a7a7
	.quad	2197585534                      # 0x82fc7e7e
	.quad	1199193405                      # 0x477a3d3d
	.quad	2898814052                      # 0xacc86464
	.quad	3887750493                      # 0xe7ba5d5d
	.quad	724703513                       # 0x2b321919
	.quad	2514908019                      # 0x95e67373
	.quad	2696962144                      # 0xa0c06060
	.quad	2551808385                      # 0x98198181
	.quad	3516813135                      # 0xd19e4f4f
	.quad	2141445340                      # 0x7fa3dcdc
	.quad	1715741218                      # 0x66442222
	.quad	2119445034                      # 0x7e542a2a
	.quad	2872807568                      # 0xab3b9090
	.quad	2198571144                      # 0x830b8888
	.quad	3398190662                      # 0xca8c4646
	.quad	700968686                       # 0x29c7eeee
	.quad	3547052216                      # 0xd36bb8b8
	.quad	1009259540                      # 0x3c281414
	.quad	2041044702                      # 0x79a7dede
	.quad	3803995742                      # 0xe2bc5e5e
	.quad	487983883                       # 0x1d160b0b
	.quad	1991105499                      # 0x76addbdb
	.quad	1004265696                      # 0x3bdbe0e0
	.quad	1449407026                      # 0x56643232
	.quad	1316239930                      # 0x4e743a3a
	.quad	504629770                       # 0x1e140a0a
	.quad	3683797321                      # 0xdb924949
	.quad	168560134                       # 0xa0c0606
	.quad	1816667172                      # 0x6c482424
	.quad	3837287516                      # 0xe4b85c5c
	.quad	1570751170                      # 0x5d9fc2c2
	.quad	1857934291                      # 0x6ebdd3d3
	.quad	4014189740                      # 0xef43acac
	.quad	2797888098                      # 0xa6c46262
	.quad	2822345105                      # 0xa8399191
	.quad	2754712981                      # 0xa4319595
	.quad	936633572                       # 0x37d3e4e4
	.quad	2347923833                      # 0x8bf27979
	.quad	852879335                       # 0x32d5e7e7
	.quad	1133234376                      # 0x438bc8c8
	.quad	1500395319                      # 0x596e3737
	.quad	3084545389                      # 0xb7da6d6d
	.quad	2348912013                      # 0x8c018d8d
	.quad	1689376213                      # 0x64b1d5d5
	.quad	3533459022                      # 0xd29c4e4e
	.quad	3762923945                      # 0xe049a9a9
	.quad	3034082412                      # 0xb4d86c6c
	.quad	4205598294                      # 0xfaac5656
	.quad	133428468                       # 0x7f3f4f4
	.quad	634383082                       # 0x25cfeaea
	.quad	2949277029                      # 0xafca6565
	.quad	2398386810                      # 0x8ef47a7a
	.quad	3913789102                      # 0xe947aeae
	.quad	403703816                       # 0x18100808
	.quad	3580869306                      # 0xd56fbaba
	.quad	2297460856                      # 0x88f07878
	.quad	1867130149                      # 0x6f4a2525
	.quad	1918643758                      # 0x725c2e2e
	.quad	607656988                       # 0x24381c1c
	.quad	4049053350                      # 0xf157a6a6
	.quad	3346248884                      # 0xc773b4b4
	.quad	1368901318                      # 0x5197c6c6
	.quad	600565992                       # 0x23cbe8e8
	.quad	2090982877                      # 0x7ca1dddd
	.quad	2632479860                      # 0x9ce87474
	.quad	557719327                       # 0x213e1f1f
	.quad	3717614411                      # 0xdd964b4b
	.quad	3697393085                      # 0xdc61bdbd
	.quad	2249034635                      # 0x860d8b8b
	.quad	2232388234                      # 0x850f8a8a
	.quad	2430627952                      # 0x90e07070
	.quad	1115438654                      # 0x427c3e3e
	.quad	3295786421                      # 0xc471b5b5
	.quad	2865522278                      # 0xaacc6666
	.quad	3633334344                      # 0xd8904848
	.quad	84280067                        # 0x5060303
	.quad	33027830                        # 0x1f7f6f6
	.quad	303828494                       # 0x121c0e0e
	.quad	2747425121                      # 0xa3c26161
	.quad	1600795957                      # 0x5f6a3535
	.quad	4188952407                      # 0xf9ae5757
	.quad	3496589753                      # 0xd069b9b9
	.quad	2434238086                      # 0x91178686
	.quad	1486471617                      # 0x5899c1c1
	.quad	658119965                       # 0x273a1d1d
	.quad	3106381470                      # 0xb9279e9e
	.quad	953803233                       # 0x38d9e1e1
	.quad	334231800                       # 0x13ebf8f8
	.quad	3005978776                      # 0xb32b9898
	.quad	857870609                       # 0x33221111
	.quad	3151128937                      # 0xbbd26969
	.quad	1890179545                      # 0x70a9d9d9
	.quad	2298973838                      # 0x89078e8e
	.quad	2805175444                      # 0xa7339494
	.quad	3056442267                      # 0xb62d9b9b
	.quad	574365214                       # 0x223c1e1e
	.quad	2450884487                      # 0x92158787
	.quad	550103529                       # 0x20c9e9e9
	.quad	1233637070                      # 0x4987cece
	.quad	4289353045                      # 0xffaa5555
	.quad	2018519080                      # 0x78502828
	.quad	2057691103                      # 0x7aa5dfdf
	.quad	2399374476                      # 0x8f038c8c
	.quad	4166623649                      # 0xf859a1a1
	.quad	2148108681                      # 0x80098989
	.quad	387583245                       # 0x171a0d0d
	.quad	3664101311                      # 0xda65bfbf
	.quad	836232934                       # 0x31d7e6e6
	.quad	3330556482                      # 0xc6844242
	.quad	3100665960                      # 0xb8d06868
	.quad	3280093505                      # 0xc3824141
	.quad	2955516313                      # 0xb0299999
	.quad	2002398509                      # 0x775a2d2d
	.quad	287182607                       # 0x111e0f0f
	.quad	3413881008                      # 0xcb7bb0b0
	.quad	4238890068                      # 0xfca85454
	.quad	3597515707                      # 0xd66dbbbb
	.quad	975967766                       # 0x3a2c1616
	.size	Te1, 2048

	.type	Te2,@object                     # @Te2
	.globl	Te2
	.p2align	4, 0x0
Te2:
	.quad	1671808611                      # 0x63a5c663
	.quad	2089089148                      # 0x7c84f87c
	.quad	2006576759                      # 0x7799ee77
	.quad	2072901243                      # 0x7b8df67b
	.quad	4061003762                      # 0xf20dfff2
	.quad	1807603307                      # 0x6bbdd66b
	.quad	1873927791                      # 0x6fb1de6f
	.quad	3310653893                      # 0xc55491c5
	.quad	810573872                       # 0x30506030
	.quad	16974337                        # 0x1030201
	.quad	1739181671                      # 0x67a9ce67
	.quad	729634347                       # 0x2b7d562b
	.quad	4263110654                      # 0xfe19e7fe
	.quad	3613570519                      # 0xd762b5d7
	.quad	2883997099                      # 0xabe64dab
	.quad	1989864566                      # 0x769aec76
	.quad	3393556426                      # 0xca458fca
	.quad	2191335298                      # 0x829d1f82
	.quad	3376449993                      # 0xc94089c9
	.quad	2106063485                      # 0x7d87fa7d
	.quad	4195741690                      # 0xfa15effa
	.quad	1508618841                      # 0x59ebb259
	.quad	1204391495                      # 0x47c98e47
	.quad	4027317232                      # 0xf00bfbf0
	.quad	2917941677                      # 0xadec41ad
	.quad	3563566036                      # 0xd467b3d4
	.quad	2734514082                      # 0xa2fd5fa2
	.quad	2951366063                      # 0xafea45af
	.quad	2629772188                      # 0x9cbf239c
	.quad	2767672228                      # 0xa4f753a4
	.quad	1922491506                      # 0x7296e472
	.quad	3227229120                      # 0xc05b9bc0
	.quad	3082974647                      # 0xb7c275b7
	.quad	4246528509                      # 0xfd1ce1fd
	.quad	2477669779                      # 0x93ae3d93
	.quad	644500518                       # 0x266a4c26
	.quad	911895606                       # 0x365a6c36
	.quad	1061256767                      # 0x3f417e3f
	.quad	4144166391                      # 0xf702f5f7
	.quad	3427763148                      # 0xcc4f83cc
	.quad	878471220                       # 0x345c6834
	.quad	2784252325                      # 0xa5f451a5
	.quad	3845444069                      # 0xe534d1e5
	.quad	4043897329                      # 0xf108f9f1
	.quad	1905517169                      # 0x7193e271
	.quad	3631459288                      # 0xd873abd8
	.quad	827548209                       # 0x31536231
	.quad	356461077                       # 0x153f2a15
	.quad	67897348                        # 0x40c0804
	.quad	3344078279                      # 0xc75295c7
	.quad	593839651                       # 0x23654623
	.quad	3277757891                      # 0xc35e9dc3
	.quad	405286936                       # 0x18283018
	.quad	2527147926                      # 0x96a13796
	.quad	84871685                        # 0x50f0a05
	.quad	2595565466                      # 0x9ab52f9a
	.quad	118033927                       # 0x7090e07
	.quad	305538066                       # 0x12362412
	.quad	2157648768                      # 0x809b1b80
	.quad	3795705826                      # 0xe23ddfe2
	.quad	3945188843                      # 0xeb26cdeb
	.quad	661212711                       # 0x27694e27
	.quad	2999812018                      # 0xb2cd7fb2
	.quad	1973414517                      # 0x759fea75
	.quad	152769033                       # 0x91b1209
	.quad	2208177539                      # 0x839e1d83
	.quad	745822252                       # 0x2c74582c
	.quad	439235610                       # 0x1a2e341a
	.quad	455947803                       # 0x1b2d361b
	.quad	1857215598                      # 0x6eb2dc6e
	.quad	1525593178                      # 0x5aeeb45a
	.quad	2700827552                      # 0xa0fb5ba0
	.quad	1391895634                      # 0x52f6a452
	.quad	994932283                       # 0x3b4d763b
	.quad	3596728278                      # 0xd661b7d6
	.quad	3016654259                      # 0xb3ce7db3
	.quad	695947817                       # 0x297b5229
	.quad	3812548067                      # 0xe33edde3
	.quad	795958831                       # 0x2f715e2f
	.quad	2224493444                      # 0x84971384
	.quad	1408607827                      # 0x53f5a653
	.quad	3513301457                      # 0xd168b9d1
	.quad	0                               # 0x0
	.quad	3979133421                      # 0xed2cc1ed
	.quad	543178784                       # 0x20604020
	.quad	4229948412                      # 0xfc1fe3fc
	.quad	2982705585                      # 0xb1c879b1
	.quad	1542305371                      # 0x5bedb65b
	.quad	1790891114                      # 0x6abed46a
	.quad	3410398667                      # 0xcb468dcb
	.quad	3201918910                      # 0xbed967be
	.quad	961245753                       # 0x394b7239
	.quad	1256100938                      # 0x4ade944a
	.quad	1289001036                      # 0x4cd4984c
	.quad	1491644504                      # 0x58e8b058
	.quad	3477767631                      # 0xcf4a85cf
	.quad	3496721360                      # 0xd06bbbd0
	.quad	4012557807                      # 0xef2ac5ef
	.quad	2867154858                      # 0xaae54faa
	.quad	4212583931                      # 0xfb16edfb
	.quad	1137018435                      # 0x43c58643
	.quad	1305975373                      # 0x4dd79a4d
	.quad	861234739                       # 0x33556633
	.quad	2241073541                      # 0x85941185
	.quad	1171229253                      # 0x45cf8a45
	.quad	4178635257                      # 0xf910e9f9
	.quad	33948674                        # 0x2060402
	.quad	2139225727                      # 0x7f81fe7f
	.quad	1357946960                      # 0x50f0a050
	.quad	1011120188                      # 0x3c44783c
	.quad	2679776671                      # 0x9fba259f
	.quad	2833468328                      # 0xa8e34ba8
	.quad	1374921297                      # 0x51f3a251
	.quad	2751356323                      # 0xa3fe5da3
	.quad	1086357568                      # 0x40c08040
	.quad	2408187279                      # 0x8f8a058f
	.quad	2460827538                      # 0x92ad3f92
	.quad	2646352285                      # 0x9dbc219d
	.quad	944271416                       # 0x38487038
	.quad	4110742005                      # 0xf504f1f5
	.quad	3168756668                      # 0xbcdf63bc
	.quad	3066132406                      # 0xb6c177b6
	.quad	3665145818                      # 0xda75afda
	.quad	560153121                       # 0x21634221
	.quad	271589392                       # 0x10302010
	.quad	4279952895                      # 0xff1ae5ff
	.quad	4077846003                      # 0xf30efdf3
	.quad	3530407890                      # 0xd26dbfd2
	.quad	3444343245                      # 0xcd4c81cd
	.quad	202643468                       # 0xc14180c
	.quad	322250259                       # 0x13352613
	.quad	3962553324                      # 0xec2fc3ec
	.quad	1608629855                      # 0x5fe1be5f
	.quad	2543990167                      # 0x97a23597
	.quad	1154254916                      # 0x44cc8844
	.quad	389623319                       # 0x17392e17
	.quad	3294073796                      # 0xc45793c4
	.quad	2817676711                      # 0xa7f255a7
	.quad	2122513534                      # 0x7e82fc7e
	.quad	1028094525                      # 0x3d477a3d
	.quad	1689045092                      # 0x64acc864
	.quad	1575467613                      # 0x5de7ba5d
	.quad	422261273                       # 0x192b3219
	.quad	1939203699                      # 0x7395e673
	.quad	1621147744                      # 0x60a0c060
	.quad	2174228865                      # 0x81981981
	.quad	1339137615                      # 0x4fd19e4f
	.quad	3699352540                      # 0xdc7fa3dc
	.quad	577127458                       # 0x22664422
	.quad	712922154                       # 0x2a7e542a
	.quad	2427141008                      # 0x90ab3b90
	.quad	2290289544                      # 0x88830b88
	.quad	1187679302                      # 0x46ca8c46
	.quad	3995715566                      # 0xee29c7ee
	.quad	3100863416                      # 0xb8d36bb8
	.quad	339486740                       # 0x143c2814
	.quad	3732514782                      # 0xde79a7de
	.quad	1591917662                      # 0x5ee2bc5e
	.quad	186455563                       # 0xb1d160b
	.quad	3681988059                      # 0xdb76addb
	.quad	3762019296                      # 0xe03bdbe0
	.quad	844522546                       # 0x32566432
	.quad	978220090                       # 0x3a4e743a
	.quad	169743370                       # 0xa1e140a
	.quad	1239126601                      # 0x49db9249
	.quad	101321734                       # 0x60a0c06
	.quad	611076132                       # 0x246c4824
	.quad	1558493276                      # 0x5ce4b85c
	.quad	3260915650                      # 0xc25d9fc2
	.quad	3547250131                      # 0xd36ebdd3
	.quad	2901361580                      # 0xacef43ac
	.quad	1655096418                      # 0x62a6c462
	.quad	2443721105                      # 0x91a83991
	.quad	2510565781                      # 0x95a43195
	.quad	3828863972                      # 0xe437d3e4
	.quad	2039214713                      # 0x798bf279
	.quad	3878868455                      # 0xe732d5e7
	.quad	3359869896                      # 0xc8438bc8
	.quad	928607799                       # 0x37596e37
	.quad	1840765549                      # 0x6db7da6d
	.quad	2374762893                      # 0x8d8c018d
	.quad	3580146133                      # 0xd564b1d5
	.quad	1322425422                      # 0x4ed29c4e
	.quad	2850048425                      # 0xa9e049a9
	.quad	1823791212                      # 0x6cb4d86c
	.quad	1459268694                      # 0x56faac56
	.quad	4094161908                      # 0xf407f3f4
	.quad	3928346602                      # 0xea25cfea
	.quad	1706019429                      # 0x65afca65
	.quad	2056189050                      # 0x7a8ef47a
	.quad	2934523822                      # 0xaee947ae
	.quad	135794696                       # 0x8181008
	.quad	3134549946                      # 0xbad56fba
	.quad	2022240376                      # 0x7888f078
	.quad	628050469                       # 0x256f4a25
	.quad	779246638                       # 0x2e725c2e
	.quad	472135708                       # 0x1c24381c
	.quad	2800834470                      # 0xa6f157a6
	.quad	3032970164                      # 0xb4c773b4
	.quad	3327236038                      # 0xc65197c6
	.quad	3894660072                      # 0xe823cbe8
	.quad	3715932637                      # 0xdd7ca1dd
	.quad	1956440180                      # 0x749ce874
	.quad	522272287                       # 0x1f213e1f
	.quad	1272813131                      # 0x4bdd964b
	.quad	3185336765                      # 0xbddc61bd
	.quad	2340818315                      # 0x8b860d8b
	.quad	2323976074                      # 0x8a850f8a
	.quad	1888542832                      # 0x7090e070
	.quad	1044544574                      # 0x3e427c3e
	.quad	3049550261                      # 0xb5c471b5
	.quad	1722469478                      # 0x66aacc66
	.quad	1222152264                      # 0x48d89048
	.quad	50660867                        # 0x3050603
	.quad	4127324150                      # 0xf601f7f6
	.quad	236067854                       # 0xe121c0e
	.quad	1638122081                      # 0x61a3c261
	.quad	895445557                       # 0x355f6a35
	.quad	1475980887                      # 0x57f9ae57
	.quad	3117443513                      # 0xb9d069b9
	.quad	2257655686                      # 0x86911786
	.quad	3243809217                      # 0xc15899c1
	.quad	489110045                       # 0x1d273a1d
	.quad	2662934430                      # 0x9eb9279e
	.quad	3778599393                      # 0xe138d9e1
	.quad	4162055160                      # 0xf813ebf8
	.quad	2561878936                      # 0x98b32b98
	.quad	288563729                       # 0x11332211
	.quad	1773916777                      # 0x69bbd269
	.quad	3648039385                      # 0xd970a9d9
	.quad	2391345038                      # 0x8e89078e
	.quad	2493985684                      # 0x94a73394
	.quad	2612407707                      # 0x9bb62d9b
	.quad	505560094                       # 0x1e223c1e
	.quad	2274497927                      # 0x87921587
	.quad	3911240169                      # 0xe920c9e9
	.quad	3460925390                      # 0xce4987ce
	.quad	1442818645                      # 0x55ffaa55
	.quad	678973480                       # 0x28785028
	.quad	3749357023                      # 0xdf7aa5df
	.quad	2358182796                      # 0x8c8f038c
	.quad	2717407649                      # 0xa1f859a1
	.quad	2306869641                      # 0x89800989
	.quad	219617805                       # 0xd171a0d
	.quad	3218761151                      # 0xbfda65bf
	.quad	3862026214                      # 0xe631d7e6
	.quad	1120306242                      # 0x42c68442
	.quad	1756942440                      # 0x68b8d068
	.quad	1103331905                      # 0x41c38241
	.quad	2578459033                      # 0x99b02999
	.quad	762796589                       # 0x2d775a2d
	.quad	252780047                       # 0xf111e0f
	.quad	2966125488                      # 0xb0cb7bb0
	.quad	1425844308                      # 0x54fca854
	.quad	3151392187                      # 0xbbd66dbb
	.quad	372911126                       # 0x163a2c16
	.size	Te2, 2048

	.type	Te3,@object                     # @Te3
	.globl	Te3
	.p2align	4, 0x0
Te3:
	.quad	1667474886                      # 0x6363a5c6
	.quad	2088535288                      # 0x7c7c84f8
	.quad	2004326894                      # 0x777799ee
	.quad	2071694838                      # 0x7b7b8df6
	.quad	4075949567                      # 0xf2f20dff
	.quad	1802223062                      # 0x6b6bbdd6
	.quad	1869591006                      # 0x6f6fb1de
	.quad	3318043793                      # 0xc5c55491
	.quad	808472672                       # 0x30305060
	.quad	16843522                        # 0x1010302
	.quad	1734846926                      # 0x6767a9ce
	.quad	724270422                       # 0x2b2b7d56
	.quad	4278065639                      # 0xfefe19e7
	.quad	3621216949                      # 0xd7d762b5
	.quad	2880169549                      # 0xababe64d
	.quad	1987484396                      # 0x76769aec
	.quad	3402253711                      # 0xcaca458f
	.quad	2189597983                      # 0x82829d1f
	.quad	3385409673                      # 0xc9c94089
	.quad	2105378810                      # 0x7d7d87fa
	.quad	4210693615                      # 0xfafa15ef
	.quad	1499065266                      # 0x5959ebb2
	.quad	1195886990                      # 0x4747c98e
	.quad	4042263547                      # 0xf0f00bfb
	.quad	2913856577                      # 0xadadec41
	.quad	3570689971                      # 0xd4d467b3
	.quad	2728590687                      # 0xa2a2fd5f
	.quad	2947541573                      # 0xafafea45
	.quad	2627518243                      # 0x9c9cbf23
	.quad	2762274643                      # 0xa4a4f753
	.quad	1920112356                      # 0x727296e4
	.quad	3233831835                      # 0xc0c05b9b
	.quad	3082273397                      # 0xb7b7c275
	.quad	4261223649                      # 0xfdfd1ce1
	.quad	2475929149                      # 0x9393ae3d
	.quad	640051788                       # 0x26266a4c
	.quad	909531756                       # 0x36365a6c
	.quad	1061110142                      # 0x3f3f417e
	.quad	4160160501                      # 0xf7f702f5
	.quad	3435941763                      # 0xcccc4f83
	.quad	875846760                       # 0x34345c68
	.quad	2779116625                      # 0xa5a5f451
	.quad	3857003729                      # 0xe5e534d1
	.quad	4059105529                      # 0xf1f108f9
	.quad	1903268834                      # 0x717193e2
	.quad	3638064043                      # 0xd8d873ab
	.quad	825316194                       # 0x31315362
	.quad	353713962                       # 0x15153f2a
	.quad	67374088                        # 0x4040c08
	.quad	3351728789                      # 0xc7c75295
	.quad	589522246                       # 0x23236546
	.quad	3284360861                      # 0xc3c35e9d
	.quad	404236336                       # 0x18182830
	.quad	2526454071                      # 0x9696a137
	.quad	84217610                        # 0x5050f0a
	.quad	2593830191                      # 0x9a9ab52f
	.quad	117901582                       # 0x707090e
	.quad	303183396                       # 0x12123624
	.quad	2155911963                      # 0x80809b1b
	.quad	3806477791                      # 0xe2e23ddf
	.quad	3958056653                      # 0xebeb26cd
	.quad	656894286                       # 0x2727694e
	.quad	2998062463                      # 0xb2b2cd7f
	.quad	1970642922                      # 0x75759fea
	.quad	151591698                       # 0x9091b12
	.quad	2206440989                      # 0x83839e1d
	.quad	741110872                       # 0x2c2c7458
	.quad	437923380                       # 0x1a1a2e34
	.quad	454765878                       # 0x1b1b2d36
	.quad	1852748508                      # 0x6e6eb2dc
	.quad	1515908788                      # 0x5a5aeeb4
	.quad	2694904667                      # 0xa0a0fb5b
	.quad	1381168804                      # 0x5252f6a4
	.quad	993742198                       # 0x3b3b4d76
	.quad	3604373943                      # 0xd6d661b7
	.quad	3014905469                      # 0xb3b3ce7d
	.quad	690584402                       # 0x29297b52
	.quad	3823320797                      # 0xe3e33edd
	.quad	791638366                       # 0x2f2f715e
	.quad	2223281939                      # 0x84849713
	.quad	1398011302                      # 0x5353f5a6
	.quad	3520161977                      # 0xd1d168b9
	.quad	0                               # 0x0
	.quad	3991743681                      # 0xeded2cc1
	.quad	538992704                       # 0x20206040
	.quad	4244381667                      # 0xfcfc1fe3
	.quad	2981218425                      # 0xb1b1c879
	.quad	1532751286                      # 0x5b5bedb6
	.quad	1785380564                      # 0x6a6abed4
	.quad	3419096717                      # 0xcbcb468d
	.quad	3200178535                      # 0xbebed967
	.quad	960056178                       # 0x39394b72
	.quad	1246420628                      # 0x4a4ade94
	.quad	1280103576                      # 0x4c4cd498
	.quad	1482221744                      # 0x5858e8b0
	.quad	3486468741                      # 0xcfcf4a85
	.quad	3503319995                      # 0xd0d06bbb
	.quad	4025428677                      # 0xefef2ac5
	.quad	2863326543                      # 0xaaaae54f
	.quad	4227536621                      # 0xfbfb16ed
	.quad	1128514950                      # 0x4343c586
	.quad	1296947098                      # 0x4d4dd79a
	.quad	859002214                       # 0x33335566
	.quad	2240123921                      # 0x85859411
	.quad	1162203018                      # 0x4545cf8a
	.quad	4193849577                      # 0xf9f910e9
	.quad	33687044                        # 0x2020604
	.quad	2139062782                      # 0x7f7f81fe
	.quad	1347481760                      # 0x5050f0a0
	.quad	1010582648                      # 0x3c3c4478
	.quad	2678045221                      # 0x9f9fba25
	.quad	2829640523                      # 0xa8a8e34b
	.quad	1364325282                      # 0x5151f3a2
	.quad	2745433693                      # 0xa3a3fe5d
	.quad	1077985408                      # 0x4040c080
	.quad	2408548869                      # 0x8f8f8a05
	.quad	2459086143                      # 0x9292ad3f
	.quad	2644360225                      # 0x9d9dbc21
	.quad	943212656                       # 0x38384870
	.quad	4126475505                      # 0xf5f504f1
	.quad	3166494563                      # 0xbcbcdf63
	.quad	3065430391                      # 0xb6b6c177
	.quad	3671750063                      # 0xdada75af
	.quad	555836226                       # 0x21216342
	.quad	269496352                       # 0x10103020
	.quad	4294908645                      # 0xffff1ae5
	.quad	4092792573                      # 0xf3f30efd
	.quad	3537006015                      # 0xd2d26dbf
	.quad	3452783745                      # 0xcdcd4c81
	.quad	202118168                       # 0xc0c1418
	.quad	320025894                       # 0x13133526
	.quad	3974901699                      # 0xecec2fc3
	.quad	1600119230                      # 0x5f5fe1be
	.quad	2543297077                      # 0x9797a235
	.quad	1145359496                      # 0x4444cc88
	.quad	387397934                       # 0x1717392e
	.quad	3301201811                      # 0xc4c45793
	.quad	2812801621                      # 0xa7a7f255
	.quad	2122220284                      # 0x7e7e82fc
	.quad	1027426170                      # 0x3d3d477a
	.quad	1684319432                      # 0x6464acc8
	.quad	1566435258                      # 0x5d5de7ba
	.quad	421079858                       # 0x19192b32
	.quad	1936954854                      # 0x737395e6
	.quad	1616945344                      # 0x6060a0c0
	.quad	2172753945                      # 0x81819819
	.quad	1330631070                      # 0x4f4fd19e
	.quad	3705438115                      # 0xdcdc7fa3
	.quad	572679748                       # 0x22226644
	.quad	707427924                       # 0x2a2a7e54
	.quad	2425400123                      # 0x9090ab3b
	.quad	2290647819                      # 0x8888830b
	.quad	1179044492                      # 0x4646ca8c
	.quad	4008585671                      # 0xeeee29c7
	.quad	3099120491                      # 0xb8b8d36b
	.quad	336870440                       # 0x14143c28
	.quad	3739122087                      # 0xdede79a7
	.quad	1583276732                      # 0x5e5ee2bc
	.quad	185277718                       # 0xb0b1d16
	.quad	3688593069                      # 0xdbdb76ad
	.quad	3772791771                      # 0xe0e03bdb
	.quad	842159716                       # 0x32325664
	.quad	976899700                       # 0x3a3a4e74
	.quad	168435220                       # 0xa0a1e14
	.quad	1229577106                      # 0x4949db92
	.quad	101059084                       # 0x6060a0c
	.quad	606366792                       # 0x24246c48
	.quad	1549591736                      # 0x5c5ce4b8
	.quad	3267517855                      # 0xc2c25d9f
	.quad	3553849021                      # 0xd3d36ebd
	.quad	2897014595                      # 0xacacef43
	.quad	1650632388                      # 0x6262a6c4
	.quad	2442242105                      # 0x9191a839
	.quad	2509612081                      # 0x9595a431
	.quad	3840161747                      # 0xe4e437d3
	.quad	2038008818                      # 0x79798bf2
	.quad	3890688725                      # 0xe7e732d5
	.quad	3368567691                      # 0xc8c8438b
	.quad	926374254                       # 0x3737596e
	.quad	1835907034                      # 0x6d6db7da
	.quad	2374863873                      # 0x8d8d8c01
	.quad	3587531953                      # 0xd5d564b1
	.quad	1313788572                      # 0x4e4ed29c
	.quad	2846482505                      # 0xa9a9e049
	.quad	1819063512                      # 0x6c6cb4d8
	.quad	1448540844                      # 0x5656faac
	.quad	4109633523                      # 0xf4f407f3
	.quad	3941213647                      # 0xeaea25cf
	.quad	1701162954                      # 0x6565afca
	.quad	2054852340                      # 0x7a7a8ef4
	.quad	2930698567                      # 0xaeaee947
	.quad	134748176                       # 0x8081810
	.quad	3132806511                      # 0xbabad56f
	.quad	2021165296                      # 0x787888f0
	.quad	623210314                       # 0x25256f4a
	.quad	774795868                       # 0x2e2e725c
	.quad	471606328                       # 0x1c1c2438
	.quad	2795958615                      # 0xa6a6f157
	.quad	3031746419                      # 0xb4b4c773
	.quad	3334885783                      # 0xc6c65197
	.quad	3907527627                      # 0xe8e823cb
	.quad	3722280097                      # 0xdddd7ca1
	.quad	1953799400                      # 0x74749ce8
	.quad	522133822                       # 0x1f1f213e
	.quad	1263263126                      # 0x4b4bdd96
	.quad	3183336545                      # 0xbdbddc61
	.quad	2341176845                      # 0x8b8b860d
	.quad	2324333839                      # 0x8a8a850f
	.quad	1886425312                      # 0x707090e0
	.quad	1044267644                      # 0x3e3e427c
	.quad	3048588401                      # 0xb5b5c471
	.quad	1718004428                      # 0x6666aacc
	.quad	1212733584                      # 0x4848d890
	.quad	50529542                        # 0x3030506
	.quad	4143317495                      # 0xf6f601f7
	.quad	235803164                       # 0xe0e121c
	.quad	1633788866                      # 0x6161a3c2
	.quad	892690282                       # 0x35355f6a
	.quad	1465383342                      # 0x5757f9ae
	.quad	3115962473                      # 0xb9b9d069
	.quad	2256965911                      # 0x86869117
	.quad	3250673817                      # 0xc1c15899
	.quad	488449850                       # 0x1d1d273a
	.quad	2661202215                      # 0x9e9eb927
	.quad	3789633753                      # 0xe1e138d9
	.quad	4177007595                      # 0xf8f813eb
	.quad	2560144171                      # 0x9898b32b
	.quad	286339874                       # 0x11113322
	.quad	1768537042                      # 0x6969bbd2
	.quad	3654906025                      # 0xd9d970a9
	.quad	2391705863                      # 0x8e8e8907
	.quad	2492770099                      # 0x9494a733
	.quad	2610673197                      # 0x9b9bb62d
	.quad	505291324                       # 0x1e1e223c
	.quad	2273808917                      # 0x87879215
	.quad	3924369609                      # 0xe9e920c9
	.quad	3469625735                      # 0xcece4987
	.quad	1431699370                      # 0x5555ffaa
	.quad	673740880                       # 0x28287850
	.quad	3755965093                      # 0xdfdf7aa5
	.quad	2358021891                      # 0x8c8c8f03
	.quad	2711746649                      # 0xa1a1f859
	.quad	2307489801                      # 0x89898009
	.quad	218961690                       # 0xd0d171a
	.quad	3217021541                      # 0xbfbfda65
	.quad	3873845719                      # 0xe6e631d7
	.quad	1111672452                      # 0x4242c684
	.quad	1751693520                      # 0x6868b8d0
	.quad	1094828930                      # 0x4141c382
	.quad	2576986153                      # 0x9999b029
	.quad	757954394                       # 0x2d2d775a
	.quad	252645662                       # 0xf0f111e
	.quad	2964376443                      # 0xb0b0cb7b
	.quad	1414855848                      # 0x5454fca8
	.quad	3149649517                      # 0xbbbbd66d
	.quad	370555436                       # 0x16163a2c
	.size	Te3, 2048

	.type	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_,@object # @_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.section	.rodata,"a",@progbits
	.globl	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.p2align	3, 0x0
_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_:
	.quad	_Z26__device_stub__AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.size	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_, 8

	.type	.L.str.4,@object                # @.str.4
	.section	.rodata.str1.1,"aMS",@progbits,1
.L.str.4:
	.asciz	"\351\224\231\350\257\257\357\274\232\346\227\240\346\263\225\346\211\223\345\274\200\345\212\240\345\257\206\346\226\207\344\273\266"
	.size	.L.str.4, 34

	.type	.L.str.5,@object                # @.str.5
.L.str.5:
	.asciz	"\350\276\223\345\205\245\346\226\207\344\273\266\351\225\277\345\272\246\344\270\272(\345\255\227\350\212\202)\357\274\232 "
	.size	.L.str.5, 34

	.type	.L.str.6,@object                # @.str.6
.L.str.6:
	.asciz	"\346\226\207\344\273\266\345\235\227\344\270\252\346\225\260\344\270\272\357\274\232 "
	.size	.L.str.6, 23

	.type	.L.str.7,@object                # @.str.7
.L.str.7:
	.asciz	"\345\257\206\347\240\201\351\225\277\345\272\246\344\270\272\357\274\210\345\255\227\350\212\202\357\274\211:"
	.size	.L.str.7, 29

	.type	.L.str.9,@object                # @.str.9
.L.str.9:
	.asciz	"wb"
	.size	.L.str.9, 3

	.type	.L.str.10,@object               # @.str.10
.L.str.10:
	.asciz	"\345\212\240\345\257\206\346\225\260\346\215\256\345\235\227\346\225\260: %d\n"
	.size	.L.str.10, 24

	.type	.L.str.11,@object               # @.str.11
.L.str.11:
	.asciz	"\345\212\240\345\257\206\346\227\266\351\227\264\357\274\232"
	.size	.L.str.11, 16

	.type	.L.str.12,@object               # @.str.12
.L.str.12:
	.asciz	"\345\220\236\345\220\220\351\207\217\344\270\272\357\274\232"
	.size	.L.str.12, 16

	.type	.L.str.13,@object               # @.str.13
.L.str.13:
	.asciz	" Gbps"
	.size	.L.str.13, 6

	.type	.L__unnamed_1,@object           # @0
.L__unnamed_1:
	.asciz	"_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_"
	.size	.L__unnamed_1, 41

	.type	__hip_fatbin_wrapper,@object    # @__hip_fatbin_wrapper
	.section	.hipFatBinSegment,"a",@progbits
	.p2align	3, 0x0
__hip_fatbin_wrapper:
	.long	1212764230                      # 0x48495046
	.long	1                               # 0x1
	.quad	__hip_fatbin
	.quad	0
	.size	__hip_fatbin_wrapper, 24

	.type	__hip_gpubin_handle,@object     # @__hip_gpubin_handle
	.local	__hip_gpubin_handle
	.comm	__hip_gpubin_handle,8,8
	.section	.init_array,"aw",@init_array
	.p2align	3, 0x0
	.quad	__hip_module_ctor
	.type	__hip_cuid_,@object             # @__hip_cuid_
	.bss
	.globl	__hip_cuid_
__hip_cuid_:
	.byte	0                               # 0x0
	.size	__hip_cuid_, 1

	.type	.Lstr,@object                   # @str
	.section	.rodata.str1.1,"aMS",@progbits,1
.Lstr:
	.asciz	"\351\224\231\350\257\257\357\274\232\345\257\206\351\222\245\351\234\200\350\246\201128, 192\346\210\226256\345\255\227\350\212\202"
	.size	.Lstr, 42

	.ident	"AMD clang version 18.0.0git (https://github.com/RadeonOpenCompute/llvm-project roc-6.3.2 25012 e5bf7e55c91490b07c49d8960fa7983d864936c4)"
	.section	".note.GNU-stack","",@progbits
	.addrsig
	.addrsig_sym _Z26__device_stub__AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.addrsig_sym __gxx_personality_v0
	.addrsig_sym __hip_module_ctor
	.addrsig_sym __hip_module_dtor
	.addrsig_sym _Unwind_Resume
	.addrsig_sym Te0
	.addrsig_sym Te1
	.addrsig_sym Te2
	.addrsig_sym Te3
	.addrsig_sym _Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.addrsig_sym _ZSt4cerr
	.addrsig_sym _ZSt4cout
	.addrsig_sym __hip_fatbin
	.addrsig_sym __hip_fatbin_wrapper
	.addrsig_sym __hip_cuid_

	.text
	.amdgcn_target "amdgcn-amd-amdhsa--gfx1100"
	.protected	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_ ; -- Begin function _Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.globl	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
	.p2align	8
	.type	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_,@function
_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_: ; @_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
; %bb.0:
	s_clause 0x1
	s_load_b32 s4, s[0:1], 0x44
	s_load_b32 s16, s[0:1], 0x10
	s_add_u32 s2, s0, 56
	s_addc_u32 s3, s1, 0
	s_waitcnt lgkmcnt(0)
	s_and_b32 s17, s4, 0xffff
	s_mov_b32 s4, exec_lo
	v_mad_u64_u32 v[1:2], null, s15, s17, v[0:1]
	s_delay_alu instid0(VALU_DEP_1)
	v_cmpx_gt_i32_e64 s16, v1
	s_cbranch_execz .LBB0_6
; %bb.1:                                ; %.lr.ph
	s_load_b32 s2, s[2:3], 0x0
	s_clause 0x1
	s_load_b128 s[12:15], s[0:1], 0x0
	s_load_b256 s[4:11], s[0:1], 0x18
	v_cmp_eq_u32_e32 vcc_lo, 0, v0
	v_mov_b32_e32 v3, 0
	s_mov_b32 s3, 0
	s_waitcnt lgkmcnt(0)
	s_mul_i32 s2, s2, s17
.LBB0_2:                                ; =>This Loop Header: Depth=1
                                        ;     Child Loop BB0_4 Depth 2
	s_and_saveexec_b32 s17, vcc_lo
	s_cbranch_execz .LBB0_5
; %bb.3:                                ; %.preheader.preheader
                                        ;   in Loop: Header=BB0_2 Depth=1
	s_mov_b64 s[0:1], 0
	s_mov_b32 s18, 0
.LBB0_4:                                ; %.preheader
                                        ;   Parent Loop BB0_2 Depth=1
                                        ; =>  This Inner Loop Header: Depth=2
	s_add_u32 s20, s14, s0
	s_addc_u32 s21, s15, s1
	s_add_u32 s0, s0, 4
	global_load_b32 v0, v3, s[20:21]
	s_addc_u32 s1, s1, 0
	s_add_i32 s19, s0, -4
	s_waitcnt vmcnt(0)
	v_lshlrev_b32_e32 v2, 8, v0
	v_lshlrev_b32_e32 v4, 24, v0
	v_lshrrev_b32_e32 v5, 8, v0
	v_lshrrev_b32_e32 v0, 24, v0
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_and_b32_e32 v2, 0xff0000, v2
	v_and_b32_e32 v5, 0xff00, v5
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
	v_or_b32_e32 v2, v2, v4
	v_mov_b32_e32 v4, s18
	s_add_i32 s18, s18, 8
	s_cmpk_lt_u32 s19, 0xac
	v_or_b32_e32 v2, v2, v5
	s_delay_alu instid0(VALU_DEP_1)
	v_or_b32_e32 v2, v2, v0
	ds_store_b64 v4, v[2:3]
	s_cbranch_scc1 .LBB0_4
.LBB0_5:                                ; %Flow451
                                        ;   in Loop: Header=BB0_2 Depth=1
	s_or_b32 exec_lo, exec_lo, s17
	v_ashrrev_i32_e32 v2, 31, v1
	s_waitcnt lgkmcnt(0)
	s_waitcnt_vscnt null, 0x0
	s_barrier
	buffer_gl0_inv
	v_lshlrev_b64 v[4:5], 4, v[1:2]
	v_add_nc_u32_e32 v1, s2, v1
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_add_co_u32 v4, s0, s12, v4
	v_add_co_ci_u32_e64 v5, s0, s13, v5, s0
	global_load_b128 v[6:9], v[4:5], off
	ds_load_b128 v[10:13], v3
	ds_load_b128 v[14:17], v3 offset:16
	s_waitcnt vmcnt(0)
	v_lshlrev_b32_e32 v19, 24, v6
	v_and_b32_e32 v20, 0xff, v7
	v_and_b32_e32 v21, 0xff, v8
	v_lshrrev_b32_e32 v0, 8, v6
	v_lshlrev_b32_e32 v23, 8, v7
	v_lshrrev_b32_e32 v2, 16, v6
	v_and_b32_e32 v22, 0xff, v9
	v_and_b32_e32 v24, 0xff00, v8
	v_lshrrev_b32_e32 v26, 8, v8
	v_perm_b32 v6, v7, v6, 0x3070605
	v_lshrrev_b32_e32 v8, 16, v8
	v_lshl_or_b32 v19, v20, 16, v19
	v_lshlrev_b32_e32 v20, 8, v21
	v_bfe_u32 v25, v9, 8, 8
	v_perm_b32 v0, v0, v23, 0x4020c0c
	v_lshrrev_b32_e32 v18, 24, v9
	v_perm_b32 v6, v6, v8, 0x706010c
	v_or3_b32 v8, v19, v20, v22
	v_bfe_u32 v9, v9, 16, 8
	v_perm_b32 v2, v2, v7, 0x4020c0c
	v_and_b32_e32 v7, 0xff00, v26
	v_or3_b32 v0, v0, v24, v25
	v_or_b32_e32 v6, v6, v18
	s_waitcnt lgkmcnt(1)
	v_xor_b32_e32 v10, v10, v8
	v_or3_b32 v2, v2, v7, v9
	v_xor_b32_e32 v12, v12, v0
	s_waitcnt lgkmcnt(0)
	v_xor_b32_e32 v16, v16, v6
	v_lshrrev_b64 v[6:7], 21, v[10:11]
	v_and_b32_e32 v36, 0xff, v10
	v_xor_b32_e32 v14, v14, v2
	v_lshrrev_b64 v[8:9], 21, v[12:13]
	v_lshrrev_b32_e32 v30, 5, v10
	v_lshrrev_b32_e32 v10, 13, v10
	v_and_b32_e32 v6, -8, v6
	v_lshrrev_b64 v[18:19], 21, v[14:15]
	v_and_b32_e32 v7, 0x7ff, v7
	v_lshrrev_b32_e32 v0, 13, v12
	v_and_b32_e32 v8, -8, v8
	v_and_b32_e32 v34, 0xff, v16
	v_lshrrev_b32_e32 v11, 13, v14
	v_lshrrev_b32_e32 v13, 5, v16
	v_lshrrev_b32_e32 v20, 13, v16
	v_lshrrev_b64 v[15:16], 21, v[16:17]
	v_and_b32_e32 v9, 0x7ff, v9
	v_add_co_u32 v6, s0, s4, v6
	v_and_b32_e32 v26, 0x7f8, v10
	v_and_b32_e32 v10, -8, v18
	v_add_co_ci_u32_e64 v7, s0, s5, v7, s0
	v_lshrrev_b32_e32 v2, 5, v14
	v_and_b32_e32 v0, 0x7f8, v0
	v_and_b32_e32 v19, 0x7ff, v19
	v_add_co_u32 v8, s0, s4, v8
	v_and_b32_e32 v11, 0x7f8, v11
	v_and_b32_e32 v21, -8, v15
	v_add_co_ci_u32_e64 v9, s0, s5, v9, s0
	v_add_co_u32 v10, s0, s4, v10
	v_and_b32_e32 v22, 0x7f8, v20
	v_and_b32_e32 v20, 0x7ff, v16
	v_and_b32_e32 v38, 0xff, v12
	v_lshrrev_b32_e32 v12, 5, v12
	v_and_b32_e32 v40, 0xff, v14
	v_and_b32_e32 v2, 0x7f8, v2
	v_and_b32_e32 v13, 0x7f8, v13
	s_clause 0x1
	global_load_b64 v[14:15], v0, s[6:7]
	global_load_b64 v[16:17], v11, s[6:7]
	v_add_co_ci_u32_e64 v11, s0, s5, v19, s0
	global_load_b64 v[18:19], v[6:7], off
	v_and_b32_e32 v0, 0x7f8, v30
	v_add_co_u32 v6, s0, s4, v21
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v7, s0, s5, v20, s0
	global_load_b64 v[20:21], v[8:9], off
	global_load_b64 v[22:23], v22, s[6:7]
	global_load_b64 v[24:25], v[10:11], off
	global_load_b64 v[26:27], v26, s[6:7]
	global_load_b64 v[28:29], v[6:7], off
	s_clause 0x1
	global_load_b64 v[30:31], v2, s[8:9]
	global_load_b64 v[32:33], v13, s[8:9]
	v_lshlrev_b32_e32 v6, 3, v34
	global_load_b64 v[34:35], v0, s[8:9]
	v_and_b32_e32 v2, 0x7f8, v12
	v_lshlrev_b32_e32 v0, 3, v36
	global_load_b64 v[36:37], v2, s[8:9]
	v_lshlrev_b32_e32 v2, 3, v38
	global_load_b64 v[38:39], v6, s[10:11]
	v_lshlrev_b32_e32 v6, 3, v40
	s_clause 0x2
	global_load_b64 v[40:41], v0, s[10:11]
	global_load_b64 v[42:43], v2, s[10:11]
	global_load_b64 v[44:45], v6, s[10:11]
	ds_load_b128 v[6:9], v3 offset:32
	ds_load_b128 v[10:13], v3 offset:48
	s_waitcnt vmcnt(13)
	v_xor_b32_e32 v0, v15, v19
	v_xor_b32_e32 v2, v14, v18
	s_waitcnt vmcnt(12)
	v_xor_b32_e32 v14, v17, v21
	v_xor_b32_e32 v15, v16, v20
	s_waitcnt vmcnt(10)
	v_xor_b32_e32 v17, v22, v24
	v_xor_b32_e32 v16, v23, v25
	s_waitcnt vmcnt(8)
	v_xor_b32_e32 v19, v26, v28
	s_waitcnt vmcnt(7)
	v_xor_b32_e32 v0, v0, v31
	v_xor_b32_e32 v2, v2, v30
	v_xor_b32_e32 v18, v27, v29
	s_waitcnt vmcnt(6)
	v_xor_b32_e32 v14, v14, v33
	v_xor_b32_e32 v15, v15, v32
	s_waitcnt vmcnt(5)
	v_xor_b32_e32 v17, v17, v34
	v_xor_b32_e32 v16, v16, v35
	s_waitcnt vmcnt(4)
	v_xor_b32_e32 v19, v19, v36
	v_xor_b32_e32 v18, v18, v37
	s_waitcnt vmcnt(3)
	v_xor_b32_e32 v0, v0, v39
	v_xor_b32_e32 v2, v2, v38
	s_waitcnt vmcnt(2)
	v_xor_b32_e32 v14, v14, v41
	v_xor_b32_e32 v15, v15, v40
	s_waitcnt vmcnt(1)
	v_xor_b32_e32 v17, v17, v42
	s_waitcnt lgkmcnt(1)
	v_xor_b32_e32 v7, v0, v7
	v_xor_b32_e32 v6, v2, v6
	v_xor_b32_e32 v16, v16, v43
	s_waitcnt vmcnt(0)
	v_xor_b32_e32 v19, v19, v44
	v_xor_b32_e32 v18, v18, v45
	v_xor_b32_e32 v9, v14, v9
	v_xor_b32_e32 v8, v15, v8
	s_waitcnt lgkmcnt(0)
	v_xor_b32_e32 v10, v17, v10
	v_lshrrev_b64 v[14:15], 21, v[6:7]
	v_xor_b32_e32 v11, v16, v11
	v_xor_b32_e32 v12, v19, v12
	v_and_b32_e32 v36, 0xff, v6
	v_lshrrev_b32_e32 v30, 5, v6
	v_lshrrev_b32_e32 v6, 13, v6
	v_xor_b32_e32 v13, v18, v13
	v_lshrrev_b32_e32 v0, 13, v8
	v_lshrrev_b64 v[16:17], 21, v[8:9]
	v_lshrrev_b32_e32 v7, 13, v10
	v_lshrrev_b32_e32 v9, 5, v12
	v_lshrrev_b64 v[18:19], 21, v[10:11]
	v_and_b32_e32 v26, 0x7f8, v6
	v_and_b32_e32 v6, -8, v14
	v_and_b32_e32 v34, 0xff, v12
	v_lshrrev_b32_e32 v20, 13, v12
	v_and_b32_e32 v38, 0xff, v8
	v_lshrrev_b64 v[11:12], 21, v[12:13]
	v_lshrrev_b32_e32 v13, 5, v8
	v_and_b32_e32 v0, 0x7f8, v0
	v_and_b32_e32 v8, 0x7ff, v15
	v_lshrrev_b32_e32 v2, 5, v10
	v_and_b32_e32 v40, 0xff, v10
	v_and_b32_e32 v7, 0x7f8, v7
	v_and_b32_e32 v10, -8, v16
	v_and_b32_e32 v32, 0x7f8, v9
	v_and_b32_e32 v9, 0x7ff, v17
	v_add_co_u32 v6, s0, s4, v6
	v_and_b32_e32 v18, -8, v18
	s_clause 0x1
	global_load_b64 v[14:15], v0, s[6:7]
	global_load_b64 v[16:17], v7, s[6:7]
	v_add_co_ci_u32_e64 v7, s0, s5, v8, s0
	v_and_b32_e32 v19, 0x7ff, v19
	v_add_co_u32 v8, s0, s4, v10
	v_and_b32_e32 v22, 0x7f8, v20
	v_and_b32_e32 v20, -8, v11
	v_add_co_ci_u32_e64 v9, s0, s5, v9, s0
	v_add_co_u32 v10, s0, s4, v18
	v_and_b32_e32 v12, 0x7ff, v12
	v_and_b32_e32 v2, 0x7f8, v2
	v_add_co_ci_u32_e64 v11, s0, s5, v19, s0
	global_load_b64 v[18:19], v[6:7], off
	v_and_b32_e32 v0, 0x7f8, v30
	v_add_co_u32 v6, s0, s4, v20
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v7, s0, s5, v12, s0
	global_load_b64 v[20:21], v[8:9], off
	global_load_b64 v[22:23], v22, s[6:7]
	global_load_b64 v[24:25], v[10:11], off
	global_load_b64 v[26:27], v26, s[6:7]
	global_load_b64 v[28:29], v[6:7], off
	s_clause 0x1
	global_load_b64 v[30:31], v2, s[8:9]
	global_load_b64 v[32:33], v32, s[8:9]
	v_lshlrev_b32_e32 v6, 3, v34
	global_load_b64 v[34:35], v0, s[8:9]
	v_and_b32_e32 v2, 0x7f8, v13
	v_lshlrev_b32_e32 v0, 3, v36
	global_load_b64 v[36:37], v2, s[8:9]
	v_lshlrev_b32_e32 v2, 3, v38
	global_load_b64 v[38:39], v6, s[10:11]
	v_lshlrev_b32_e32 v6, 3, v40
	s_clause 0x2
	global_load_b64 v[40:41], v0, s[10:11]
	global_load_b64 v[42:43], v2, s[10:11]
	global_load_b64 v[44:45], v6, s[10:11]
	ds_load_b128 v[6:9], v3 offset:64
	ds_load_b128 v[10:13], v3 offset:80
	s_waitcnt vmcnt(13)
	v_xor_b32_e32 v0, v15, v19
	v_xor_b32_e32 v2, v14, v18
	s_waitcnt vmcnt(12)
	v_xor_b32_e32 v14, v17, v21
	v_xor_b32_e32 v15, v16, v20
	s_waitcnt vmcnt(10)
	v_xor_b32_e32 v17, v22, v24
	v_xor_b32_e32 v16, v23, v25
	s_waitcnt vmcnt(8)
	v_xor_b32_e32 v19, v26, v28
	s_waitcnt vmcnt(7)
	v_xor_b32_e32 v0, v0, v31
	v_xor_b32_e32 v2, v2, v30
	v_xor_b32_e32 v18, v27, v29
	s_waitcnt vmcnt(6)
	v_xor_b32_e32 v14, v14, v33
	v_xor_b32_e32 v15, v15, v32
	s_waitcnt vmcnt(5)
	v_xor_b32_e32 v17, v17, v34
	v_xor_b32_e32 v16, v16, v35
	s_waitcnt vmcnt(4)
	v_xor_b32_e32 v19, v19, v36
	v_xor_b32_e32 v18, v18, v37
	s_waitcnt vmcnt(3)
	v_xor_b32_e32 v0, v0, v39
	v_xor_b32_e32 v2, v2, v38
	s_waitcnt vmcnt(2)
	v_xor_b32_e32 v14, v14, v41
	v_xor_b32_e32 v15, v15, v40
	s_waitcnt vmcnt(1)
	v_xor_b32_e32 v17, v17, v42
	s_waitcnt lgkmcnt(1)
	v_xor_b32_e32 v7, v0, v7
	v_xor_b32_e32 v6, v2, v6
	v_xor_b32_e32 v16, v16, v43
	s_waitcnt vmcnt(0)
	v_xor_b32_e32 v19, v19, v44
	v_xor_b32_e32 v18, v18, v45
	v_xor_b32_e32 v9, v14, v9
	v_xor_b32_e32 v8, v15, v8
	s_waitcnt lgkmcnt(0)
	v_xor_b32_e32 v10, v17, v10
	v_lshrrev_b64 v[14:15], 21, v[6:7]
	v_xor_b32_e32 v11, v16, v11
	v_xor_b32_e32 v12, v19, v12
	v_and_b32_e32 v36, 0xff, v6
	v_lshrrev_b32_e32 v30, 5, v6
	v_lshrrev_b32_e32 v6, 13, v6
	v_xor_b32_e32 v13, v18, v13
	v_lshrrev_b32_e32 v0, 13, v8
	v_lshrrev_b64 v[16:17], 21, v[8:9]
	v_lshrrev_b32_e32 v7, 13, v10
	v_lshrrev_b32_e32 v9, 5, v12
	v_lshrrev_b64 v[18:19], 21, v[10:11]
	v_and_b32_e32 v26, 0x7f8, v6
	v_and_b32_e32 v6, -8, v14
	v_and_b32_e32 v34, 0xff, v12
	v_lshrrev_b32_e32 v20, 13, v12
	v_and_b32_e32 v38, 0xff, v8
	v_lshrrev_b64 v[11:12], 21, v[12:13]
	v_lshrrev_b32_e32 v13, 5, v8
	v_and_b32_e32 v0, 0x7f8, v0
	v_and_b32_e32 v8, 0x7ff, v15
	v_lshrrev_b32_e32 v2, 5, v10
	v_and_b32_e32 v40, 0xff, v10
	v_and_b32_e32 v7, 0x7f8, v7
	v_and_b32_e32 v10, -8, v16
	v_and_b32_e32 v32, 0x7f8, v9
	v_and_b32_e32 v9, 0x7ff, v17
	v_add_co_u32 v6, s0, s4, v6
	v_and_b32_e32 v18, -8, v18
	s_clause 0x1
	global_load_b64 v[14:15], v0, s[6:7]
	global_load_b64 v[16:17], v7, s[6:7]
	v_add_co_ci_u32_e64 v7, s0, s5, v8, s0
	v_and_b32_e32 v19, 0x7ff, v19
	v_add_co_u32 v8, s0, s4, v10
	v_and_b32_e32 v22, 0x7f8, v20
	v_and_b32_e32 v20, -8, v11
	v_add_co_ci_u32_e64 v9, s0, s5, v9, s0
	v_add_co_u32 v10, s0, s4, v18
	v_and_b32_e32 v12, 0x7ff, v12
	v_and_b32_e32 v2, 0x7f8, v2
	v_add_co_ci_u32_e64 v11, s0, s5, v19, s0
	global_load_b64 v[18:19], v[6:7], off
	v_and_b32_e32 v0, 0x7f8, v30
	v_add_co_u32 v6, s0, s4, v20
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v7, s0, s5, v12, s0
	global_load_b64 v[20:21], v[8:9], off
	global_load_b64 v[22:23], v22, s[6:7]
	global_load_b64 v[24:25], v[10:11], off
	global_load_b64 v[26:27], v26, s[6:7]
	global_load_b64 v[28:29], v[6:7], off
	s_clause 0x1
	global_load_b64 v[30:31], v2, s[8:9]
	global_load_b64 v[32:33], v32, s[8:9]
	v_lshlrev_b32_e32 v6, 3, v34
	global_load_b64 v[34:35], v0, s[8:9]
	v_and_b32_e32 v2, 0x7f8, v13
	v_lshlrev_b32_e32 v0, 3, v36
	global_load_b64 v[36:37], v2, s[8:9]
	v_lshlrev_b32_e32 v2, 3, v38
	global_load_b64 v[38:39], v6, s[10:11]
	v_lshlrev_b32_e32 v6, 3, v40
	s_clause 0x2
	global_load_b64 v[40:41], v0, s[10:11]
	global_load_b64 v[42:43], v2, s[10:11]
	global_load_b64 v[44:45], v6, s[10:11]
	ds_load_b128 v[6:9], v3 offset:96
	ds_load_b128 v[10:13], v3 offset:112
	s_waitcnt vmcnt(13)
	v_xor_b32_e32 v0, v15, v19
	v_xor_b32_e32 v2, v14, v18
	s_waitcnt vmcnt(12)
	v_xor_b32_e32 v14, v17, v21
	v_xor_b32_e32 v15, v16, v20
	s_waitcnt vmcnt(10)
	v_xor_b32_e32 v17, v22, v24
	v_xor_b32_e32 v16, v23, v25
	s_waitcnt vmcnt(8)
	v_xor_b32_e32 v19, v26, v28
	s_waitcnt vmcnt(7)
	v_xor_b32_e32 v0, v0, v31
	v_xor_b32_e32 v2, v2, v30
	v_xor_b32_e32 v18, v27, v29
	s_waitcnt vmcnt(6)
	v_xor_b32_e32 v14, v14, v33
	v_xor_b32_e32 v15, v15, v32
	s_waitcnt vmcnt(5)
	v_xor_b32_e32 v17, v17, v34
	v_xor_b32_e32 v16, v16, v35
	s_waitcnt vmcnt(4)
	v_xor_b32_e32 v19, v19, v36
	v_xor_b32_e32 v18, v18, v37
	s_waitcnt vmcnt(3)
	v_xor_b32_e32 v0, v0, v39
	v_xor_b32_e32 v2, v2, v38
	s_waitcnt vmcnt(2)
	v_xor_b32_e32 v14, v14, v41
	v_xor_b32_e32 v15, v15, v40
	s_waitcnt vmcnt(1)
	v_xor_b32_e32 v17, v17, v42
	s_waitcnt lgkmcnt(1)
	v_xor_b32_e32 v7, v0, v7
	v_xor_b32_e32 v6, v2, v6
	v_xor_b32_e32 v16, v16, v43
	s_waitcnt vmcnt(0)
	v_xor_b32_e32 v19, v19, v44
	v_xor_b32_e32 v18, v18, v45
	v_xor_b32_e32 v9, v14, v9
	v_xor_b32_e32 v8, v15, v8
	s_waitcnt lgkmcnt(0)
	v_xor_b32_e32 v10, v17, v10
	v_lshrrev_b64 v[14:15], 21, v[6:7]
	v_xor_b32_e32 v11, v16, v11
	v_xor_b32_e32 v12, v19, v12
	v_and_b32_e32 v36, 0xff, v6
	v_lshrrev_b32_e32 v30, 5, v6
	v_lshrrev_b32_e32 v6, 13, v6
	v_xor_b32_e32 v13, v18, v13
	v_lshrrev_b32_e32 v0, 13, v8
	v_lshrrev_b64 v[16:17], 21, v[8:9]
	v_lshrrev_b32_e32 v7, 13, v10
	v_lshrrev_b32_e32 v9, 5, v12
	v_lshrrev_b64 v[18:19], 21, v[10:11]
	v_and_b32_e32 v26, 0x7f8, v6
	v_and_b32_e32 v6, -8, v14
	v_and_b32_e32 v34, 0xff, v12
	v_lshrrev_b32_e32 v20, 13, v12
	v_and_b32_e32 v38, 0xff, v8
	v_lshrrev_b64 v[11:12], 21, v[12:13]
	v_lshrrev_b32_e32 v13, 5, v8
	v_and_b32_e32 v0, 0x7f8, v0
	v_and_b32_e32 v8, 0x7ff, v15
	v_lshrrev_b32_e32 v2, 5, v10
	v_and_b32_e32 v40, 0xff, v10
	v_and_b32_e32 v7, 0x7f8, v7
	v_and_b32_e32 v10, -8, v16
	v_and_b32_e32 v32, 0x7f8, v9
	v_and_b32_e32 v9, 0x7ff, v17
	v_add_co_u32 v6, s0, s4, v6
	v_and_b32_e32 v18, -8, v18
	s_clause 0x1
	global_load_b64 v[14:15], v0, s[6:7]
	global_load_b64 v[16:17], v7, s[6:7]
	v_add_co_ci_u32_e64 v7, s0, s5, v8, s0
	v_and_b32_e32 v19, 0x7ff, v19
	v_add_co_u32 v8, s0, s4, v10
	v_and_b32_e32 v22, 0x7f8, v20
	v_and_b32_e32 v20, -8, v11
	v_add_co_ci_u32_e64 v9, s0, s5, v9, s0
	v_add_co_u32 v10, s0, s4, v18
	v_and_b32_e32 v12, 0x7ff, v12
	v_and_b32_e32 v2, 0x7f8, v2
	v_add_co_ci_u32_e64 v11, s0, s5, v19, s0
	global_load_b64 v[18:19], v[6:7], off
	v_and_b32_e32 v0, 0x7f8, v30
	v_add_co_u32 v6, s0, s4, v20
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v7, s0, s5, v12, s0
	global_load_b64 v[20:21], v[8:9], off
	global_load_b64 v[22:23], v22, s[6:7]
	global_load_b64 v[24:25], v[10:11], off
	global_load_b64 v[26:27], v26, s[6:7]
	global_load_b64 v[28:29], v[6:7], off
	s_clause 0x1
	global_load_b64 v[30:31], v2, s[8:9]
	global_load_b64 v[32:33], v32, s[8:9]
	v_lshlrev_b32_e32 v6, 3, v34
	global_load_b64 v[34:35], v0, s[8:9]
	v_and_b32_e32 v2, 0x7f8, v13
	v_lshlrev_b32_e32 v0, 3, v36
	global_load_b64 v[36:37], v2, s[8:9]
	v_lshlrev_b32_e32 v2, 3, v38
	global_load_b64 v[38:39], v6, s[10:11]
	v_lshlrev_b32_e32 v6, 3, v40
	s_clause 0x2
	global_load_b64 v[40:41], v0, s[10:11]
	global_load_b64 v[42:43], v2, s[10:11]
	global_load_b64 v[44:45], v6, s[10:11]
	ds_load_b128 v[6:9], v3 offset:128
	ds_load_b128 v[10:13], v3 offset:144
	s_waitcnt vmcnt(13)
	v_xor_b32_e32 v0, v15, v19
	v_xor_b32_e32 v2, v14, v18
	s_waitcnt vmcnt(12)
	v_xor_b32_e32 v14, v17, v21
	v_xor_b32_e32 v15, v16, v20
	s_waitcnt vmcnt(10)
	v_xor_b32_e32 v17, v22, v24
	v_xor_b32_e32 v16, v23, v25
	s_waitcnt vmcnt(8)
	v_xor_b32_e32 v19, v26, v28
	s_waitcnt vmcnt(7)
	v_xor_b32_e32 v0, v0, v31
	v_xor_b32_e32 v2, v2, v30
	v_xor_b32_e32 v18, v27, v29
	s_waitcnt vmcnt(6)
	v_xor_b32_e32 v14, v14, v33
	v_xor_b32_e32 v15, v15, v32
	s_waitcnt vmcnt(5)
	v_xor_b32_e32 v17, v17, v34
	v_xor_b32_e32 v16, v16, v35
	s_waitcnt vmcnt(4)
	v_xor_b32_e32 v19, v19, v36
	v_xor_b32_e32 v18, v18, v37
	s_waitcnt vmcnt(3)
	v_xor_b32_e32 v0, v0, v39
	v_xor_b32_e32 v2, v2, v38
	s_waitcnt vmcnt(2)
	v_xor_b32_e32 v14, v14, v41
	v_xor_b32_e32 v15, v15, v40
	s_waitcnt vmcnt(1)
	v_xor_b32_e32 v17, v17, v42
	s_waitcnt lgkmcnt(1)
	v_xor_b32_e32 v7, v0, v7
	v_xor_b32_e32 v6, v2, v6
	v_xor_b32_e32 v16, v16, v43
	s_waitcnt vmcnt(0)
	v_xor_b32_e32 v19, v19, v44
	v_xor_b32_e32 v18, v18, v45
	v_xor_b32_e32 v9, v14, v9
	v_xor_b32_e32 v8, v15, v8
	s_waitcnt lgkmcnt(0)
	v_xor_b32_e32 v10, v17, v10
	v_lshrrev_b64 v[14:15], 21, v[6:7]
	v_xor_b32_e32 v11, v16, v11
	v_xor_b32_e32 v12, v19, v12
	v_and_b32_e32 v36, 0xff, v6
	v_lshrrev_b32_e32 v30, 5, v6
	v_lshrrev_b32_e32 v6, 13, v6
	v_xor_b32_e32 v13, v18, v13
	v_lshrrev_b32_e32 v0, 13, v8
	v_lshrrev_b64 v[16:17], 21, v[8:9]
	v_lshrrev_b32_e32 v7, 13, v10
	v_lshrrev_b32_e32 v9, 5, v12
	v_lshrrev_b64 v[18:19], 21, v[10:11]
	v_and_b32_e32 v26, 0x7f8, v6
	v_and_b32_e32 v6, -8, v14
	v_and_b32_e32 v34, 0xff, v12
	v_lshrrev_b32_e32 v20, 13, v12
	v_and_b32_e32 v38, 0xff, v8
	v_lshrrev_b64 v[11:12], 21, v[12:13]
	v_lshrrev_b32_e32 v13, 5, v8
	v_and_b32_e32 v0, 0x7f8, v0
	v_and_b32_e32 v8, 0x7ff, v15
	v_lshrrev_b32_e32 v2, 5, v10
	v_and_b32_e32 v40, 0xff, v10
	v_and_b32_e32 v7, 0x7f8, v7
	v_and_b32_e32 v10, -8, v16
	v_and_b32_e32 v32, 0x7f8, v9
	v_and_b32_e32 v9, 0x7ff, v17
	v_add_co_u32 v6, s0, s4, v6
	v_and_b32_e32 v18, -8, v18
	s_clause 0x1
	global_load_b64 v[14:15], v0, s[6:7]
	global_load_b64 v[16:17], v7, s[6:7]
	v_add_co_ci_u32_e64 v7, s0, s5, v8, s0
	v_and_b32_e32 v19, 0x7ff, v19
	v_add_co_u32 v8, s0, s4, v10
	v_and_b32_e32 v22, 0x7f8, v20
	v_and_b32_e32 v20, -8, v11
	v_add_co_ci_u32_e64 v9, s0, s5, v9, s0
	v_add_co_u32 v10, s0, s4, v18
	v_and_b32_e32 v12, 0x7ff, v12
	v_and_b32_e32 v2, 0x7f8, v2
	v_add_co_ci_u32_e64 v11, s0, s5, v19, s0
	global_load_b64 v[18:19], v[6:7], off
	v_and_b32_e32 v0, 0x7f8, v30
	v_add_co_u32 v6, s0, s4, v20
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v7, s0, s5, v12, s0
	global_load_b64 v[20:21], v[8:9], off
	global_load_b64 v[22:23], v22, s[6:7]
	global_load_b64 v[24:25], v[10:11], off
	global_load_b64 v[26:27], v26, s[6:7]
	global_load_b64 v[28:29], v[6:7], off
	s_clause 0x1
	global_load_b64 v[30:31], v2, s[8:9]
	global_load_b64 v[32:33], v32, s[8:9]
	v_lshlrev_b32_e32 v6, 3, v34
	global_load_b64 v[34:35], v0, s[8:9]
	v_and_b32_e32 v2, 0x7f8, v13
	v_lshlrev_b32_e32 v0, 3, v36
	global_load_b64 v[36:37], v2, s[8:9]
	v_lshlrev_b32_e32 v2, 3, v38
	global_load_b64 v[38:39], v6, s[10:11]
	v_lshlrev_b32_e32 v6, 3, v40
	s_clause 0x2
	global_load_b64 v[40:41], v0, s[10:11]
	global_load_b64 v[42:43], v2, s[10:11]
	global_load_b64 v[44:45], v6, s[10:11]
	ds_load_b128 v[6:9], v3 offset:160
	ds_load_b128 v[10:13], v3 offset:176
	s_waitcnt vmcnt(13)
	v_xor_b32_e32 v0, v15, v19
	v_xor_b32_e32 v2, v14, v18
	s_waitcnt vmcnt(12)
	v_xor_b32_e32 v14, v17, v21
	v_xor_b32_e32 v15, v16, v20
	s_waitcnt vmcnt(10)
	v_xor_b32_e32 v17, v22, v24
	v_xor_b32_e32 v16, v23, v25
	s_waitcnt vmcnt(8)
	v_xor_b32_e32 v19, v26, v28
	s_waitcnt vmcnt(7)
	v_xor_b32_e32 v0, v0, v31
	v_xor_b32_e32 v2, v2, v30
	v_xor_b32_e32 v18, v27, v29
	s_waitcnt vmcnt(6)
	v_xor_b32_e32 v14, v14, v33
	v_xor_b32_e32 v15, v15, v32
	s_waitcnt vmcnt(5)
	v_xor_b32_e32 v17, v17, v34
	v_xor_b32_e32 v16, v16, v35
	s_waitcnt vmcnt(4)
	v_xor_b32_e32 v19, v19, v36
	v_xor_b32_e32 v18, v18, v37
	s_waitcnt vmcnt(3)
	v_xor_b32_e32 v0, v0, v39
	v_xor_b32_e32 v2, v2, v38
	s_waitcnt vmcnt(2)
	v_xor_b32_e32 v14, v14, v41
	v_xor_b32_e32 v15, v15, v40
	s_waitcnt vmcnt(1)
	v_xor_b32_e32 v17, v17, v42
	s_waitcnt lgkmcnt(1)
	v_xor_b32_e32 v7, v0, v7
	v_xor_b32_e32 v6, v2, v6
	v_xor_b32_e32 v16, v16, v43
	s_waitcnt vmcnt(0)
	v_xor_b32_e32 v19, v19, v44
	v_xor_b32_e32 v18, v18, v45
	v_xor_b32_e32 v9, v14, v9
	v_xor_b32_e32 v8, v15, v8
	s_waitcnt lgkmcnt(0)
	v_xor_b32_e32 v10, v17, v10
	v_lshrrev_b64 v[14:15], 21, v[6:7]
	v_xor_b32_e32 v11, v16, v11
	v_xor_b32_e32 v12, v19, v12
	v_and_b32_e32 v36, 0xff, v6
	v_lshrrev_b32_e32 v30, 5, v6
	v_lshrrev_b32_e32 v6, 13, v6
	v_xor_b32_e32 v13, v18, v13
	v_lshrrev_b32_e32 v0, 13, v8
	v_lshrrev_b64 v[16:17], 21, v[8:9]
	v_lshrrev_b32_e32 v7, 13, v10
	v_lshrrev_b32_e32 v9, 5, v12
	v_lshrrev_b64 v[18:19], 21, v[10:11]
	v_and_b32_e32 v26, 0x7f8, v6
	v_and_b32_e32 v6, -8, v14
	v_and_b32_e32 v34, 0xff, v12
	v_lshrrev_b32_e32 v20, 13, v12
	v_and_b32_e32 v38, 0xff, v8
	v_lshrrev_b64 v[11:12], 21, v[12:13]
	v_lshrrev_b32_e32 v13, 5, v8
	v_and_b32_e32 v0, 0x7f8, v0
	v_and_b32_e32 v8, 0x7ff, v15
	v_lshrrev_b32_e32 v2, 5, v10
	v_and_b32_e32 v40, 0xff, v10
	v_and_b32_e32 v7, 0x7f8, v7
	v_and_b32_e32 v10, -8, v16
	v_and_b32_e32 v32, 0x7f8, v9
	v_and_b32_e32 v9, 0x7ff, v17
	v_add_co_u32 v6, s0, s4, v6
	v_and_b32_e32 v18, -8, v18
	s_clause 0x1
	global_load_b64 v[14:15], v0, s[6:7]
	global_load_b64 v[16:17], v7, s[6:7]
	v_add_co_ci_u32_e64 v7, s0, s5, v8, s0
	v_and_b32_e32 v19, 0x7ff, v19
	v_add_co_u32 v8, s0, s4, v10
	v_and_b32_e32 v22, 0x7f8, v20
	v_and_b32_e32 v20, -8, v11
	v_add_co_ci_u32_e64 v9, s0, s5, v9, s0
	v_add_co_u32 v10, s0, s4, v18
	v_and_b32_e32 v12, 0x7ff, v12
	v_and_b32_e32 v2, 0x7f8, v2
	v_add_co_ci_u32_e64 v11, s0, s5, v19, s0
	global_load_b64 v[18:19], v[6:7], off
	v_and_b32_e32 v0, 0x7f8, v30
	v_add_co_u32 v6, s0, s4, v20
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v7, s0, s5, v12, s0
	global_load_b64 v[20:21], v[8:9], off
	global_load_b64 v[22:23], v22, s[6:7]
	global_load_b64 v[24:25], v[10:11], off
	global_load_b64 v[26:27], v26, s[6:7]
	global_load_b64 v[28:29], v[6:7], off
	s_clause 0x1
	global_load_b64 v[30:31], v2, s[8:9]
	global_load_b64 v[32:33], v32, s[8:9]
	v_lshlrev_b32_e32 v6, 3, v34
	global_load_b64 v[34:35], v0, s[8:9]
	v_and_b32_e32 v2, 0x7f8, v13
	v_lshlrev_b32_e32 v0, 3, v36
	global_load_b64 v[36:37], v2, s[8:9]
	v_lshlrev_b32_e32 v2, 3, v38
	global_load_b64 v[38:39], v6, s[10:11]
	v_lshlrev_b32_e32 v6, 3, v40
	s_clause 0x2
	global_load_b64 v[40:41], v0, s[10:11]
	global_load_b64 v[42:43], v2, s[10:11]
	global_load_b64 v[44:45], v6, s[10:11]
	ds_load_b128 v[6:9], v3 offset:192
	ds_load_b128 v[10:13], v3 offset:208
	s_waitcnt vmcnt(13)
	v_xor_b32_e32 v0, v15, v19
	v_xor_b32_e32 v2, v14, v18
	s_waitcnt vmcnt(12)
	v_xor_b32_e32 v14, v17, v21
	v_xor_b32_e32 v15, v16, v20
	s_waitcnt vmcnt(10)
	v_xor_b32_e32 v17, v22, v24
	v_xor_b32_e32 v16, v23, v25
	s_waitcnt vmcnt(8)
	v_xor_b32_e32 v19, v26, v28
	s_waitcnt vmcnt(7)
	v_xor_b32_e32 v0, v0, v31
	v_xor_b32_e32 v2, v2, v30
	v_xor_b32_e32 v18, v27, v29
	s_waitcnt vmcnt(6)
	v_xor_b32_e32 v14, v14, v33
	v_xor_b32_e32 v15, v15, v32
	s_waitcnt vmcnt(5)
	v_xor_b32_e32 v17, v17, v34
	v_xor_b32_e32 v16, v16, v35
	s_waitcnt vmcnt(4)
	v_xor_b32_e32 v19, v19, v36
	v_xor_b32_e32 v18, v18, v37
	s_waitcnt vmcnt(3)
	v_xor_b32_e32 v0, v0, v39
	v_xor_b32_e32 v2, v2, v38
	s_waitcnt vmcnt(2)
	v_xor_b32_e32 v14, v14, v41
	v_xor_b32_e32 v15, v15, v40
	s_waitcnt vmcnt(1)
	v_xor_b32_e32 v17, v17, v42
	s_waitcnt lgkmcnt(1)
	v_xor_b32_e32 v7, v0, v7
	v_xor_b32_e32 v6, v2, v6
	v_xor_b32_e32 v16, v16, v43
	s_waitcnt vmcnt(0)
	v_xor_b32_e32 v19, v19, v44
	v_xor_b32_e32 v18, v18, v45
	v_xor_b32_e32 v9, v14, v9
	v_xor_b32_e32 v8, v15, v8
	s_waitcnt lgkmcnt(0)
	v_xor_b32_e32 v10, v17, v10
	v_lshrrev_b64 v[14:15], 21, v[6:7]
	v_xor_b32_e32 v11, v16, v11
	v_xor_b32_e32 v12, v19, v12
	v_and_b32_e32 v36, 0xff, v6
	v_lshrrev_b32_e32 v30, 5, v6
	v_lshrrev_b32_e32 v6, 13, v6
	v_xor_b32_e32 v13, v18, v13
	v_lshrrev_b32_e32 v0, 13, v8
	v_lshrrev_b64 v[16:17], 21, v[8:9]
	v_lshrrev_b32_e32 v7, 13, v10
	v_lshrrev_b32_e32 v9, 5, v12
	v_lshrrev_b64 v[18:19], 21, v[10:11]
	v_and_b32_e32 v26, 0x7f8, v6
	v_and_b32_e32 v6, -8, v14
	v_and_b32_e32 v34, 0xff, v12
	v_lshrrev_b32_e32 v20, 13, v12
	v_and_b32_e32 v38, 0xff, v8
	v_lshrrev_b64 v[11:12], 21, v[12:13]
	v_lshrrev_b32_e32 v13, 5, v8
	v_and_b32_e32 v0, 0x7f8, v0
	v_and_b32_e32 v8, 0x7ff, v15
	v_lshrrev_b32_e32 v2, 5, v10
	v_and_b32_e32 v40, 0xff, v10
	v_and_b32_e32 v7, 0x7f8, v7
	v_and_b32_e32 v10, -8, v16
	v_and_b32_e32 v32, 0x7f8, v9
	v_and_b32_e32 v9, 0x7ff, v17
	v_add_co_u32 v6, s0, s4, v6
	v_and_b32_e32 v18, -8, v18
	s_clause 0x1
	global_load_b64 v[14:15], v0, s[6:7]
	global_load_b64 v[16:17], v7, s[6:7]
	v_add_co_ci_u32_e64 v7, s0, s5, v8, s0
	v_and_b32_e32 v19, 0x7ff, v19
	v_add_co_u32 v8, s0, s4, v10
	v_and_b32_e32 v22, 0x7f8, v20
	v_and_b32_e32 v20, -8, v11
	v_add_co_ci_u32_e64 v9, s0, s5, v9, s0
	v_add_co_u32 v10, s0, s4, v18
	v_and_b32_e32 v12, 0x7ff, v12
	v_and_b32_e32 v2, 0x7f8, v2
	v_add_co_ci_u32_e64 v11, s0, s5, v19, s0
	global_load_b64 v[18:19], v[6:7], off
	v_and_b32_e32 v0, 0x7f8, v30
	v_add_co_u32 v6, s0, s4, v20
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v7, s0, s5, v12, s0
	global_load_b64 v[20:21], v[8:9], off
	global_load_b64 v[22:23], v22, s[6:7]
	global_load_b64 v[24:25], v[10:11], off
	global_load_b64 v[26:27], v26, s[6:7]
	global_load_b64 v[28:29], v[6:7], off
	s_clause 0x1
	global_load_b64 v[30:31], v2, s[8:9]
	global_load_b64 v[32:33], v32, s[8:9]
	v_lshlrev_b32_e32 v6, 3, v34
	global_load_b64 v[34:35], v0, s[8:9]
	v_and_b32_e32 v2, 0x7f8, v13
	v_lshlrev_b32_e32 v0, 3, v36
	global_load_b64 v[36:37], v2, s[8:9]
	v_lshlrev_b32_e32 v2, 3, v38
	global_load_b64 v[38:39], v6, s[10:11]
	v_lshlrev_b32_e32 v6, 3, v40
	s_clause 0x2
	global_load_b64 v[40:41], v0, s[10:11]
	global_load_b64 v[42:43], v2, s[10:11]
	global_load_b64 v[44:45], v6, s[10:11]
	ds_load_b128 v[6:9], v3 offset:224
	ds_load_b128 v[10:13], v3 offset:240
	s_waitcnt vmcnt(13)
	v_xor_b32_e32 v0, v15, v19
	v_xor_b32_e32 v2, v14, v18
	s_waitcnt vmcnt(12)
	v_xor_b32_e32 v14, v17, v21
	v_xor_b32_e32 v15, v16, v20
	s_waitcnt vmcnt(10)
	v_xor_b32_e32 v17, v22, v24
	v_xor_b32_e32 v16, v23, v25
	s_waitcnt vmcnt(8)
	v_xor_b32_e32 v19, v26, v28
	s_waitcnt vmcnt(7)
	v_xor_b32_e32 v0, v0, v31
	v_xor_b32_e32 v2, v2, v30
	v_xor_b32_e32 v18, v27, v29
	s_waitcnt vmcnt(6)
	v_xor_b32_e32 v14, v14, v33
	v_xor_b32_e32 v15, v15, v32
	s_waitcnt vmcnt(5)
	v_xor_b32_e32 v17, v17, v34
	v_xor_b32_e32 v16, v16, v35
	s_waitcnt vmcnt(4)
	v_xor_b32_e32 v19, v19, v36
	v_xor_b32_e32 v18, v18, v37
	s_waitcnt vmcnt(3)
	v_xor_b32_e32 v0, v0, v39
	v_xor_b32_e32 v2, v2, v38
	s_waitcnt vmcnt(2)
	v_xor_b32_e32 v14, v14, v41
	v_xor_b32_e32 v15, v15, v40
	s_waitcnt vmcnt(1)
	v_xor_b32_e32 v17, v17, v42
	s_waitcnt lgkmcnt(1)
	v_xor_b32_e32 v7, v0, v7
	v_xor_b32_e32 v6, v2, v6
	v_xor_b32_e32 v16, v16, v43
	s_waitcnt vmcnt(0)
	v_xor_b32_e32 v19, v19, v44
	v_xor_b32_e32 v18, v18, v45
	v_xor_b32_e32 v9, v14, v9
	v_xor_b32_e32 v8, v15, v8
	s_waitcnt lgkmcnt(0)
	v_xor_b32_e32 v10, v17, v10
	v_lshrrev_b64 v[14:15], 21, v[6:7]
	v_xor_b32_e32 v11, v16, v11
	v_xor_b32_e32 v12, v19, v12
	v_and_b32_e32 v36, 0xff, v6
	v_lshrrev_b32_e32 v30, 5, v6
	v_lshrrev_b32_e32 v6, 13, v6
	v_xor_b32_e32 v13, v18, v13
	v_lshrrev_b32_e32 v0, 13, v8
	v_lshrrev_b64 v[16:17], 21, v[8:9]
	v_lshrrev_b32_e32 v7, 13, v10
	v_lshrrev_b32_e32 v9, 5, v12
	v_lshrrev_b64 v[18:19], 21, v[10:11]
	v_and_b32_e32 v26, 0x7f8, v6
	v_and_b32_e32 v6, -8, v14
	v_and_b32_e32 v34, 0xff, v12
	v_lshrrev_b32_e32 v20, 13, v12
	v_and_b32_e32 v38, 0xff, v8
	v_lshrrev_b64 v[11:12], 21, v[12:13]
	v_lshrrev_b32_e32 v13, 5, v8
	v_and_b32_e32 v0, 0x7f8, v0
	v_and_b32_e32 v8, 0x7ff, v15
	v_lshrrev_b32_e32 v2, 5, v10
	v_and_b32_e32 v40, 0xff, v10
	v_and_b32_e32 v7, 0x7f8, v7
	v_and_b32_e32 v10, -8, v16
	v_and_b32_e32 v32, 0x7f8, v9
	v_and_b32_e32 v9, 0x7ff, v17
	v_add_co_u32 v6, s0, s4, v6
	v_and_b32_e32 v18, -8, v18
	s_clause 0x1
	global_load_b64 v[14:15], v0, s[6:7]
	global_load_b64 v[16:17], v7, s[6:7]
	v_add_co_ci_u32_e64 v7, s0, s5, v8, s0
	v_and_b32_e32 v19, 0x7ff, v19
	v_add_co_u32 v8, s0, s4, v10
	v_and_b32_e32 v22, 0x7f8, v20
	v_and_b32_e32 v20, -8, v11
	v_add_co_ci_u32_e64 v9, s0, s5, v9, s0
	v_add_co_u32 v10, s0, s4, v18
	v_and_b32_e32 v12, 0x7ff, v12
	v_and_b32_e32 v2, 0x7f8, v2
	v_add_co_ci_u32_e64 v11, s0, s5, v19, s0
	global_load_b64 v[18:19], v[6:7], off
	v_and_b32_e32 v0, 0x7f8, v30
	v_add_co_u32 v6, s0, s4, v20
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v7, s0, s5, v12, s0
	global_load_b64 v[20:21], v[8:9], off
	global_load_b64 v[22:23], v22, s[6:7]
	global_load_b64 v[24:25], v[10:11], off
	global_load_b64 v[26:27], v26, s[6:7]
	global_load_b64 v[28:29], v[6:7], off
	s_clause 0x1
	global_load_b64 v[30:31], v2, s[8:9]
	global_load_b64 v[32:33], v32, s[8:9]
	v_lshlrev_b32_e32 v6, 3, v34
	global_load_b64 v[34:35], v0, s[8:9]
	v_and_b32_e32 v2, 0x7f8, v13
	v_lshlrev_b32_e32 v0, 3, v36
	global_load_b64 v[36:37], v2, s[8:9]
	v_lshlrev_b32_e32 v2, 3, v38
	global_load_b64 v[38:39], v6, s[10:11]
	v_lshlrev_b32_e32 v6, 3, v40
	s_clause 0x2
	global_load_b64 v[40:41], v0, s[10:11]
	global_load_b64 v[42:43], v2, s[10:11]
	global_load_b64 v[44:45], v6, s[10:11]
	ds_load_b128 v[6:9], v3 offset:256
	ds_load_b128 v[10:13], v3 offset:272
	s_waitcnt vmcnt(13)
	v_xor_b32_e32 v0, v15, v19
	v_xor_b32_e32 v2, v14, v18
	s_waitcnt vmcnt(12)
	v_xor_b32_e32 v14, v17, v21
	v_xor_b32_e32 v15, v16, v20
	s_waitcnt vmcnt(10)
	v_xor_b32_e32 v17, v22, v24
	v_xor_b32_e32 v16, v23, v25
	s_waitcnt vmcnt(8)
	v_xor_b32_e32 v19, v26, v28
	s_waitcnt vmcnt(7)
	v_xor_b32_e32 v0, v0, v31
	v_xor_b32_e32 v2, v2, v30
	v_xor_b32_e32 v18, v27, v29
	s_waitcnt vmcnt(6)
	v_xor_b32_e32 v14, v14, v33
	v_xor_b32_e32 v15, v15, v32
	s_waitcnt vmcnt(5)
	v_xor_b32_e32 v17, v17, v34
	v_xor_b32_e32 v16, v16, v35
	s_waitcnt vmcnt(4)
	v_xor_b32_e32 v19, v19, v36
	v_xor_b32_e32 v18, v18, v37
	s_waitcnt vmcnt(3)
	v_xor_b32_e32 v0, v0, v39
	v_xor_b32_e32 v2, v2, v38
	s_waitcnt vmcnt(2)
	v_xor_b32_e32 v14, v14, v41
	v_xor_b32_e32 v15, v15, v40
	s_waitcnt vmcnt(1)
	v_xor_b32_e32 v17, v17, v42
	s_waitcnt lgkmcnt(1)
	v_xor_b32_e32 v7, v0, v7
	v_xor_b32_e32 v6, v2, v6
	v_xor_b32_e32 v16, v16, v43
	s_waitcnt vmcnt(0)
	v_xor_b32_e32 v19, v19, v44
	v_xor_b32_e32 v18, v18, v45
	v_xor_b32_e32 v9, v14, v9
	v_xor_b32_e32 v8, v15, v8
	s_waitcnt lgkmcnt(0)
	v_xor_b32_e32 v10, v17, v10
	v_lshrrev_b64 v[14:15], 21, v[6:7]
	v_xor_b32_e32 v11, v16, v11
	v_xor_b32_e32 v12, v19, v12
	v_and_b32_e32 v36, 0xff, v6
	v_lshrrev_b32_e32 v30, 5, v6
	v_lshrrev_b32_e32 v6, 13, v6
	v_xor_b32_e32 v13, v18, v13
	v_lshrrev_b32_e32 v0, 13, v8
	v_lshrrev_b64 v[16:17], 21, v[8:9]
	v_lshrrev_b32_e32 v7, 13, v10
	v_lshrrev_b32_e32 v9, 5, v12
	v_lshrrev_b64 v[18:19], 21, v[10:11]
	v_and_b32_e32 v26, 0x7f8, v6
	v_and_b32_e32 v6, -8, v14
	v_and_b32_e32 v34, 0xff, v12
	v_lshrrev_b32_e32 v20, 13, v12
	v_and_b32_e32 v38, 0xff, v8
	v_lshrrev_b64 v[11:12], 21, v[12:13]
	v_lshrrev_b32_e32 v13, 5, v8
	v_and_b32_e32 v0, 0x7f8, v0
	v_and_b32_e32 v8, 0x7ff, v15
	v_lshrrev_b32_e32 v2, 5, v10
	v_and_b32_e32 v40, 0xff, v10
	v_and_b32_e32 v7, 0x7f8, v7
	v_and_b32_e32 v10, -8, v16
	v_and_b32_e32 v32, 0x7f8, v9
	v_and_b32_e32 v9, 0x7ff, v17
	v_add_co_u32 v6, s0, s4, v6
	v_and_b32_e32 v18, -8, v18
	s_clause 0x1
	global_load_b64 v[14:15], v0, s[6:7]
	global_load_b64 v[16:17], v7, s[6:7]
	v_add_co_ci_u32_e64 v7, s0, s5, v8, s0
	v_and_b32_e32 v19, 0x7ff, v19
	v_add_co_u32 v8, s0, s4, v10
	v_and_b32_e32 v22, 0x7f8, v20
	v_and_b32_e32 v20, -8, v11
	v_add_co_ci_u32_e64 v9, s0, s5, v9, s0
	v_and_b32_e32 v12, 0x7ff, v12
	v_add_co_u32 v10, s0, s4, v18
	v_and_b32_e32 v2, 0x7f8, v2
	v_and_b32_e32 v0, 0x7f8, v30
	v_add_co_ci_u32_e64 v11, s0, s5, v19, s0
	global_load_b64 v[18:19], v[6:7], off
	v_add_co_u32 v6, s0, s4, v20
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v7, s0, s5, v12, s0
	global_load_b64 v[20:21], v[8:9], off
	global_load_b64 v[22:23], v22, s[6:7]
	global_load_b64 v[24:25], v[10:11], off
	global_load_b64 v[26:27], v26, s[6:7]
	global_load_b64 v[28:29], v[6:7], off
	s_clause 0x1
	global_load_b64 v[30:31], v2, s[8:9]
	global_load_b64 v[32:33], v32, s[8:9]
	v_lshlrev_b32_e32 v6, 3, v34
	global_load_b64 v[34:35], v0, s[8:9]
	v_and_b32_e32 v2, 0x7f8, v13
	v_lshlrev_b32_e32 v0, 3, v36
	global_load_b64 v[36:37], v2, s[8:9]
	v_lshlrev_b32_e32 v2, 3, v38
	global_load_b64 v[38:39], v6, s[10:11]
	v_lshlrev_b32_e32 v6, 3, v40
	s_clause 0x2
	global_load_b64 v[40:41], v0, s[10:11]
	global_load_b64 v[42:43], v2, s[10:11]
	global_load_b64 v[44:45], v6, s[10:11]
	ds_load_b128 v[6:9], v3 offset:288
	ds_load_b128 v[10:13], v3 offset:304
	s_waitcnt vmcnt(13)
	v_xor_b32_e32 v0, v15, v19
	v_xor_b32_e32 v2, v14, v18
	s_waitcnt vmcnt(12)
	v_xor_b32_e32 v15, v16, v20
	v_xor_b32_e32 v14, v17, v21
	s_waitcnt vmcnt(10)
	v_xor_b32_e32 v17, v22, v24
	v_xor_b32_e32 v16, v23, v25
	s_waitcnt vmcnt(8)
	v_xor_b32_e32 v19, v26, v28
	s_waitcnt vmcnt(7)
	v_xor_b32_e32 v0, v0, v31
	v_xor_b32_e32 v2, v2, v30
	s_waitcnt vmcnt(6)
	v_xor_b32_e32 v15, v15, v32
	s_waitcnt vmcnt(5)
	v_xor_b32_e32 v17, v17, v34
	v_xor_b32_e32 v18, v27, v29
	v_xor_b32_e32 v14, v14, v33
	v_xor_b32_e32 v16, v16, v35
	s_waitcnt vmcnt(4)
	v_xor_b32_e32 v19, v19, v36
	v_xor_b32_e32 v18, v18, v37
	s_waitcnt vmcnt(3)
	v_xor_b32_e32 v0, v0, v39
	v_xor_b32_e32 v2, v2, v38
	s_waitcnt vmcnt(2)
	v_xor_b32_e32 v15, v15, v40
	s_waitcnt vmcnt(1)
	v_xor_b32_e32 v17, v17, v42
	v_xor_b32_e32 v14, v14, v41
	v_xor_b32_e32 v16, v16, v43
	s_waitcnt vmcnt(0)
	v_xor_b32_e32 v19, v19, v44
	s_waitcnt lgkmcnt(1)
	v_xor_b32_e32 v7, v0, v7
	v_xor_b32_e32 v6, v2, v6
	v_xor_b32_e32 v8, v15, v8
	s_waitcnt lgkmcnt(0)
	v_xor_b32_e32 v10, v17, v10
	v_xor_b32_e32 v18, v18, v45
	v_xor_b32_e32 v9, v14, v9
	v_xor_b32_e32 v11, v16, v11
	v_xor_b32_e32 v12, v19, v12
	v_lshrrev_b64 v[14:15], 21, v[6:7]
	v_lshrrev_b32_e32 v0, 13, v8
	v_lshrrev_b32_e32 v2, 5, v10
	v_xor_b32_e32 v13, v18, v13
	v_and_b32_e32 v7, 0xff, v12
	v_lshrrev_b64 v[16:17], 21, v[8:9]
	v_lshrrev_b32_e32 v9, 13, v10
	v_lshrrev_b32_e32 v20, 5, v12
	v_and_b32_e32 v21, 0xff, v6
	v_lshrrev_b64 v[18:19], 21, v[10:11]
	v_lshrrev_b32_e32 v22, 13, v12
	v_lshrrev_b32_e32 v23, 5, v6
	v_and_b32_e32 v24, 0xff, v8
	v_and_b32_e32 v10, 0xff, v10
	v_lshrrev_b32_e32 v6, 13, v6
	v_lshrrev_b32_e32 v8, 5, v8
	v_and_b32_e32 v0, 0x7f8, v0
	v_and_b32_e32 v14, -8, v14
	v_and_b32_e32 v2, 0x7f8, v2
	v_lshrrev_b64 v[11:12], 21, v[12:13]
	v_lshlrev_b32_e32 v7, 3, v7
	v_and_b32_e32 v13, 0x7f8, v20
	v_lshlrev_b32_e32 v20, 3, v21
	v_and_b32_e32 v21, 0x7f8, v22
	v_and_b32_e32 v22, 0x7f8, v23
	v_lshlrev_b32_e32 v23, 3, v24
	v_lshlrev_b32_e32 v24, 3, v10
	v_and_b32_e32 v10, 0x7ff, v15
	v_and_b32_e32 v9, 0x7f8, v9
	v_and_b32_e32 v16, -8, v16
	v_and_b32_e32 v6, 0x7f8, v6
	v_and_b32_e32 v8, 0x7f8, v8
	v_and_b32_e32 v15, 0x7ff, v17
	global_load_b32 v0, v0, s[10:11]
	global_load_b32 v2, v2, s[4:5]
	global_load_b32 v25, v7, s[6:7]
	global_load_b32 v26, v9, s[10:11]
	global_load_b32 v27, v13, s[4:5]
	global_load_b32 v20, v20, s[6:7]
	global_load_b32 v21, v21, s[10:11]
	global_load_b32 v22, v22, s[4:5]
	global_load_b32 v23, v23, s[6:7]
	global_load_b32 v28, v6, s[10:11]
	global_load_b32 v29, v8, s[4:5]
	v_add_co_u32 v6, s0, s8, v14
	v_and_b32_e32 v18, -8, v18
	v_add_co_ci_u32_e64 v7, s0, s9, v10, s0
	v_and_b32_e32 v17, 0x7ff, v19
	v_add_co_u32 v8, s0, s8, v16
	v_and_b32_e32 v19, 0x7ff, v12
	v_and_b32_e32 v12, -8, v11
	v_add_co_ci_u32_e64 v9, s0, s9, v15, s0
	v_add_co_u32 v10, s0, s8, v18
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_add_co_ci_u32_e64 v11, s0, s9, v17, s0
	v_add_co_u32 v12, s0, s8, v12
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v13, s0, s9, v19, s0
	global_load_b32 v14, v24, s[6:7]
	s_clause 0x3
	global_load_b32 v15, v[6:7], off
	global_load_b32 v16, v[8:9], off
	global_load_b32 v17, v[10:11], off
	global_load_b32 v13, v[12:13], off
	ds_load_b128 v[6:9], v3 offset:320
	s_waitcnt lgkmcnt(0)
	ds_load_b128 v[9:12], v3 offset:336
	v_cmp_le_i32_e64 s0, s16, v1
	s_delay_alu instid0(VALU_DEP_1)
	s_or_b32 s3, s0, s3
	s_waitcnt vmcnt(14)
	v_and_b32_e32 v2, 0xff00, v2
	s_waitcnt vmcnt(13)
	v_and_b32_e32 v7, 0xff, v25
	s_waitcnt vmcnt(11) lgkmcnt(0)
	v_and_b32_e32 v10, 0xff00, v27
	s_waitcnt vmcnt(10)
	v_and_b32_e32 v12, 0xff, v20
	s_waitcnt vmcnt(8)
	v_and_b32_e32 v18, 0xff00, v22
	s_waitcnt vmcnt(7)
	v_and_b32_e32 v19, 0xff, v23
	s_waitcnt vmcnt(5)
	v_and_b32_e32 v20, 0xff00, v29
	s_waitcnt vmcnt(4)
	v_and_b32_e32 v14, 0xff, v14
	s_waitcnt vmcnt(3)
	v_perm_b32 v0, v15, v0, 0x7020c0c
	s_waitcnt vmcnt(2)
	v_perm_b32 v15, v16, v26, 0x7020c0c
	s_waitcnt vmcnt(1)
	v_perm_b32 v16, v17, v21, 0x7020c0c
	s_waitcnt vmcnt(0)
	v_perm_b32 v13, v13, v28, 0x7020c0c
	v_or3_b32 v0, v0, v2, v7
	v_or3_b32 v2, v15, v10, v12
	v_or3_b32 v7, v16, v18, v19
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_or3_b32 v10, v13, v20, v14
	v_xor_b32_e32 v0, v0, v6
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_xor_b32_e32 v2, v2, v8
	v_xor_b32_e32 v6, v7, v9
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_xor_b32_e32 v7, v10, v11
	v_lshrrev_b32_e32 v12, 16, v0
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_lshrrev_b32_e32 v9, 24, v2
	v_lshrrev_b32_e32 v10, 24, v6
	s_delay_alu instid0(VALU_DEP_4)
	v_lshrrev_b32_e32 v11, 24, v7
	v_lshrrev_b32_e32 v13, 16, v2
	v_lshrrev_b32_e32 v14, 16, v6
	v_lshrrev_b32_e32 v15, 16, v7
	v_lshrrev_b32_e32 v16, 8, v0
	v_lshlrev_b16 v17, 8, v2
	v_lshlrev_b16 v18, 8, v7
	v_and_b32_e32 v19, 0xff, v6
	v_lshrrev_b32_e32 v2, 8, v2
	v_lshrrev_b32_e32 v6, 8, v6
	v_lshrrev_b32_e32 v7, 8, v7
	v_lshrrev_b32_e32 v8, 24, v0
	v_and_b32_e32 v0, 0xff, v0
	v_lshlrev_b16 v2, 8, v2
	v_and_b32_e32 v16, 0xff, v16
	v_lshlrev_b16 v7, 8, v7
	v_and_b32_e32 v6, 0xff, v6
	v_lshlrev_b16 v13, 8, v13
	v_and_b32_e32 v12, 0xff, v12
	v_lshlrev_b16 v15, 8, v15
	v_and_b32_e32 v14, 0xff, v14
	v_lshlrev_b16 v9, 8, v9
	v_lshlrev_b16 v11, 8, v11
	v_or_b32_e32 v0, v0, v17
	v_or_b32_e32 v17, v19, v18
	v_or_b32_e32 v2, v16, v2
	v_or_b32_e32 v6, v6, v7
	v_or_b32_e32 v7, v12, v13
	v_or_b32_e32 v12, v14, v15
	v_or_b32_e32 v8, v8, v9
	v_or_b32_e32 v9, v10, v11
	v_and_b32_e32 v0, 0xffff, v0
	v_lshlrev_b32_e32 v17, 16, v17
	v_and_b32_e32 v2, 0xffff, v2
	v_lshlrev_b32_e32 v6, 16, v6
	v_and_b32_e32 v7, 0xffff, v7
	v_lshlrev_b32_e32 v10, 16, v12
	v_and_b32_e32 v11, 0xffff, v8
	v_lshlrev_b32_e32 v12, 16, v9
	v_or_b32_e32 v9, v0, v17
	v_or_b32_e32 v8, v2, v6
	v_or_b32_e32 v7, v7, v10
	s_delay_alu instid0(VALU_DEP_4)
	v_or_b32_e32 v6, v11, v12
	global_store_b128 v[4:5], v[6:9], off
	s_and_not1_b32 exec_lo, exec_lo, s3
	s_cbranch_execnz .LBB0_2
.LBB0_6:                                ; %Flow453
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
		.amdhsa_group_segment_fixed_size 352
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 312
		.amdhsa_user_sgpr_count 15
		.amdhsa_user_sgpr_dispatch_ptr 0
		.amdhsa_user_sgpr_queue_ptr 0
		.amdhsa_user_sgpr_kernarg_segment_ptr 1
		.amdhsa_user_sgpr_dispatch_id 0
		.amdhsa_user_sgpr_private_segment_size 0
		.amdhsa_wavefront_size32 1
		.amdhsa_uses_dynamic_stack 0
		.amdhsa_enable_private_segment 0
		.amdhsa_system_sgpr_workgroup_id_x 1
		.amdhsa_system_sgpr_workgroup_id_y 0
		.amdhsa_system_sgpr_workgroup_id_z 0
		.amdhsa_system_sgpr_workgroup_info 0
		.amdhsa_system_vgpr_workitem_id 0
		.amdhsa_next_free_vgpr 46
		.amdhsa_next_free_sgpr 22
		.amdhsa_float_round_mode_32 0
		.amdhsa_float_round_mode_16_64 0
		.amdhsa_float_denorm_mode_32 3
		.amdhsa_float_denorm_mode_16_64 3
		.amdhsa_dx10_clamp 1
		.amdhsa_ieee_mode 1
		.amdhsa_fp16_overflow 0
		.amdhsa_workgroup_processor_mode 1
		.amdhsa_memory_ordered 1
		.amdhsa_forward_progress 0
		.amdhsa_shared_vgpr_count 0
		.amdhsa_exception_fp_ieee_invalid_op 0
		.amdhsa_exception_fp_denorm_src 0
		.amdhsa_exception_fp_ieee_div_zero 0
		.amdhsa_exception_fp_ieee_overflow 0
		.amdhsa_exception_fp_ieee_underflow 0
		.amdhsa_exception_fp_ieee_inexact 0
		.amdhsa_exception_int_div_zero 0
	.end_amdhsa_kernel
	.text
.Lfunc_end0:
	.size	_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_, .Lfunc_end0-_Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 7196
; NumSgprs: 24
; NumVgprs: 46
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 352 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 5
; NumSGPRsForWavesPerEU: 24
; NumVGPRsForWavesPerEU: 46
; Occupancy: 16
; WaveLimiterHint : 1
; COMPUTE_PGM_RSRC2:SCRATCH_EN: 0
; COMPUTE_PGM_RSRC2:USER_SGPR: 15
; COMPUTE_PGM_RSRC2:TRAP_HANDLER: 0
; COMPUTE_PGM_RSRC2:TGID_X_EN: 1
; COMPUTE_PGM_RSRC2:TGID_Y_EN: 0
; COMPUTE_PGM_RSRC2:TGID_Z_EN: 0
; COMPUTE_PGM_RSRC2:TIDIG_COMP_CNT: 0
	.text
	.p2alignl 7, 3214868480
	.fill 96, 4, 3214868480
	.type	__hip_cuid_,@object             ; @__hip_cuid_
	.section	.bss,"aw",@nobits
	.globl	__hip_cuid_
__hip_cuid_:
	.byte	0                               ; 0x0
	.size	__hip_cuid_, 1

	.ident	"AMD clang version 18.0.0git (https://github.com/RadeonOpenCompute/llvm-project roc-6.3.2 25012 e5bf7e55c91490b07c49d8960fa7983d864936c4)"
	.section	".note.GNU-stack","",@progbits
	.addrsig
	.addrsig_sym __hip_cuid_
	.amdgpu_metadata
---
amdhsa.kernels:
  - .args:
      - .address_space:  global
        .offset:         0
        .size:           8
        .value_kind:     global_buffer
      - .address_space:  global
        .offset:         8
        .size:           8
        .value_kind:     global_buffer
      - .offset:         16
        .size:           4
        .value_kind:     by_value
      - .address_space:  global
        .offset:         24
        .size:           8
        .value_kind:     global_buffer
      - .address_space:  global
        .offset:         32
        .size:           8
        .value_kind:     global_buffer
      - .address_space:  global
        .offset:         40
        .size:           8
        .value_kind:     global_buffer
      - .address_space:  global
        .offset:         48
        .size:           8
        .value_kind:     global_buffer
      - .offset:         56
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         60
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         64
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         68
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         70
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         72
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         74
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         76
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         78
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         96
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         104
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         112
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         120
        .size:           2
        .value_kind:     hidden_grid_dims
    .group_segment_fixed_size: 352
    .kernarg_segment_align: 8
    .kernarg_segment_size: 312
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_
    .private_segment_fixed_size: 0
    .sgpr_count:     24
    .sgpr_spill_count: 0
    .symbol:         _Z11AES_EncryptP9aes_blockPhiPmS2_S2_S2_.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     46
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
amdhsa.target:   amdgcn-amd-amdhsa--gfx1100
amdhsa.version:
  - 1
  - 2
...

	.end_amdgpu_metadata
